* PATCH: _print, _ps1234: complete printf and prompt formats, add completer for $PROMPT and friends
@ 2012-05-02 14:38 Mikael Magnusson
0 siblings, 0 replies; only message in thread
From: Mikael Magnusson @ 2012-05-02 14:38 UTC (permalink / raw)
To: zsh-workers
I think I've posted the _ps1234 completer before but I don't remember
getting any comments then. Since then I've also added a printf format
completer and hooked them both up to print -f/P.
---
Completion/Unix/Type/.distfiles | 1 +
Completion/Unix/Type/_ps1234 | 103 ++++++++++++++++++++++++++++++++++
Completion/Zsh/Command/_print | 116 ++++++++++++++++++++++++++++-----------
3 files changed, 188 insertions(+), 32 deletions(-)
create mode 100644 Completion/Unix/Type/_ps1234
diff --git a/Completion/Unix/Type/.distfiles b/Completion/Unix/Type/.distfiles
index 4c0d688..a9dc0d1 100644
--- a/Completion/Unix/Type/.distfiles
+++ b/Completion/Unix/Type/.distfiles
@@ -36,6 +36,7 @@ _pids
_ports
_printers
_ps
+_ps1234
_pspdf
_services
_signals
diff --git a/Completion/Unix/Type/_ps1234 b/Completion/Unix/Type/_ps1234
new file mode 100644
index 0000000..32ff26a
--- /dev/null
+++ b/Completion/Unix/Type/_ps1234
@@ -0,0 +1,103 @@
+#compdef -value-,PROMPT,-default- -value-,PROMPT2,-default- -value-,PROMPT3,-default- -value-,PROMPT4,-default- -value-,RPROMPT,-default- -value-,RPROMPT2,-default- -value-,PS1,-default- -value-,PS2,-default- -value-,PS3,-default- -value-,PS4,-default- -value-,RPS1,-default- -value-,RPS2,-default-
+
+local -a specs
+local expl paren
+
+if [[ -n $compstate[quote] ]]; then
+ paren='('
+else
+ paren='\('
+fi
+
+if [[ $PREFIX == *%(-|)<-># ]]; then
+ specs=(
+ 'm:hostname up to first .'
+ '_:status of parser'
+ 'd:current working directory'
+ '/:current working directory'
+ '~:current working directory, with ~ replacement'
+ 'N:name of current script or shell function'
+ 'x:name of file containing code being executed'
+ 'c:deprecated'
+ '.:deprecated'
+ 'C:deprecated'
+ 'F:start using fg color'
+ 'K:start using bg color'
+ 'G:counts as extra character inside %{...%}'
+ )
+ if [[ $PREFIX == *% ]]; then
+ specs+=(
+ '%:A %'
+ '):A )'
+ 'l:current line (tty) with /dev/tty stripped'
+ 'M:full hostname'
+ 'n:username'
+ 'y:current line (tty)'
+ '#:a # when root, % otherwise'
+ '?:return status of last command'
+ 'h:current history event number'
+ '!:current history event number'
+ 'i:current line number'
+ 'I:current source line number'
+ 'j:number of jobs'
+ 'L:$SHLVL'
+ 'D:date in yy-mm-dd format'
+ 'T:current time of day, 24-hour format'
+ 't:current time of day, 12-hour am/pm format'
+ '@:current time of day, 12-hour am/pm format'
+ '*:current time of day, 24-hour format with seconds'
+ 'w:the date in day-dd format'
+ 'W:the date in mm/dd/yy format'
+ 'D{}:format string like strftime'
+ 'B:start bold'
+ 'b:stop bold'
+ 'E:clear to end of line'
+ 'U:start underline'
+ 'u:stop underline'
+ 'S:start standout'
+ 's:stop standout'
+ 'f:reset fg color'
+ 'k:reset bg color'
+ '{:start literal escape sequence'
+ '}:stop literal escape sequence'
+ 'v:value from $psvar array'
+ '(:ternary expression %(x.true-string.false-string)'
+ '<<:truncation from left %len<string<'
+ '>>:truncation from right %len>string>'
+ '[]:truncation from who knows where'
+ )
+ fi
+ compset -P "*"
+ _describe -t prompt-format-specifier 'prompt format specifier' specs -S ''
+ _message -e prompt-format-specifier number
+elif [[ $PREFIX == *%$paren(-|)<-># ]]; then
+ specs=(
+ '!:running with privileges'
+ '#:effective uid'
+ '?:exit status'
+ '_:at least n shell constructs started'
+ 'C:at least n path elements'
+ '/:at least n path elements'
+ '.:at least n path elements'
+ 'c:at least n path elements'
+ '~:at least n path elements'
+ 'D:month'
+ 'd:day of month'
+ 'g:effective gid'
+ 'j:number of jobs'
+ 'L:SHLVL'
+ 'l:number of characters already printed'
+ 'S:SECONDS parameter at least n'
+ 'T:current hour'
+ 't:current minute'
+ 'v:psvar has at least n elements'
+ 'V:element n of psvar is set and non-empty'
+ 'w:day of week (Sunday = 0)'
+ )
+ compset -P "*"
+ _describe -t ternary-prompt-expression 'ternary prompt format test character' specs -S ''
+ _message -e ternary-prompt-expression number
+else
+ _describe -t prompt-format-specifier 'prompt format specifier' '(%)' -S ''
+ _default "$@"
+fi
diff --git a/Completion/Zsh/Command/_print b/Completion/Zsh/Command/_print
index af0501b..290361e 100644
--- a/Completion/Zsh/Command/_print
+++ b/Completion/Zsh/Command/_print
@@ -1,32 +1,84 @@
-#compdef print
-
-local state expl line eflag pflag
-
-# -e flag available only after -R
-eflag="${words[1,CURRENT-1][(r)-*R*]:+-e[enable escapes]}"
-
-# -p flag only relevant if we have a coprocess
-(:>&p) 2>/dev/null &&
- pflag='(-s -u -z)-p[print arguments to input of coprocess]'
-
-_arguments -C -s -A "-*" -S \
- '(-f)-r[ignore escape conventions of echo]' \
- '(-r -b -f -m -s -l -N -o -O -i -c -u -p -z -D -P)-R[emulate BSD echo (no escapes, -n & -e flags only)]' \
- '-b[recognise bindkey escape sequences]' \
- '-m[remove arguments matching specified pattern]' \
- '(-r -n -R -l -N -c)-f+[print arguments as for the printf builtin]:format' \
- '(-u -p -z)-s[place results in the history list]' \
- '(-c -f)-n[do not add a newline to the result]' \
- '(-N -c -f)-l[print arguments separated by newlines]' \
- '(-n -l -c -f)-N[print arguments separated and terminated by nulls]' \
- '(-O)-o[sort arguments in ascending order]' \
- '(-o)-O[sort arguments in descending order]' \
- '-i[case-insensitive sorting]' \
- '(-n -l -N -f -s -z)-a[with -c/-C, print arguments across before down]' \
- '(-n -l -N -f -C -s -z)-c[print arguments in columns]' \
- '(-n -l -N -f -c -s -z)-C+[print arguments in specified number of columns]:columns' \
- '(-s -p -z)-u+[specify file descriptor to print arguments to]:file descriptor:_file_descriptors' \
- '(-s -p -u)-z[push arguments onto editing buffer stack]' \
- '-D[substitute any arguments which are named directories using ~ notation]' \
- '-P[perform prompt expansion]' \
- $pflag $eflag '*:default:_default'
+#compdef print printf
+
+local state expl line eflag pflag rest ret=1
+
+if [[ $service = print ]]; then
+ # -e flag available only after -R
+ eflag="${words[1,CURRENT-1][(r)-*R*]:+-e[enable escapes]}"
+
+ # -p flag only relevant if we have a coprocess
+ (:>&p) 2>/dev/null &&
+ pflag='(-s -u -z)-p[print arguments to input of coprocess]'
+
+ if [[ -n ${words[1,CURRENT][(r)-*P*]} ]]; then
+ rest='*: :_ps1234'
+ else
+ rest='*: :_default'
+ fi
+
+ _arguments -C -s -A "-*" -S \
+ '(-f)-r[ignore escape conventions of echo]' \
+ '(-r -b -f -m -s -l -N -o -O -i -c -u -p -z -D -P)-R[emulate BSD echo (no escapes, -n & -e flags only)]' \
+ '-b[recognise bindkey escape sequences]' \
+ '-m[remove arguments matching specified pattern]' \
+ '(-r -n -R -l -N -c)-f+[print arguments as for the printf builtin]:format:->printfformat' \
+ '(-u -p -z)-s[place results in the history list]' \
+ '(-c -f)-n[do not add a newline to the result]' \
+ '(-N -c -f)-l[print arguments separated by newlines]' \
+ '(-n -l -c -f)-N[print arguments separated and terminated by nulls]' \
+ '(-O)-o[sort arguments in ascending order]' \
+ '(-o)-O[sort arguments in descending order]' \
+ '-i[case-insensitive sorting]' \
+ '(-n -l -N -f -s -z)-a[with -c/-C, print arguments across before down]' \
+ '(-n -l -N -f -C -s -z)-c[print arguments in columns]' \
+ '(-n -l -N -f -c -s -z)-C+[print arguments in specified number of columns]:columns' \
+ '(-s -p -z)-u+[specify file descriptor to print arguments to]:file descriptor:_file_descriptors' \
+ '(-s -p -u)-z[push arguments onto editing buffer stack]' \
+ '-D[substitute any arguments which are named directories using ~ notation]' \
+ '-P[perform prompt expansion]' \
+ $pflag $eflag $rest && ret=0
+elif [[ $service = printf ]]; then
+ state=printf
+fi
+
+if [[ $state = printf ]]; then
+ _arguments -C -s -S \
+ '1:format:->printfformat' \
+ '*: :_default' && ret=0
+fi
+
+if [[ $state = printfformat ]]; then
+ if [[ ${(Q)PREFIX} = *%((-|)<->|[-#0 +*.])# ]]; then
+ local -a specs
+ specs=(
+ '#:alternate form'
+ '0:zeropad to length n'
+ '-:left adjust result'
+ ' :leave one space in front of positive number from signed conversion'
+ '+:always place sign before a number from signed conversion'
+ '*:field width in next argument'
+ '.:precision'
+ 'c:print the first character of the argument'
+ 's:print the argument as a string'
+ {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'
+ {e,E}':double number in scientific notation'
+ 'f:double number'
+ {g,G}':double number as %f or %e depending on size'
+ '%:a percent sign'
+ 'n:store number of printed bytes in parameter specified by argument'
+ 'b:as %s but interpret escape sequences in argument'
+ 'q:as %s but shell quote result'
+ )
+ compset -P "*"
+ _describe -t print-format-specifier 'print format specifier' specs -S ''
+ _message -e print-format-specifier 'number'
+ else
+ _describe -t print-format-specifier 'print format specifier' '(%)' -S ''
+ fi
+ ret=0
+fi
+
+return ret
--
1.7.10.GIT
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-05-02 14:38 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-02 14:38 PATCH: _print, _ps1234: complete printf and prompt formats, add completer for $PROMPT and friends Mikael Magnusson
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).