about summary refs log tree commit diff
path: root/Completion/Unix/Command/_grep
diff options
context:
space:
mode:
Diffstat (limited to 'Completion/Unix/Command/_grep')
-rw-r--r--Completion/Unix/Command/_grep87
1 files changed, 39 insertions, 48 deletions
diff --git a/Completion/Unix/Command/_grep b/Completion/Unix/Command/_grep
index 5c2fd8869..64dd5cb4e 100644
--- a/Completion/Unix/Command/_grep
+++ b/Completion/Unix/Command/_grep
@@ -1,7 +1,7 @@
 #compdef grep egrep fgrep
 # Ulrik Haugen 2001
 
-local efgrep="" efarguments arguments
+local arguments matchers
 
 (( $+_is_gnu )) || typeset -gA _is_gnu
 
@@ -14,59 +14,50 @@ if (( ! $+_is_gnu[$words[1]] )); then
   fi
 fi
 
-
-[[ "$service" = [ef]grep ]] && efgrep=t
-
-if [[ -z $efgrep ]]; then
-  efarguments=( \
-    '(--extended-regexp -F --fixed-strings)-E[extended regexp]' \
-    '(-E -F --fixed-strings)--extended-regexp' \
-    '(--fixed-strings -E --extended-regexp)-F[fixed strings]' \
-    '(-F -E --extended-regexp)--fixed-strings' \
+if [[ $service != [ef]grep ]]; then
+  matchers='(--extended-regexp --fixed-strings --basic-regexp -E -F -G)'
+  arguments=(
+    $matchers{--extended-regexp,-E}'[use extended regular expression]'
+    $matchers{--fixed-strings,-F}'[use literal strings]'
+    $matchers{--basic-regexp,-G}'[use basic regular expression]'
   )
 fi
 
-arguments=( \
-  '(-e --regexp -f --file)1:pattern:' \
-  {'(--regexp -f --file 1)-e+[regexp]','(-e -f --file 1)--regexp='}':regexp:' \
-  {'(--file -e --regexp 1)-f+[file]','(-f -e --regexp 1)--file='}':pattern file:_files' \
-  \
-  '*:files:_files' \
-  \
-  {'(--after-context)-A+[after context]','(-A)--after-context='}':after context:(1)' \
-  '(--text --binary-files)-a[text]' '(-a --binary-files)--text' \
-  {'(--before-context)-B+[before context]','(-B)--before-context='}':before context:(1)' \
-  {'(--context)-C+[context]','(-C)--context='}':context:(1)' \
-  '(--byte-offset)-b[byte offset]' '(-b)--byte-offset' \
-  '(-a --text -I)--binary-files:binary files:(binary without-match text)' \
-  '(--count)-c[count]' '(-c)--count' \
-  {'(--directories -r --recursive)-d+[directories]','(-d -r --recursive)--directories='}':directories:(read skip recurse grep)' \
-  \
-  $efarguments \
-  \
-  '(--basic-regexp)-G[basic regexp]' '(-G)--basic-regexp' \
-  '(--with-filename)-H[with filename]' '(-H)--with-filename' \
-  '(--no-filename)-h[no filename]' '(-h)--no-filename' \
-  '--help' \
-  '(--binary-files)-I[ignore binary]' \
-  '(--ignore-case)-i[ignore case]' '(-i)--ignore-case' \
-  '(--files-without-match)-L[files without match]' '(-L)--files-without-match' \
-  '(--file-with-matches)-l[files with matches]' '(-l)--files-with-matches' \
-  '--mmap' \
-  '(--line-number)-n[line number]' '(-n)--line-number' \
-  '(--quiet --silent)-q[quiet]' '(-q --quiet)--silent' '(-q --silent)--quiet' \
-  '(--recursive -d --directories)-r[recursive]' '(-r -d --directories)--recursive' \
-  '(--no-mesages)-s[no messages]' '(-s)--no-messages' \
-  '(--version)-V[version]' '(-V)--version' \
-  '(--invert-match)-v[invert match]' '(-v)--invert-match' \
-  '(--word-regexp)-w[word regexp]' '(-w)--word-regexp' \
-  '(--line-regexp)-x[line regexp]' '(-x)--line-regexp' \
-  '(--null)-Z[null]' '(-Z)--null' \
+arguments=( $arguments[@]
+  '(--after-context -A)'{--after-context=,-A+}'[specify lines of trailing context]:lines'
+  '(--text -a --binary-files -I)'{--text,-a}'[process binary file as if it were text]'
+  '(--before-context -B)'{--before-context=,-B+}'[specify lines of leading context]:lines'
+  '(--context,-C)'{--context=,-C+}'[specify lines of context]:lines'
+  '(--byte-offset -b -c)'{--byte-offset,-b}'[print the byte offset with output lines]'
+  '(--text -a -I)--binary-files=[specify type to assume for binary files]:file type:(binary without-match text)'
+  '(--count -c --byte-offset -b --line-number -n)'{--count,-c}'[only print a count of matching lines]'
+  '(--directories -d -r --recursive)'{--directories=,-d+}'[specify handling of directories]:action on directory:(read skip recurse)'
+  '(1)*'{--regexp=,-e+}'[specify pattern]:pattern'
+  '(1)*'{--file=,-f+}'[specify pattern file]:file:_files'
+  '(--with-filename -H --no-filename -h)'{--with-filename,-H}'[print filename with each match]'
+  '(--no-filename -h --with-filename -H --null -Z --files-without-match -L --file-with-matches -l)'{--no-filename,-h}'[suppress printing of filenames]'
+  '(--text -a --binary-files)-I[process binary files as if non-matching]'
+  '(--ignore-case -i -y)'{--ignore-case,-i,-y}'[case-insensitive]'
+  '(--files-without-match -L --file-with-matches -l --no-filename -h)'{--files-without-match,-L}"[output non-matching files' names only]"
+  '(--files-with-matches -l --files-without-match -L --no-filename -h)'{--files-with-matches,-l}"[output matching files' names only]"
+  '(--line-number -n -c)'{--line-number,-n}'[prefix output with line numbers]'
+  '(--quiet --silent -q)'{--quiet,--silent,-q}'[suppress normal output]'
+  '(--recursive -r -d --directories)'{--recursive,-r}'[recurse subdirectories]'
+  '(--no-mesages -s)'{--no-messages,-s}'[suppress messages about unreadable]'
+  '(--version -V)'{--version,-V}'[display version info]'
+  '(--invert-match -v)'{--invert-match,-v}'[select non-matching lines]'
+  '(--word-regexp -w --line-regexp -x)'{--word-regexp,-w}'[force pattern to match only whole words]'
+  '(--line-regexp -x --word-regexp -w)'{--line-regexp,-x}'[force pattern to match only whole lines]'
+  '(--null -Z --no-filename -h)'{--null,-Z}'[print 0 byte after FILE name]'
+  '--help[display help]'
+  '--mmap[memory map input]'
+  '(-e --regexp -f --file)1:pattern:_guard "^--*"'
+  '*:files:_files'
 )
 
 # remove long options?
 [[ -z "$_is_gnu[$words[1]]" ]] &&
-    arguments=( ${${${${arguments:#*\)--*}:#--*}//--[^ )]#/}/\( #\)/} )
+    arguments=( ${${${arguments:#(|*\)(\*|))--*}//--[^ )]#/}/\( #\)/} )
 
-_arguments -s $arguments
+_arguments -s $arguments[@]