diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Completion/Unix/Command/_locate | 111 | ||||
-rw-r--r-- | Completion/Unix/Command/_perforce | 4 | ||||
-rw-r--r-- | Completion/Unix/Command/_todo.sh | 8 |
4 files changed, 128 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index 3fc1aed9f..15ba60489 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-09-27 Peter Stephenson <pws@csr.com> + + * unposted: Completion/Unix/Command/_todo.sh: replace buggy + search message by completion of projects and contexts. + + * 22778: Completion/Unix/Command/_locate: completion for + various versions of the locate command. + 2006-09-23 Peter Stephenson <p.w.stephenson@ntlworld.com> * 22765: Src/subst.c, Src/utils.c, Src/ztype.h, diff --git a/Completion/Unix/Command/_locate b/Completion/Unix/Command/_locate new file mode 100644 index 000000000..2b487b401 --- /dev/null +++ b/Completion/Unix/Command/_locate @@ -0,0 +1,111 @@ +#compdef locate mlocate slocate + +# Decide if we are using mlocate or slocate. +local ltype basename=${words[0]:t} input +# If we can't, use this guess. +local best_guess=mlocate + +case $basename in + ([ms]locate) + ltype=$basename + ;; + + (locate) + input="$(_call_program locate $words[0] -V)" + case $input in + (*mlocate*) + ltype=mlocate + ;; + + (*(#i)secure locate*) + ltype=slocate + ;; + + (*(#i)gnu locate*) + ltype=gnu + ;; + + # guess + (*) + ltype=$best_guess + ;; + esac + ;; + + (*) + # too dangerous to run: guess + ltype=$best_guess +esac + +case $ltype in + (mlocate) + # actually, -d can take a colon-separate list + # -r/--regexp mean no normal arguments, so shouldn't complete + # -m and --mmap are ignored, so don't bother + # -s and --stdio likewise + _arguments -s : \ + {-b,--basename}'[Match only the basename of files in the database]' \ + {-c,--count}'[Output the number of matching entries]' \ + {-d,--database=}'[Use alternative database]:database:_files' \ + {-e,--existing}'[Restrict display to existing files]' \ + {-L,--follow}'[Follow symbolic links to find existing files (default)]' \ + {-h,--help}'[Show help]' \ + {-i,--ignore-case}'[Ignore case distinctions in patterns]' \ + {-l,-n,--limit=}'[Limit search results]:file limit: ' \ + {-P,-H,--nofollow}'[Don'\''t follow symbolic links]' \ + {-0,--null}'[Output separated by NUL characters]' \ + {-S,--statistics}'[Show database statistics]' \ + {-q,--quiet}'[Don'\''t report errors]' \ + {-r,--regexp=}'[Search for given basic regexp]:basic regexp: ' \ + --regex'[Patterns are extended regexps]' \ + {-V,--version}'[Show version]' \ + {-w,--wholename}'[Match entire file path (default)]' \ + '*:pattern: ' + ;; + + (slocate) + # -d can take path + # -e can take a comma-separated list of directories. + # -f should complete list of file system types like mount + _arguments -s : \ + -u'[Create slocate database starting at path /]' \ + -U'[Create slocate database starting at given path]:directory:_files -/' \ + -c'[Parse GNU locate updatedb with -u, -U]' \ + -e'[Exclude directories with -u, -U]:directories:_files -/' \ + -f'[Exclude file system types from db with -u, -U]:file system:_file_systems' \ + -l'[Security level]:level:(0 1)' \ + -q'[Quiet mode]' \ + -n'[Limit search results]:file limit: ' \ + -i'[Case insensitive search]' \ + {-r,--regexp=}'[Use basic regular expression]:regexp: ' \ + {-o,--output=}'[Specify database to create]:database:_files' \ + {-d,--database=}'[Specify database to search]:database:_files' \ + {-h,--help}'[Display help]' \ + {-v,--verbose}'[Display files when creating database]' \ + {-V,--version}'[Display version]' \ + '*:pattern: ' + ;; + + (gnu) + _arguments -s : \ + {-d,--database=}'[Use alternative database]:database:_files' \ + {-e,--existing}'[Restrict display to existing files]' \ + {-E,--non-existing}'[Allow display of nonexistent files (default)]' \ + {-i,--ignore-case}'[Ignore case distinctions in patterns]' \ + {-w,--wholename}'[Match entire file path (default)]' \ + {-b,--basename}'[Match only the basename of files in the database]' \ + {-l,-n,--limit=}'[Limit search results]:file limit: ' \ + {-S,--statistics}'[Show database statistics]' \ + {-0,--null}'[Output separated by NUL characters]' \ + {-c,--count}'[Output the number of matching entries]' \ + {-P,-H,--nofollow}'[Don'\''t follow symbolic links]' \ + {-L,--follow}'[Follow symbolic links to find existing files (default)]' \ + {-A,-all}'[Match all arguments instead of at least one]' \ + {-p,--print}'[Include search results with statistics or count]' \ + {-r,--regex=}'[Patterns are regular expressions]:basic regexp: ' \ + --regextype='[Select type of regular expression]' \ + {-V,--version}'[Show version]' \ + --help'[Show help]' \ + '*:pattern: ' + ;; +esac diff --git a/Completion/Unix/Command/_perforce b/Completion/Unix/Command/_perforce index 8917b679f..7e2a27456 100644 --- a/Completion/Unix/Command/_perforce +++ b/Completion/Unix/Command/_perforce @@ -811,7 +811,7 @@ _perforce_retrieve_files() { # This may be faster, but won't use matcher specs etc. pfx=${(Q)PREFIX} compset -P '*/' - files=(${${${(f)"$(_perforce_call_p4 $1 $1 \"\$pfx\*\$\{\(Q\)SUFFIX\}\" 2>/dev/null)"}%\#*}##*/}) + files=(${${${(f)"$(_perforce_call_p4 $1 $1 \"\$pfx\*\$\{\(Q\)SUFFIX\}\" 2>/dev/null)"}%%\#*}##*/}) else # We need to limit the list to a directory. if [[ $PREFIX = */* ]]; then @@ -820,7 +820,7 @@ _perforce_retrieve_files() { pfx="*" fi compset -P '*/' - files=(${${${(f)"$(_perforce_call_p4 $1 $1 \$pfx 2>/dev/null)"}%\#*}##*/}) + files=(${${${(f)"$(_perforce_call_p4 $1 $1 \$pfx 2>/dev/null)"}%%\#*}##*/}) fi [[ $#files -eq 1 && $files[1] = '' ]] && files=() shift diff --git a/Completion/Unix/Command/_todo.sh b/Completion/Unix/Command/_todo.sh index 583aa008c..5d60b9684 100644 --- a/Completion/Unix/Command/_todo.sh +++ b/Completion/Unix/Command/_todo.sh @@ -57,7 +57,13 @@ case $state in ;; (list|listall) - _message search term... + # This completes stuff beginning with p: (projects) or @ (contexts); + # these are todo.sh conventions. + # We should do it for any argument after list or listall, but + # _arguments doesn't make that easy. We need it to tell us + # the position of the first non-option argument. + _wanted search expl 'context or project' \ + compadd ${${=${${(M)${(f)"$(todo.sh list)"}##<-> *}##<-> }}:#^(p:*|@*)} ;; (listpri) |