diff options
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | Completion/Unix/Command/_augeas | 58 |
2 files changed, 60 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog index 451a2adca..22520ec68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2014-09-22 Oliver Kiddle <opk@zsh.org> + * 33198: Completion/Unix/Command/_augeas: new augtool completion + * users/19113: Completion/Linux/_cryptsetup: reorganised function 2014-09-22 Daniel Hahler <dhahler@gmail.com> diff --git a/Completion/Unix/Command/_augeas b/Completion/Unix/Command/_augeas new file mode 100644 index 000000000..622fa3467 --- /dev/null +++ b/Completion/Unix/Command/_augeas @@ -0,0 +1,58 @@ +#compdef augtool + +local curcontext="$curcontext" state line expl ret=1 +local -A opt_args + +_arguments -C -s \ + '(-c --typecheck)'{-c,--typecheck}'[perform type checking on lenses]' \ + '(-b --backup)'{-b,--backup}'[preserve original files with .augsave extension]' \ + '(-n --new)'{-n,--new}'[leave files untouched but save changes with a .augnew extension]' \ + '(-r --root)'{-r,--root=}'[specify filesystem root]:root directory:_files -/' \ + \*{-I+,--include=}'[add directory containing lenses to search path]:directory:_files -/' \ + '(-f --file *)'{-f+,--file=}'[read commands from specified file]:file:_files' \ + '(-i --interactive)'{-i,--interactive}'[read commands from the terminal]' \ + '(-e --echo)'{-e,--echo}'[echo commands read from a file or stdin]' \ + '(-s --autosave)'{-s,--autosave}'[automatically save at the end of instructions]' \ + '(-S --nostdinc)'{-S,--nostdinc}'[do not search the builtin default directories for modules]' \ + '(-L --noload)'{-L,--noload}'[do not load any files into the tree on startup]' \ + '(-A --noautoload)'{-A,--noautoload}'[do not autoload modules from the search path]' \ + '--span[load span positions for nodes related to a file]' \ + '(- *)--version[print version information]' \ + '(-)'{-h,--help}'[print help information]' \ + '*:: :->subcommands' && ret=0 + +[[ -z $state ]] && return ret + +if [[ CURRENT -eq 1 || $words[1] == help ]]; then + local -a subcmds + subcmds=( ${${${(f)"$(_call_program subcommands augtool help 2>/dev/null)"}[2,-2]## #}// #- /:} ) + _describe -t subcommands "augtool command" subcmds && ret=0 + return ret +fi + +_tags paths +while _tags; do + if _requested paths; then + local subcmd="$words[1]" + curcontext="${curcontext%:*}-${subcmd}:" + if compset -P '/files/'; then + _all_labels paths expl path _path_files -W / && ret=0 + elif compset -P '/augeas/'; then + compset -P '*/' + local files + files=( ${${(f)"$(_call_program path augtool ls ${words[CURRENT]%/*} 2>/dev/null)"}% = *} ) + while _next_label paths expl path; do + compadd "$expl[@]" -- ${files:#*/} && ret=0 + compadd "$expl[@]" -S '' -- ${(M)files:#*/} && ret=0 + done + else + local -a suf + suf=(-S '') + compset -S '/*' || suf=( -S / ) + _all_labels paths expl path compadd -P/ "$suf[@]" files augeas && ret=0 + fi + fi + (( ret )) || break +done + +return ret |