Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

lp completion update



Attached patch adds completion for lpadmin and lpinfo, and fixes some
minor bugs.

GI

-- 
100 THINGS I'D DO IF I EVER BECAME AN EVIL OVERLORD
100. Finally, to keep my subjects permanently locked in a mindless
trance, I will provide each of them with free unlimited Internet access.

diff --git a/Completion/Unix/Command/_lp b/Completion/Unix/Command/_lp
index def9aed..f05fded 100644
--- a/Completion/Unix/Command/_lp
+++ b/Completion/Unix/Command/_lp
@@ -1,9 +1,9 @@
-#compdef lp lpr lpq lprm lpoptions lpstat
+#compdef lp lpr lpq lprm lpoptions lpstat lpinfo lpadmin
 
 _lp_get_printer()
 {
-  # No reason to call _lp_get_printer when service == lpstat. Others matched
-  # below.
+  # No reason to call _lp_get_printer when service == lpstat or lpinfo. Others
+  # matched below.
   case $service in
     (lpr|lpq|lprm)
       [[ "$words" == (#I)*-P* ]] && printer="${${words##*(#I)-P( |)}%% *}"
@@ -11,6 +11,9 @@ _lp_get_printer()
     (lp)
       [[ "$words" == (#I)*-d* ]] && printer="${${words##*(#I)-d( |)}%% *}"
       ;;
+    (lpadmin)
+      [[ "$words" == (#I)*-p* ]] && printer="${${words##*(#I)-p( |)}%% *}"
+      ;;
     (lpoptions)
       [[ "$words" == (#I)*-(d|p)* ]] && \
 	printer="${${words##*(#I)-(d|p)( |)}%% *}"
@@ -29,6 +32,13 @@ _lp_job_options()
 
   lopts_no_args=(fitplot landscape)
 
+  if [[ $service == 'lpadmin' ]]; then
+    # Extra options from lpadmin man page.
+    lopts_with_args+=(cupsIPPSupplies cupsSNMPSupplies job-k-limit
+      job-page-limit job-quota-period job-sheets-default name name-default
+      port-monitor printer-error-policy printer-is-shared printer-op-policy)
+  fi
+
   _lp_get_printer
   [[ -n "$printer" ]] && printer=(-p $printer)
 
@@ -53,6 +63,12 @@ _lp_job_options()
       (scaling|cpi|lpi|page-(bottom|left|right|top))
 	return 0; # Don't complete anything
 	;;
+      (cupsIPPSupplies|cupsSNMPSupplies|printer-is-shared)
+	compadd "$@" true false
+	;;
+      (printer-error-policy)
+	compadd "$@" abort-job retry-job retry-current-job stop-printer
+	;;
       (*)
 	compadd "$@" \
 	  $(_call_program list-printer-options lpoptions $printer -l | \
@@ -133,7 +149,7 @@ _lp()
   case $service in
     (lpq)
       _arguments \
-	'-E[force encryption]' \
+	'-E[Force encryption]' \
 	'-U:username (for connection to server):_users' \
 	'-h:alternate server:_hosts' \
 	'(-a)-P+[destination printer]:printers:_printers' \
@@ -144,7 +160,7 @@ _lp()
 
     (lprm)
       _arguments \
-	'-E[force encryption]' \
+	'-E[Force encryption]' \
 	'-U:username (for connection to server):_users' \
 	'-h:alternate server:_hosts' \
 	'-P+[destination printer]:printers:_printers' \
@@ -153,74 +169,109 @@ _lp()
 
     (lpoptions)
       _arguments \
-	'-E[force encryption]' \
+	'-E[Force encryption]' \
 	'-U:username (for connection to server):_users' \
 	'-h:alternate server:_hosts' \
-	'(-p -l -r -x)-d[set default printer]:printers:_printers' \
+	'(-p -l -r -x)-d+[set default printer]:printers:_printers' \
 	'(-l -x)*-o:job options:_lp_job_options' \
-	'(-d -x)-p[destination printer for options]:printers:_printers' \
+	'(-d -x)-p+[destination printer for options]:printers:_printers' \
 	'(-d -o -r -x)-l[list options]' \
 	'(-d -l -x)*-r:remove option:_lp_job_options' \
-	'(-d -l -r -o)-x[remove all options]:printers:_printers'
+	'(-d -l -r -o)-x+[remove all options]:printers:_printers'
       ;;
 
     (lpstat)
       _arguments \
-	'-E[force encryption]' \
-	'-R[shows print job ranking]' \
+	'-E[Force encryption]' \
+	'-R[Shows print job ranking]' \
 	'-U:username (for connection to server):_users' \
 	'-W:which jobs:(completed not-completed)' \
-	'-a[show accepting state]:printers:_printers' \
+	'-a+[Show accepting state]:printers:_printers' \
 	'-c:printer classes:' \
-	'-d[show current default destination]' \
+	'-d[Show current default destination]' \
 	'-h:hostname (alternate server):_hosts' \
 	'-l[long listing]' \
-	'-o[destinations]:printers:_printers' \
-	'-p:printers:_printers' \
+	'-o+[destinations]:printers:_printers' \
+	'-p+:printers:_printers' \
 	'-r[CUPS server running status]' \
-	'-s[status summary]' \
-	'-t[all status info]' \
+	'-s[Status summary]' \
+	'-t[All status info]' \
 	'-u[list jobs by users]:users:_users' \
-	'-v[show devices]:printers:_printers'
+	'-v+[show devices]:printers:_printers'
       ;;
 
     (lpr)
       _arguments \
-	'-E[force encryption]' \
+	'-E[Force encryption]' \
 	'-H:hostname (alternate server):_hosts' \
 	'(-C -J -T)'-{C,J,T}':job name:' \
 	'-P+[destination printer]:printers:_printers' \
 	'-U:username (for connection to server):_users' \
-	'-#[copies]:copies (1--100):' \
-	'-h[disables banner printing]' \
+	'-#[Copies]:copies (1--100):' \
+	'-h[Disables banner printing]' \
 	'-l[raw file]' \
-	'-m[send an email on job completion]' \
+	'-m[Send an email on job completion]' \
 	'*-o:print job options:_lp_job_options' \
 	'-p[format with shaded header incl. date, time etc.]' \
-	'-q[hold job for printing]' \
+	'-q[Hold job for printing.]' \
 	'-r[delete files after printing]' \
 	'*:PS/PDF files:_pspdf'
       ;;
 
     (lp)
       _arguments \
-	'-E[force encryption]' \
+	'-E[Force encryption]' \
 	'-U[username (for connection to server)]:username:_users' \
 	'-c[(OBSOLETE) copy to spool dir before printing]' \
-	'-d[destination printer]:printers:_printers' \
+	'-d+[destination printer]:printers:_printers' \
 	'-h:hostname (alternate server):_hosts' \
 	'-i[job id to modify]:job id:' \
-	'-m[send an email on job completion]' \
-	'-n[copies]:copies (1--100):' \
+	'-m[Send an email on job completion]' \
+	'-n[Copies]:copies (1--100):' \
 	'*-o:print job options:_lp_job_options' \
-	'-q[job priority -- 1 (lowest) to 100 (highest)]:priority:' \
-	'-s[dont report resulting job IDs]' \
-	'-t[sets the job name]:job name:' \
+	'-q[Job priority -- 1 (lowest) to 100 (highest)]:priority:' \
+	'-s[Dont report resulting job IDs]' \
+	'-t[Sets the job name]:job name:' \
 	'-u[job submission username]:username:_users' \
-	'-H[time to print]:print time (or enter hh\:mm):(hold immediate restart resume)' \
+	'-H[Time to print]:print time (or enter hh\:mm):(hold immediate restart resume)' \
 	'-P:page range list:' \
 	'*:PS/PDF files:_pspdf'
       ;;
+
+    (lpinfo)
+      _arguments \
+	'-E[Force encryption]' \
+	'-U[username (for connection to server)]:username:_users' \
+	'-h:hostname (alternate server):_hosts' \
+	'-l[Shows a "long" listing of devices or drivers]' \
+	{--exclude-schemes,--include-schemes}'[device/PPD schemes to filter from results]:scheme-list:' \
+	'(-v --timeout)--device-id[IEEE-1284 device ID to match]:device-id-string:' \
+	'(-v --timeout)--language:locale:' \
+	'(-v --timeout)--product[product to match]:name:' \
+	'(-v --timeout)--make-and-model[make and model to match]:name:' \
+	'(-v --timeout)-m[list available drivers]' \
+	'(-m --device-id --language --make-and-model --product)--timeout[timeout when listing devices with -v]:timeout (seconds):' \
+	'(-m --device-id --language --make-and-model --product)-v[list available devices]'
+      ;;
+
+    (lpadmin)
+      _arguments \
+	'-E[Force encryption/Enable destination]' \
+	'-U[username (for connection to server)]:username:_users' \
+	'-h:hostname (alternate server):_hosts' \
+	'(-p -R -x -o)-d+[default printer]:printers:_printers' \
+	'(-d -x)-p+[configure printer]:printers:_printers' \
+	'(-p -R -d -o)-x+[delete printer]:printers:_printers' \
+	'(-x -d)-R[name-default]:name-default:' \
+	'-c:printer classes:' \
+	'-m:model:' \
+	'(-x -d)*-o:options:_lp_job_options' \
+	'-r[remove from class]:class:' \
+	'-u[access policy]:access policy:' \
+	'-v[device-uri of printer queue]:device-uri:' \
+	'-D[Text description of destination]:info:' \
+	'-L[Location of the printer]:location:' \
+	'-P[PPD file to use]:PPD file:_files "*.(#i)ppd(-.)"'
   esac
 }
 


Messages sorted by: Reverse Date, Date, Thread, Author