summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMarc Cornellà <marc.cornella@live.com>2020-03-01 14:02:06 +0100
committerMarc Cornellà <marc.cornella@live.com>2020-03-01 14:05:01 +0100
commit8d814fdff6f57e83a2b0c9430f61f7093a95bd04 (patch)
treee61218a56eebd5006896acb97e779c1e3d1b8209 /lib
parent57b178102c0016f5c433054ce981a80dd4b4b73f (diff)
downloadzsh-8d814fdff6f57e83a2b0c9430f61f7093a95bd04.tar.gz
zsh-8d814fdff6f57e83a2b0c9430f61f7093a95bd04.tar.bz2
zsh-8d814fdff6f57e83a2b0c9430f61f7093a95bd04.zip
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/grep.zsh31
1 files changed, 15 insertions, 16 deletions
diff --git a/lib/grep.zsh b/lib/grep.zsh
index df9146aa4..933de2990 100644
--- a/lib/grep.zsh
+++ b/lib/grep.zsh
@@ -4,37 +4,36 @@ if (( $#_grep_alias_cache )); then
source "$ZSH_CACHE_DIR"/grep_alias.zsh
else
# is x grep argument available?
- grep-flag-available() {
- echo | grep $1 "" >/dev/null 2>&1
+ grep-flags-available() {
+ echo | grep "$@" "" >/dev/null 2>&1
}
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)
EXC_FOLDERS="{.bzr,CVS,.git,.hg,.svn,.idea,.tox}"
- if grep-flag-available --exclude-dir=.cvs; then
- GREP_OPTIONS+=" --exclude-dir=$EXC_FOLDERS"
- elif grep-flag-available --exclude=.cvs; then
- GREP_OPTIONS+=" --exclude=$EXC_FOLDERS"
+ if grep-flags-available --color=auto --exclude-dir=.cvs; then
+ GREP_OPTIONS+="--color=auto --exclude-dir=$EXC_FOLDERS"
+ elif grep-flags-available --color=auto --exclude=.cvs; then
+ GREP_OPTIONS+="--color=auto --exclude=$EXC_FOLDERS"
+ elif grep-flags-available --color=auto; then
+ GREP_OPTIONS+="--color=auto"
fi
{
- # export grep, egrep and fgrep settings
- echo alias grep="'grep $GREP_OPTIONS'"
- echo alias egrep="'egrep $GREP_OPTIONS'"
- echo alias fgrep="'fgrep $GREP_OPTIONS'"
+ if [[ -n "$GREP_OPTIONS" ]]; then
+ # export grep, egrep and fgrep settings
+ echo alias grep="'grep $GREP_OPTIONS'"
+ echo alias egrep="'egrep $GREP_OPTIONS'"
+ echo alias fgrep="'fgrep $GREP_OPTIONS'"
+ fi
} > "$ZSH_CACHE_DIR/grep_alias.zsh"
source "$ZSH_CACHE_DIR/grep_alias.zsh"
# clean up
unset GREP_OPTIONS EXC_FOLDERS
- unfunction grep-flag-available
+ unfunction grep-flags-available
fi
unset _grep_alias_cache