mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-11-12 21:39:48 +01:00
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.
This commit is contained in:
parent
57b178102c
commit
8d814fdff6
1 changed files with 15 additions and 16 deletions
23
lib/grep.zsh
23
lib/grep.zsh
|
@ -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
|
||||||
|
|
||||||
{
|
{
|
||||||
|
if [[ -n "$GREP_OPTIONS" ]]; then
|
||||||
# export grep, egrep and fgrep settings
|
# export grep, egrep and fgrep settings
|
||||||
echo alias grep="'grep $GREP_OPTIONS'"
|
echo alias grep="'grep $GREP_OPTIONS'"
|
||||||
echo alias egrep="'egrep $GREP_OPTIONS'"
|
echo alias egrep="'egrep $GREP_OPTIONS'"
|
||||||
echo alias fgrep="'fgrep $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
|
||||||
|
|
Loading…
Reference in a new issue