summary refs log tree commit diff
path: root/Completion/Unix/Command
diff options
context:
space:
mode:
authorOliver Kiddle <okiddle@yahoo.co.uk>2018-06-04 00:04:36 +0200
committerOliver Kiddle <okiddle@yahoo.co.uk>2018-06-04 00:07:23 +0200
commit47f34eff93bb0197865ad02302346298c6e9585d (patch)
tree71d4ddb963e5ccf268f8cfc93a0dfad959b5847a /Completion/Unix/Command
parent780c96697257a32bf50808be04dd0c79da48e345 (diff)
downloadzsh-47f34eff93bb0197865ad02302346298c6e9585d.tar.gz
zsh-47f34eff93bb0197865ad02302346298c6e9585d.tar.xz
zsh-47f34eff93bb0197865ad02302346298c6e9585d.zip
42881: update options in ghostscript completion and query more matches directly from it
Diffstat (limited to 'Completion/Unix/Command')
-rw-r--r--Completion/Unix/Command/_ghostscript121
-rw-r--r--Completion/Unix/Command/_gs57
2 files changed, 121 insertions, 57 deletions
diff --git a/Completion/Unix/Command/_ghostscript b/Completion/Unix/Command/_ghostscript
new file mode 100644
index 000000000..2c6f40a35
--- /dev/null
+++ b/Completion/Unix/Command/_ghostscript
@@ -0,0 +1,121 @@
+#compdef gs ghostscript
+
+local -a specs names device
+
+device=( ${${path[1,CURRENT-1]}[(R)-sDEVICE=*]} )
+
+if compset -N '-[-+@]'; then
+  if [[ CURRENT -eq 1 ]]; then
+    _pspdf
+  else
+    _message -e arguments 'userdict ARGUMENTS'
+    return 1
+  fi
+elif compset -P '@'; then
+  _files
+else
+  local curcontext="$curcontext" state line expl ret=1
+  typeset -A opt_args
+
+  _x_arguments -C \
+    '-q[quiet startup]' \
+    '-g-[set device size]:device size (<width>x<height>):' \
+    '-r-[set resolution]:resolution (<val> or <x>x<y>):' \
+    '-I+[add to library file search path]:directory:_dir_list' \
+    \*-{d,D}'-[define name with definition]:def:->dname' \
+    \*-{s,S}'-[define name with value]:def:->sname' \
+    '-u[undefine name, cancelling -d or -s]:name:->uname' \
+    '-P[look first in the current directory for library files]' \
+    '-c[specify postscript code]:*[-@]*:postscript (-f to end)' \
+    '-o+[specify OutputFile and enable -dPATCH and -dNOPAUSE options]: :->outfile' \
+    '(- *)-'{h,\?}'[display useful options and available devices]' \
+    '!-f-:PostScript or PDF file:_pspdf' \
+    '*:PostScript or PDF file:_pspdf' && ret=0
+
+  [[ $state = sname ]] && compset -P '(stdout|OutputFile)=' && state=outfile
+  case "$state" in
+  dname)
+    if [[ "$PREFIX" = *\=* ]]; then
+      _message -e definition-values 'systemdict definition value'
+    else
+      names=( ${${(f)"$($words[1] -q -o /dev/null -DNODISPLAY -c 'systemdict { type /booleantype eq { = } if } forall')"}:#*[a-z]*} )
+      _wanted boolean-definitions expl 'systemdict boolean definition' compadd -M 'm:{a-z}={A-Z}' -a names && ret=0
+      names=( FirstPage LastPage
+          $($words[1] -q -o /dev/null $device -DNODISPLAY -c 'currentpagedevice { type /integertype eq { = } if } forall') )
+      _wanted integer-definitions expl 'currentpagedevice integer definition' compadd -S = -M 'm:{a-z}={A-Z}' -a names && ret=0
+    fi
+    ;;
+  sname)
+    if compset -P 1 '*='; then
+      case "$IPREFIX" in
+      *DEVICE\=)
+        _wanted devices expl 'ghostscript device' \
+	    compadd - ${(0)"$($words[1] -q -o /dev/null -DNODISPLAY -c 'devicenames { dup length string cvs print (\0) print } forall')"} && ret=0
+        ;;
+      *PAPERSIZE=)
+	names=( $($words[1] -q -o /dev/null -DNODISPLAY -c 'statusdict /.pagetypenames get { = } forall ') )
+	_description paper-sizes expl 'paper size'
+	compadd "$expl[@]" -a names && ret=0
+      ;;
+      *PDFSETTINGS=)
+	_description settings expl 'configuration'
+	compadd "$expl[@]" /screen /ebook /printer /prepress /default && ret=0
+      ;;
+      *AutoRotatePages=)
+	_description settings expl 'orientation selection'
+	compadd "$expl[@]" /None /All /PageByPage && ret=0
+      ;;
+      *CompatibilityLevel=)
+	_description pdf-levels expl 'PDF compatibility level'
+	compadd "$expl[@]" 1.{2,3,4} && ret=0
+      ;;
+      *FONT=) # e.g. SUBSTFONT
+	_wanted fonts expl 'font' compadd - \
+	    $($words[1] -q -o /dev/null -DNODISPLAY -c '(*) { = } 256 string /Font resourceforall') && ret=0
+      ;;
+      *)
+        _message -e values 'systemdict value'
+        return 1
+      ;;
+      esac
+    else
+      _wanted definition-names expl 'systemdict name' compadd -S\= -M 'm:{a-z}={A-Z}' - \
+	  DEVICE OutputFile PAPERSIZE PDFSETTINGS CompatibilityLevel stdout COLORSCREEN \
+	  DITHERPPI InterpolateControl TextAlphaBits GraphicsAlphaBits PageList SUBSTFONT \
+	  && ret=0
+    fi
+    ;;
+  uname)
+    _message -e definition-names 'systemdict definition name'
+  ;;
+  outfile)
+    if compset -P "*%"; then
+      specs=(
+	{d,i}':signed decimal number or with leading " numeric value of following character'
+	'o:unsigned octal number'
+	'u:unsigned decimal number'
+	{x,X}':unsigned hexadecimal number, letters capitalized as x'
+	'%:a literal percent sign'
+	'#:alternate form'
+	'0:zero pad to length'
+	'-:left adjust result'
+	'+:always place sign before number'
+	'.:precision'
+      )
+      if ! compset -P '[0-9#.+-]##'; then
+	specs+=(
+	  'stdout:redirect to standard output'
+	  'stderr:redirect to standard error'
+	  'pipe%:redirect to a pipe'
+	)
+      fi
+      _describe -t print-format-specifiers 'print format specifier' specs -S '' && ret=0
+    else
+      _description files expl 'output file'
+      _files "$expl[@]" && ret=0
+    fi
+  ;;
+  esac
+
+  return ret
+fi
diff --git a/Completion/Unix/Command/_gs b/Completion/Unix/Command/_gs
deleted file mode 100644
index 98ba14912..000000000
--- a/Completion/Unix/Command/_gs
+++ /dev/null
@@ -1,57 +0,0 @@
-#compdef gs ghostscript
-
-if compset -N --; then
-  if [[ CURRENT -eq 1 ]]; then
-    _pspdf
-  else
-    _message -e arguments 'userdict ARGUMENTS'
-    return 1
-  fi
-else
-  local curcontext="$curcontext" state line expl ret=1
-  typeset -A opt_args
-
-  _x_arguments -C \
-    '-q[quiet startup]' \
-    '-g-[set device size]:device size (<width>x<height>):' \
-    '-r-[set resolution]:resolution (<val> or <x>x<y>):' \
-    '-I[add to library file search path]:directory:_dir_list' \
-    \*-{d,D}'-[define name with definition]:def:->dname' \
-    \*-{s,S}'-[define name with value]:def:->sname' \
-    '*:PostScript or PDF file:_pspdf' && ret=0
-
-  case "$state" in
-  dname)
-    if [[ "$PREFIX" = *\=* ]]; then
-      _message -e definition-values 'systemdict definition value'
-    else
-      _wanted names expl 'systemdict definition name' \
-          compadd -M 'm:{a-z}={A-Z}' - \
-                  DISKFONTS NOCACHE NOBIND NODISPLAY NOPAUSE PLATFONTS SAFER \
-                  WRITESYSTEMDICT && ret=0
-    fi
-    ;;
-  sname)
-    if compset -P 1 '*='; then
-      case "$IPREFIX" in
-      *DEVICE\=)
-        _wanted devices expl 'ghostscript device' \
-            compadd - "${(@)${=${$(_call_program devices gs -h)##* devices:}%%Search path:*}:#}" && ret=0
-        ;;
-      *OutputFile\=)
-        _description files expl 'output file'
-        _files "$expl[@]" && ret=0
-        ;;
-      *)
-        _message -e values 'systemdict value'
-        return 1
-      esac
-    else
-      _wanted names expl 'systemdict name' \
-          compadd -S\= -M 'm:{a-z}={A-Z}' - DEVICE OutputFile && ret=0
-    fi
-    ;;
-  esac
-
-  return ret
-fi