diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2007-05-14 15:30:51 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2007-05-14 15:30:51 +0000 |
commit | 745415e3b258b84017a268dc613462dc0aaab7aa (patch) | |
tree | fe388a0461eb2bb5d2e8d63d5654056b7f5dc936 /Completion/Unix | |
parent | 3be3ca88057e8e735f4b931ad9177cb5aba97271 (diff) | |
download | zsh-745415e3b258b84017a268dc613462dc0aaab7aa.tar.gz zsh-745415e3b258b84017a268dc613462dc0aaab7aa.tar.xz zsh-745415e3b258b84017a268dc613462dc0aaab7aa.zip |
23438 (tweaked): improve _printers to use lpstat
Diffstat (limited to 'Completion/Unix')
-rw-r--r-- | Completion/Unix/Type/_printers | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/Completion/Unix/Type/_printers b/Completion/Unix/Type/_printers index edbc9aaae..70f10f65e 100644 --- a/Completion/Unix/Type/_printers +++ b/Completion/Unix/Type/_printers @@ -1,6 +1,7 @@ #compdef -value-,PRINTER,-default- -value-,LPDEST,-default- -local expl ret=1 list disp sep tmp +local expl ret=1 list disp sep tmp servopt +integer ind if (( $+commands[lsallq] )); then # Use AIX's command to list print queues @@ -10,6 +11,32 @@ fi zstyle -s ":completion:${curcontext}:printers" list-separator sep || sep=-- +# If we've been given a different print server on the command line, +# list printers on that. This information shouldn't be cached. +# (I) searches backwards---this is good, since some commands, such +# as lpoptions, can take multiple -h arguments and we want the last +# one before the current argument. For lpr, -h might mean something +# else and the option is -H. +if [[ $service = lpr ]]; then + servopt=-H +else + servopt=-h +fi +if (( $+commands[lpstat] )); then + ind=${words[1,CURRENT][(I)${servopt}*]} + if (( ind > 0 )); then + if [[ $words[ind] = $servopt ]]; then + tmp=-h$words[ind+1] + else + tmp=-h${words[ind][3,-1]} + fi + _wanted printers expl printer compadd "$@" - \ + ${${(f)"$(_call_program printers lpstat $tmp -a 2>/dev/null)"}%% *} && + return + fi +fi + + if (( ! $+_lp_cache )); then local file entry names i @@ -40,6 +67,17 @@ if (( ! $+_lp_cache )); then done < $file[1] fi + if (( $+commands[lpstat] )); then + # If lpstat it exists, it's possible there are some other + # printers there, so add them. + _call_program printers lpstat -a 2>/dev/null | while read entry; do + entry=${entry%%[[:blank:]]*} + if (( ${_lp_cache[(I)$entry:*]} == 0 )); then + _lp_cache+=( $entry ) + fi + done + fi + if [[ $OSTYPE = solaris* ]] && (( ${+commands[ypcat]} )) && tmp=$(_call_program printers ypcat printers.conf.byname 2>/dev/null); then _lp_cache+=( ${${${(S)${(f)tmp}/(#b):*((#e)|description=([^:]#):)*/:${match[2]}|}%%|*}:#_default*} ) # If you use YP |