Commit 8d814fdf authored by Marc Cornellà's avatar Marc Cornellà
Browse files

Fast algorithm to determine grep alias flags

This version tries whether grep supports all the flags together
and progressively checks older flags if the grep test fails.
This means only one grep call if all flags are supported, and
one additional call for every flag that's not supported, up to
a maximum of 3 calls.
parent 57b17810
...@@ -4,37 +4,36 @@ if (( $#_grep_alias_cache )); then ...@@ -4,37 +4,36 @@ if (( $#_grep_alias_cache )); then
source "$ZSH_CACHE_DIR"/grep_alias.zsh source "$ZSH_CACHE_DIR"/grep_alias.zsh
else else
# is x grep argument available? # is x grep argument available?
grep-flag-available() { grep-flags-available() {
echo | grep $1 "" >/dev/null 2>&1 echo | grep "$@" "" >/dev/null 2>&1
} }
GREP_OPTIONS="" GREP_OPTIONS=""
# color grep results
if grep-flag-available --color=auto; then
GREP_OPTIONS+=" --color=auto"
fi
# ignore these folders (if the necessary grep flags are available) # ignore these folders (if the necessary grep flags are available)
EXC_FOLDERS="{.bzr,CVS,.git,.hg,.svn,.idea,.tox}" EXC_FOLDERS="{.bzr,CVS,.git,.hg,.svn,.idea,.tox}"
if grep-flag-available --exclude-dir=.cvs; then if grep-flags-available --color=auto --exclude-dir=.cvs; then
GREP_OPTIONS+=" --exclude-dir=$EXC_FOLDERS" GREP_OPTIONS+="--color=auto --exclude-dir=$EXC_FOLDERS"
elif grep-flag-available --exclude=.cvs; then elif grep-flags-available --color=auto --exclude=.cvs; then
GREP_OPTIONS+=" --exclude=$EXC_FOLDERS" GREP_OPTIONS+="--color=auto --exclude=$EXC_FOLDERS"
elif grep-flags-available --color=auto; then
GREP_OPTIONS+="--color=auto"
fi fi
{ {
# export grep, egrep and fgrep settings if [[ -n "$GREP_OPTIONS" ]]; then
echo alias grep="'grep $GREP_OPTIONS'" # export grep, egrep and fgrep settings
echo alias egrep="'egrep $GREP_OPTIONS'" echo alias grep="'grep $GREP_OPTIONS'"
echo alias fgrep="'fgrep $GREP_OPTIONS'" echo alias egrep="'egrep $GREP_OPTIONS'"
echo alias fgrep="'fgrep $GREP_OPTIONS'"
fi
} > "$ZSH_CACHE_DIR/grep_alias.zsh" } > "$ZSH_CACHE_DIR/grep_alias.zsh"
source "$ZSH_CACHE_DIR/grep_alias.zsh" source "$ZSH_CACHE_DIR/grep_alias.zsh"
# clean up # clean up
unset GREP_OPTIONS EXC_FOLDERS unset GREP_OPTIONS EXC_FOLDERS
unfunction grep-flag-available unfunction grep-flags-available
fi fi
unset _grep_alias_cache unset _grep_alias_cache
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment