From ae059841b0791195fbae04bafc2acc73058b48fc Mon Sep 17 00:00:00 2001 From: dana Date: Thu, 4 Jan 2018 11:48:02 -0600 Subject: 42223: new completions for sublime text and some basic Unix utilities --- ChangeLog | 5 ++ Completion/Unix/Command/_fold | 24 +++++++++ Completion/Unix/Command/_getopt | 28 ++++++++++ Completion/Unix/Command/_install | 111 ++++++++++++++++++++++++++++++++++++++ Completion/Unix/Command/_mktemp | 43 +++++++++++++++ Completion/X/Command/_sublimetext | 13 +++++ 6 files changed, 224 insertions(+) create mode 100644 Completion/Unix/Command/_fold create mode 100644 Completion/Unix/Command/_getopt create mode 100644 Completion/Unix/Command/_install create mode 100644 Completion/Unix/Command/_mktemp create mode 100644 Completion/X/Command/_sublimetext diff --git a/ChangeLog b/ChangeLog index ee21f88f7..07c80b04c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2018-01-05 Oliver Kiddle + * dana: 42223 (tweaked): Completion/X/Command/_sublimetext, + Completion/Unix/Command/_getopt, Completion/Unix/Command/_install + Completion/Unix/Command/_mktemp, Completion/Unix/Command/_fold: + new completions + * 42221: Completion/Unix/Command/_enscript: update enscript completion for GNU enscript 1.6.6 diff --git a/Completion/Unix/Command/_fold b/Completion/Unix/Command/_fold new file mode 100644 index 000000000..1a3ef8b55 --- /dev/null +++ b/Completion/Unix/Command/_fold @@ -0,0 +1,24 @@ +#compdef fold gfold + +local variant +local -a args + +_pick_variant -r variant busybox=BusyBox gnu='Free Soft' unix --version + +args=( + '(-b --bytes)'{-b,--bytes}'[count bytes rather than columns]' + '(: -)--help[display help information]' + '(-s --spaces)'{-s,--spaces}'[fold on whitespace]' + '(-w --width)'{-w+,--width=}'[specify line width]:line width (columns or bytes)' + '(: -)--version[display version information]' + '*: :_files' +) + +# Non-GNU variants don't support long options (except BusyBox's --help) +if [[ $variant == *busybox* ]]; then # See also: _busybox + args=( ${args:#((#s)|*\))(\*|)--^help*} ) +elif [[ $variant != gnu ]]; then + args=( ${args:#((#s)|*\))(\*|)--*} ) +fi + +_arguments -s -S : $args diff --git a/Completion/Unix/Command/_getopt b/Completion/Unix/Command/_getopt new file mode 100644 index 000000000..3359818b5 --- /dev/null +++ b/Completion/Unix/Command/_getopt @@ -0,0 +1,28 @@ +#compdef getopt ggetopt + +local -a args aopts + +# Note: BusyBox getopt is borrowed straight from util-linux, so they're +# basically identical +if _pick_variant busybox=BusyBox util-linux='getopt*enhanced' unix --version; then + args=( + '(-a --alternative)'{-a,--alternative}'[allow long options with single -]' + '(: -)'{-h,--help}'[display help information]' + '*'{-l+,--longoptions=}'[specify long options]:long options' + '(-n --name)'{-n+,--name=}'[specify program name]:program name' + '(1 -o --options)'{-o+,--options=}'[specify short options]:short options' + '(-q --quiet)'{-q,--quiet}'[suppress getopt(3) error messages]' + '(-Q --quiet-output)'{-Q,--quiet-output}'[suppress normal output]' + '(-s --shell)'{-s+,--shell=}'[specify shell quoting conventions]:shell:(bash csh tcsh sh)' + '(: -)'{-T,--test}'[test for enhanced getopt]' + '(-u --unquoted)'{-u,--unquoted}'[do not quote output]' + '(: -)'{-V,--version}'[display version information]' + '(-o --options)1: :_guard "^-*" "short options"' + '*:argument' + ) + [[ -n $POSIXLY_CORRECT ]] && aopts+=( -A '-*' ) +else + args=( '1:short options' '*:argument' ) +fi + +_arguments -s -S $aopts : $args diff --git a/Completion/Unix/Command/_install b/Completion/Unix/Command/_install new file mode 100644 index 000000000..25d9dfcaa --- /dev/null +++ b/Completion/Unix/Command/_install @@ -0,0 +1,111 @@ +#compdef install ginstall + +local curcontext="$curcontext" lx ret=1 +local -a line state state_descr common_args args tmp +local -A opt_args val_args + +# These are *almost* common — non-GNU variants need to remove the long options +common_args=( + '(--backup)-b[create backups of destination files]' + '(-C -c --compare)'{-C,--compare}'[copy files; do nothing if identical destination file exists]' + '(-C -c --compare)-c[copy files (default)]' + '(-d --directory)'{-d,--directory}'[create directories]' + '(-g --group)'{-g+,--group=}'[specify destination file group]: :_groups' + '(-m --mode)'{-m+,--mode=}'[specify destination file mode]: :_modes' + '(-o --owner)'{-o+,--owner=}'[specify destination file owner]: :_users' + '(-p --preserve-timestamps)'{-p,--preserve-timestamps}'[preserve modification times]' + '(-s --strip)'{-s,--strip}'[strip binaries]' + '(-v --verbose)'{-v,--verbose}'[output verbosely]' + '*: :_files' +) + +if _pick_variant gnu='Free Soft' unix --version; then + # Hide Linux-specific options on non-Linux platforms + [[ $OSTYPE == linux* ]] || lx='!' + args+=( + $common_args + '(-b --backup)--backup=[create backup; optionally specify method]:: :->controls' + "${lx}--context=[like -Z, or specify SELinux security context to set]::SELinux security context" + '-D[create all leading destination path components]' + '(: -)--help[display help information]' + "${lx}--preserve-context[preserve SELinux security context]" + '--strip-program=[specify program used to strip binaries]:strip program:_files' + '(-S --suffix)'{-S+,--suffix=}'[specify backup suffix]:backup suffix' + '(-t --target-directory)'{-t+,--target-directory=}'[copy source to specified directory]: :_directories' + '(-T --no-target-directory)'{-T,--no-target-directory}'[treat destination as regular file]' + '(: -)--version[display version information]' + "${lx}-Z[set SELinux security context on destination files to default type]" + ) + +else + args+=( + ${common_args##((#s)|*\))(\*|)--*} + '-B+[specify backup suffix for -b]:backup suffix' + '-f+[specify destination file flags]: :_flags' + ) + [[ $OSTYPE == dragonfly* ]] && args+=( + '!-D+[no effect (compatibility with NetBSD)]: :_directories' + '-L+[use user/group database files from specified directory]: :_directories' + '-l[fall back to system files if user/group not found in -L directory]' + ) + [[ $OSTYPE == netbsd* ]] && { + args+=( + '-a+[specify shell command to run on files after install]:shell command' + '-r[use temporary files to perform safe copy]' + '-S+[specify arguments to pass to strip program]:arguments to strip program' + ) + # NetBSD has no -v for some reason + args=( ${args##((#s)|*\))(\*|)-v*} ) + } + [[ $OSTYPE == openbsd* ]] && args+=( + '-D[create all leading destination path components]' + '-F[flush installed file contents to disk]' + ) + [[ $OSTYPE == (darwin|dragonfly)* ]] && args+=( + '-M[disable use of mmap(2)]' + ) + [[ $OSTYPE == (freebsd|netbsd)* ]] && args+=( + '-D+[specify destination directory used for metadata log]: :_directories' + '-h+[store digest in metadata log using specified method]: :->digests' + '(-C -c --compare)-l+[link files (rather than copy) using specified method]: :->linkflags' + '-M+[log mtree(8) metadata for installed files to specified file]:metadata log file:_files' + '+N+[use user/group database files from specified directory]: :_directories' + '-T+[specify mtree(8) tags to store in metadata log]:mtree(8) tags' + '-U[indicate that install is unprivileged]' + ) + [[ $OSTYPE == netbsd* ]] || args+=( + '-S[use temporary files to perform safe copy]' + ) +fi + +_arguments -C -s -S : $args && ret=0 + +case $state in + controls) + tmp=( + {none,off}':never make backups' + {numbered,t}':make numbered backups' + {existing,nil}':make numbered backups if they already exist' + # 'never' actually means 'always'... + {simple,never}':make simple backups' + ) + _describe -t controls 'version control method' tmp && ret=0 + ;; + digests) + tmp=( none md5 rmd160 sha1 sha256 sha512 ) + [[ $OSTYPE == netbsd* ]] && tmp+=( sha384 ) + _values 'digest method' $tmp && ret=0 + ;; + linkflags) + tmp=( + 'h[hard links]' + 's[symlinks]' + 'm[mixed (hard links for files on same file system)]' + 'a[symlinks use absolute path]' + 'r[symlinks use relative path]' + ) + _values -S '' 'link flags' $tmp && ret=0 + ;; +esac + +return ret diff --git a/Completion/Unix/Command/_mktemp b/Completion/Unix/Command/_mktemp new file mode 100644 index 000000000..4b5bf99f7 --- /dev/null +++ b/Completion/Unix/Command/_mktemp @@ -0,0 +1,43 @@ +#compdef mktemp gmktemp + +local variant +local args + +_pick_variant -r variant busybox=BusyBox gnu='Free Soft' unix --version + +args=( + '(-d --directory)'{-d,--directory}'[make directory instead of file]' + '(: -)--help[display help information]' + '(-p --tmpdir)'{-p+,--tmpdir=}'[make relative to specified directory]: :_directories' + '(-q --quiet)'{-q,--quiet}'[suppress error messages]' + '--suffix=[append specified suffix to template]:template suffix' + '-t[interpret template as single path component relative to temp dir]' + '(-u --dry-run)'{-u,--dry-run}'[print file name only]' + '(: -)'{-V,--version}'[display version information]' + '1: :_guard "^-*" "template name"' +) + +# Non-GNU variants don't support long options (except BusyBox's --help) +if [[ $variant == *busybox* ]]; then # See also: _busybox + args=( ${args:#((#s)|*\))(\*|)--^help*} ) +elif [[ $variant != gnu ]]; then + args=( ${args:#((#s)|*\))(\*|)--*} ) +fi + +[[ $variant == gnu ]] || { + # BusyBox, OpenBSD, and Solaris have -p, but -t doesn't take an argument + if [[ $variant == *busybox* ]] || [[ $OSTYPE == (openbsd|solaris)* ]]; then + args=( ${args:#((#s)|*\))(\*|)-t*} ) + args+=( '-t[generate template relative to temp dir]' ) + # Dragonfly, FreeBSD, and Darwin take an argument to -t and support any number + # of template files + else + args=( ${args:#((#s)|*\))(1:*|(\*|)-t*)} ) + args+=( + '-t[generate template relative to temp dir using specified prefix]:template prefix' + '*: :_guard "^-*" "template name"' + ) + fi +} + +_arguments -s -S : $args diff --git a/Completion/X/Command/_sublimetext b/Completion/X/Command/_sublimetext new file mode 100644 index 000000000..1243d2779 --- /dev/null +++ b/Completion/X/Command/_sublimetext @@ -0,0 +1,13 @@ +#compdef subl + +_arguments -s -S : \ + '(-a -n --add --new-window)'{-a,--add}'[add to current window]' \ + '(-b --background)'{-b,--background}"[don't activate application]" \ + '--command[run specified command]:command' \ + '(: -)'{-h,--help}'[display help information]' \ + '(-a -n --add --new-window)'{-n,--new-window}'[open new window]' \ + '--project[load specified project]:project file:_files' \ + '(-s --stay)'{-s,--stay}'[keep application activated]' \ + '(: -)'{-v,--version}'[display version information]' \ + '(-w --wait)'{-w,--wait}'[wait for files to close]' \ + '*:file or directory:_files' -- cgit 1.4.1