summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--Completion/Unix/Command/_perforce216
-rwxr-xr-xCompletion/X/Command/_kfmclient9
3 files changed, 214 insertions, 21 deletions
diff --git a/ChangeLog b/ChangeLog
index 739aa022a..aa331dcfc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-04-26  Peter Stephenson  <pws@csr.com>
+
+	* unposted: Completion/Unix/Command/_perforce: update to Perforce
+	2009.2 features.
+
+	* unposted: Completion/X/Command/_kfmclient: also kioclient;
+	probe desktop bindings.
+
 2010-04-25  Clint Adams  <clint@zsh.org>
 
 	* 27912: Completion/Linux/Command/_lsusb: presume that
@@ -13060,5 +13068,5 @@
 
 *****************************************************
 * This is used by the shell to define $ZSH_PATCHLEVEL
-* $Revision: 1.4964 $
+* $Revision: 1.4965 $
 *****************************************************
diff --git a/Completion/Unix/Command/_perforce b/Completion/Unix/Command/_perforce
index d451d7002..04482be6f 100644
--- a/Completion/Unix/Command/_perforce
+++ b/Completion/Unix/Command/_perforce
@@ -414,6 +414,8 @@ _perforce() {
       '-xi[switch server database to unicode mode and quit]' \
       '-xu[run database upgrade and quit]' \
       '-c[run command and exit]:command of some sort: ' \
+      '-Id[specify description]:description: ' \
+      '-In[specify unique name]:name: ' \
       '-jc[checkpoint, save and truncate journal]::optional prefix: ' \
       '-jd[checkpoint, not saving journal]::optional file:_files' \
       '-jj[save and truncate journal]::optional prefix: ' \
@@ -487,7 +489,10 @@ _perforce_gen_cmd_list() {
   local -a unsup
   unsup=(
     "attribute:Set attributes for open file (EXPERIMENTAL)"
+    "dbschema:Report meta database information"
+    "export:Rxtract journal or checkpoint records"
     "interchanges:Report changes not yet integrated between branches"
+    "replicate:Poll for journal changes and apply to another server"
     "spec:Allows limited changes to form specifications (admin)"
   )
   for line in $unsup; do
@@ -560,6 +565,7 @@ _perforce_global_options() {
     '-s[output script tags]' \
     '-u+[user]:user name:_perforce_users' \
     '-x+[filename or -]:file:_perforce_files_or_minus' \
+    '-z+[select output format]:output format:(tag)'
   )
 
   integer i
@@ -660,6 +666,12 @@ awk '/^Client:/ { print $2 }')")
       ctype="local pending "
       ;;
 
+      # Changes that were shelved
+      (-tS)
+      cstatus=(-s shelved)
+      ctype="shelved "
+      ;;
+
       # Range allowed: append comma and supply rules for
       # removing and handling subsequent `#'.
       (-tR)
@@ -671,7 +683,9 @@ awk '/^Client:/ { print $2 }')")
   # output.
   cl=(
 ${${${${(f)"$(_perforce_call_p4 changes changes $amax $xargs $cstatus \$file)"}##Change\ }//\ on\ /:}/\ by\ /\ }
-"default:change not yet numbered")
+  )
+  # "default" can't have shelved files in it...
+  [[ $ctype = shelved* ]] || cl+=("default:change not yet numbered")
   [[ $#cl -eq 1 && $cl[1] = '' ]] && cl=()
   _describe -t changes "${ctype}change" cl -V changes-unsorted $comma
 }
@@ -764,6 +778,16 @@ _perforce_dates() {
 }
 
 
+(( $+functions[_perforce_dbtables] )) ||
+_perforce_dbtables() {
+  local -a tables
+  tables=(archmap bodtext change changex counters depot domain have integ
+    integed ixtext label locks resolve rev revcx revdx revhx revsx trigger
+    user view working)
+  _describe -t db-table "DB table" tables
+}
+
+
 (( $+functions[_perforce_depots] )) ||
 _perforce_depots() {
   local dline match mbegin mend
@@ -1232,7 +1256,9 @@ _perforce_filetypes() {
       "C:server stores compress file per revision"
       "D:server stores deltas in RCS format"
       "F:server stores full file per revision"
-      "S:server stores only head revision")
+      "S:server stores only head revision"
+      "X:externally archived file"
+    )
     _describe -t file-modifiers 'Perforce file modifier' values
   else
     values=(
@@ -1246,6 +1272,28 @@ _perforce_filetypes() {
 }
 
 
+(( $+functions[_perforce_fstat_fields] )) ||
+_perforce_fstat_fields() {
+  local sep
+  if [[ $argv[-1] = -tv ]]; then
+    # jobview, space is separator
+    sep=' '
+  else
+    sep=','
+  fi
+  local -a values
+  # yes, "phew", sorry.
+  # output from "p4 help fstat" gives fields like
+  #    digest               -- MD5 digest (fingerprint)
+  # etc. etc.
+  values=(
+    ${${${${(M)${(f)"$(_perforce_call_p4 help-fstat help fstat)"}:#[[:blank:]]#[a-zA-Z]##(|\#)[[:blank:]]##--*}##[[:blank:]]#}:#fstat *}//[[:blank:]]##--[[:blank:]]##/:}
+  )
+  compset -P '*[,[:blank:]]'
+  _describe -t fstat-fields 'Perforce fstat fields' values -S, -q
+}
+
+
 (( $+functions[_perforce_groups] )) ||
 _perforce_groups() {
   local -a values
@@ -1556,15 +1604,27 @@ _perforce_cmd_admin() {
     local -a adcmds
     adcmds=(
       "checkpoint:checkpoint, save copy of journal file"
+      "dbstat:db tables"
       "journal:save and truncate journal file"
+      "logstat:report sizes of log files"
       "stop:stop the server")
     _describe -t commands 'Perforce admin command' adcmds
-  elif [[ $words[2] == (checkpoint|journal) ]]; then
-    shift words
-    (( CURRENT-- ))
-    _arguments -s : \
-      '-z[gzip journal file]' \
-      '1::journal file prefix: '
+  else
+    case $words[2] in
+      (checkpoint|journal)
+      shift words
+      (( CURRENT-- ))
+      _arguments -s : \
+	'-z[gzip journal file]' \
+	'1::journal file prefix: '
+      ;;
+
+      (dbstat)
+      shift words
+      (( CURRENT -- ))
+      _arguments -s : \
+	'-s[show sizes]'
+    esac
   fi
 }
 
@@ -1613,6 +1673,7 @@ _perforce_cmd_branch() {
 (( $+functions[_perforce_cmd_branches] )) ||
 _perforce_cmd_branches() {
   _arguments -s : \
+    '-e[limit by wildcard]:wildcard on branches: ' \
     '-u+[select by user]:user:_perforce_users' \
     '-m+[set maximum to show]:max branches: '
 }
@@ -1657,7 +1718,7 @@ _perforce_cmd_changes() {
     '-L[long output, truncated change text]' \
     '-c+[select by client]:client:_perforce_clients' \
     '-m+[most recent N changes]:max changes: ' \
-    '-s+[select by status]:status:(pending submitted)' \
+    '-s+[select by status]:status:(pending shelved submitted)' \
     '-u+[select by user]:user:_perforce_users' \
     '*::file:_perforce_files -tR'
 }
@@ -1684,6 +1745,7 @@ _perforce_cmd_client() {
 (( $+functions[_perforce_cmd_clients] )) ||
 _perforce_cmd_clients() {
   _arguments -s : \
+    '-e[limit by wildcard]:wildcard on clients: ' \
     '-u+[select by user]:user:_perforce_users' \
     '-m+[set maximum to show]:max clients: '
 }
@@ -1706,6 +1768,26 @@ _perforce_cmd_counters() {
 }
 
 
+(( $+functions[_perforce_cmd_dbschema] )) ||
+_perforce_cmd_dbschema() {
+  if [[ $PREFIX = *:* ]]; then
+    _message 'table version'
+  else
+    _perforce_dbtables
+  fi
+}
+
+
+(( $+functions[_perforce_cmd_dbstat] )) ||
+_perforce_cmd_dbstat() {
+  _arguments -s : \
+  '(-s)-h[histogram of leaf pages in DB table]' \
+  '(-s)-a[all tables]' \
+  '(-h -a)-s[report sizes of tables]' \
+  '(-s -a)*::DB table:_perforce_dbtable'
+}
+
+
 (( $+functions[_perforce_cmd_delete] )) ||
 _perforce_cmd_delete() {
   _arguments -s : \
@@ -1737,6 +1819,7 @@ _perforce_cmd_describe() {
   _arguments -s : \
     '-d-[select diff option]:diff option:((b\:ignore\ blanks c\:context n\:RCS s\:summary u\:unified w\:ignore\ all\ whitespace))' \
     '-s[short form]' \
+    '-S[show shelved changes]' \
     '*::change:_perforce_changes'
 }
 
@@ -1786,20 +1869,36 @@ _perforce_cmd_dirs() {
 _perforce_cmd_edit() {
   _arguments -s : \
     '-c[set change for edit]:change:_perforce_changes -tc' \
+    '-k[no resync from server]' \
     '-n[show files to edit without opening them]' \
     '-t[set filetype]:filetype:_perforce_filetypes' \
     '*::file:_perforce_files'
 }
 
 
+(( $+functions[_perforce_cmd_export] )) ||
+_perforce_cmd_export() {
+  _arguments -s : \
+    '(-j)-c[specify checkpoint number (/ position)]:checkpoint number: ' \
+    '(-c)-j[specify journal number (/ position)]:journal number: ' \
+    '(-j)-f[reformat non-textual data types]' \
+    '(-j)-l[specify number of lines]:number of lines: ' \
+    '(-j)-F[specify filter]:filter pattern: ' \
+    '(-c)-r[raw format]' \
+    '-J[specify file prefix]:file prefix: '
+}
+
+
 (( $+functions[_perforce_cmd_filelog] )) ||
 _perforce_cmd_filelog() {
   _arguments -s : \
+    '-c[select by changelist]:change:_perforce_changes -ts' \
     '-h[follow branc/copy from records]' \
     '-i[follow branches]' \
     '-l[long output, full change text]' \
     '-L[long output, truncated change text]' \
     '-m[set maximum number of revisions to show]:max revisions: ' \
+    '-s[short output]' \
     '-t[include time with date]' \
     '*::file:_perforce_files'
 }
@@ -1872,14 +1971,18 @@ _perforce_cmd_fstat() {
     '-c+[affected since change]:change:_perforce_changes -ts' \
     '-e+[affected by change]:change:_perforce_changes -ts' \
     '-C[select mapped files (-Rc)]' \
+    '-F[pick filter for files]:filter:_perforce_fstat_fields -tv' \
     '-H[select synced files (-Rh)]' \
     '-W[select opened files (-Ro)]' \
     '-l[include fileSize, possibly slow (-Ol)]' \
     '-m[set max files to show]:max files: ' \
     "-O-[select output type]:output type:((f\:all\ revisions l\:fileSize p\:client\ path\ format r\:pending\ integrations s\:exclude\ local\ path$Oattr))" \
     '-P[output clientFile in full Perforce syntax (deprecated: use -Op)]' \
-    '-R-[restrict selected files]:restriction:((c\:mapped\ in\ client h\:synced\ to\ client n\:not\ synced\ to\ head o\:opened r\:resolved u\:unresolved))' \
+    '-r[show in reverse order]' \
+    '-R-[restrict selected files]:restriction:((c\:mapped\ in\ client h\:synced\ to\ client n\:not\ synced\ to\ head o\:opened r\:resolved s\:shelved u\:unresolved))' \
     '-s[shorten, no client-related data (deprecated: use -Os)]' \
+    '-S-[changes sort order]:sort criterion:((t\:filetype d\:date r\:head\ revision h\:have\ revision s\:filesize))' \
+    '-T[select output fields]:output field:_perforce_fstat_fields' \
     $Aattr \
     '*::file:_perforce_files'
 }
@@ -1969,6 +2072,11 @@ i\:ignore\ readded\ source\ file
 }
 
 
+(( $+functions[_perforce_cmd_integ] )) ||
+_perforce_cmd_integ() {
+  _perforce_cmd_integrate "$@"
+}
+
 (( $+functions[_perforce_cmd_integrated] )) ||
 _perforce_cmd_integrated() {
   _arguments -s : \
@@ -2055,7 +2163,9 @@ _perforce_cmd_label() {
 (( $+functions[_perforce_cmd_labels] )) ||
 _perforce_cmd_labels() {
   _arguments -s : \
+    '-e[limit by wildcard]:label wildcard: ' \
     '-m+[set maximum to show]:max labels: ' \
+    '-t[output time as well as date]' \
     '-u+[select by user]:user:_perforce_users' \
     '1::file or revisions which must contain label:_perforce_files -tR'
 }
@@ -2088,6 +2198,12 @@ _perforce_cmd_lock() {
 }
 
 
+(( $+functions[_perforce_cmd_lockstat] )) ||
+_perforce_cmd_lockstat() {
+  _message 'no arguments'
+}
+
+
 (( $+functions[_perforce_cmd_logger] )) ||
 _perforce_cmd_logger() {
   _arguments -s : \
@@ -2114,6 +2230,21 @@ _perforce_cmd_logout() {
 }
 
 
+(( $+functions[_perforce_cmd_logstat] )) ||
+_perforce_cmd_logstat() {
+  _message 'no arguments'
+}
+
+
+(( $+functions[_perforce_cmd_logtail] )) ||
+_perforce_cmd_logtail() {
+  _arguments -s : \
+    '-b[specify block size, default 8192]:block size: ' \
+    '-s[specify start offset]:offset: ' \
+    '-m[specify max blocks]:max blocks: '
+}
+
+
 (( $+functions[_perforce_cmd_monitor] )) ||
 _perforce_cmd_monitor() {
   if (( CURRENT > 2 )); then
@@ -2146,6 +2277,18 @@ _perforce_cmd_monitor() {
 }
 
 
+(( $+functions[_perforce_cmd_move] )) ||
+_perforce_cmd_move() {
+  _arguments -s : \
+    '-c[specify new change list]:change:_perforce_changes -tc' \
+    '-k[no resync from server]' \
+    '-t[specify new file type]:filetype:_perforce_filetypes' \
+    '-n[show files to move without moving them]' \
+    '1::source file, wildcards allowed:_perforce_files -to' \
+    '2::destination file, wildcards match source:_perforce_files'
+}
+
+
 (( $+functions[_perforce_cmd_obliterate] )) ||
 _perforce_cmd_obliterate() {
     if [[ ${words[(I)-y]} -gt 0 ]]; then
@@ -2170,6 +2313,7 @@ _perforce_cmd_opened() {
     '-c+[select by change]:change:_perforce_changes -tc' \
     '-C[select by client]:client:_perforce_clients' \
     '-m[max files to show]:max files: ' \
+    '-u[select by user]:user name:_perforce_users' \
     '*::file:_perforce_files -to'
 }
 
@@ -2222,6 +2366,20 @@ _perforce_cmd_reopen() {
 }
 
 
+(( $+functions[_perforce_cmd_replicate] )) ||
+_perforce_cmd_replicate() {
+  _arguments -s : \
+    '-i[specify interval in seconds]:interval: ' \
+    '-j[specify journal number (/ position)]:journal number: ' \
+    '-J[specify file prefix]:file prefix: ' \
+    '-k[keep pipe open]' \
+    '-o[specify output file]:output file:_files' \
+    '-s[specify file to track state]:state file:_files' \
+    '-x[terminate when journal rotates]' \
+    '*::->_command'
+}
+
+
 (( $+functions[_perforce_cmd_resolve] )) ||
 _perforce_cmd_resolve() {
   _arguments -s : \
@@ -2281,6 +2439,18 @@ _perforce_cmd_set() {
 }
 
 
+(( $+functions[_perforce_cmd_shelve] )) ||
+_perforce_cmd_shelve() {
+  _arguments -s : \
+    '(-i)-c[specify changlist if not default]:change:_perforce_changes -tc' \
+    '(-i -r)-d[delete shelved files]' \
+    '(-r)-f[force by admin user or force to overwrite]' \
+    '(-c)-i[read from standard input]' \
+    '(-d)-r[replace shelved files in changelist]' \
+    '(-i -r)*::file:_perforce_files -to'
+}
+
+
 (( $+functions[_perforce_cmd_sizes] )) ||
 _perforce_cmd_sizes() {
   _arguments -s : \
@@ -2335,6 +2505,13 @@ _perforce_cmd_tag() {
 }
 
 
+(( $+functions[_perforce_cmd_tickets] )) ||
+_perforce_cmd_tickets() {
+  # No arguments.
+  _arguments -s :
+}
+
+
 (( $+functions[_perforce_cmd_triggers] )) ||
 _perforce_cmd_triggers() {
   _arguments -s : \
@@ -2343,13 +2520,6 @@ _perforce_cmd_triggers() {
 }
 
 
-(( $+functions[_perforce_cmd_tickets] )) ||
-_perforce_cmd_tickets() {
-  # No arguments.
-  _arguments -s :
-}
-
-
 (( $+functions[_perforce_cmd_typemap] )) ||
 _perforce_cmd_typemap() {
   _arguments -s : \
@@ -2367,6 +2537,17 @@ _perforce_cmd_unlock() {
 }
 
 
+(( $+functions[_perforce_cmd_unshelve] )) ||
+_perforce_cmd_unshelve() {
+  _arguments -s : \
+    '-s[specify shelving change]:change:_perforce_changes -tS' \
+    '-c[specify change for unshelve]:change:_perforce_changes -tc' \
+    '-f[force clobbering of writeable files]' \
+    '-n[preview unshelve]' \
+    '*::file, pattern allowed:_perforce_files'
+}
+
+
 (( $+functions[_perforce_cmd_user] )) ||
 _perforce_cmd_user() {
   _arguments -s : \
@@ -2393,6 +2574,7 @@ _perforce_cmd_verify() {
     '-q[operate quietly]' \
     '-u[compute and save digest if missing]' \
     '-v[compute and save all digets]' \
+    '-z[skip duplicates]' \
     '*::file:_perforce_files -tR'
 }
 
diff --git a/Completion/X/Command/_kfmclient b/Completion/X/Command/_kfmclient
index 0d2b753b4..87080cf90 100755
--- a/Completion/X/Command/_kfmclient
+++ b/Completion/X/Command/_kfmclient
@@ -1,7 +1,10 @@
-#compdef kfmclient
+#compdef kfmclient kioclient
 
 # kfmclient is a command line interface for use with Konqueror,
 # the KDE file manager and web browser.
+#
+# In KDE4, kioclient has similar syntax but doesn't necessarily talk
+# to Konqueror ("kioclient exec ." by default starts Dolphin, for example).
 
 local expl
 local -a context state line
@@ -82,8 +85,8 @@ case $line[1] in
 
   (exec)
   if [[ $state = secondarg ]]; then
-    # TODO: could probe inside Desktop files.
-    _message "KDE binding"
+    # Look for a Desktop Action binding.
+    _wanted binding expl 'KDE binding' compadd -- ${${${(M)${(f)"$(<$file)"}:#"[Desktop Action "*"]"}%%\]}##"[Desktop Action "}
     return
   elif [[ $state = firstarg ]]; then
     _webbrowser