浏览代码

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.
Marc Cornellà 5 年之前
父节点
当前提交
8d814fdff6
共有 1 个文件被更改,包括 15 次插入16 次删除
  1. 15 16
      lib/grep.zsh

+ 15 - 16
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