diff options
Diffstat (limited to 'Completion/Unix')
-rw-r--r-- | Completion/Unix/Command/_gsettings | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/Completion/Unix/Command/_gsettings b/Completion/Unix/Command/_gsettings new file mode 100644 index 000000000..f47bbc6b1 --- /dev/null +++ b/Completion/Unix/Command/_gsettings @@ -0,0 +1,47 @@ +#compdef gsettings + +local curcontext="$curcontext" state line expl ret=1 +local subcmds + +_arguments \ + '(- 1 *)--version[show version information]' \ + '--schemadir[specify location of schemata]:directory:_directories' \ + ':command:->subcmds' \ + '*::args:->subargs' && ret=0 + +if [[ $state = subargs ]]; then + curcontext="${curcontext%:*}-$words[1]:" + case $words[1] in + help) state=subcmds;; + get|range|reset|writable|monitor) + _arguments ':schema:->schemata' ':key:->keys' + ;; + set) + _arguments ':schema:->schemata' ':key:->keys' ':value' + ;; + (list|reset)-(keys|recursively|children)) state=schemata ;; + *) _default && ret=0 ;; + esac +fi + +case $state in + subcmds) + subcmds=( ${(L)${${(M)${${(f)"$(_call_program commands $service help)"}[(r)Commands:*,-2]}:# *}#??}/ ##/:} ) + _describe -t commands 'command' subcmds -M 'r:?|-=* r:|=*' && ret=0 + state='' + ;; + schemata) + if compset -P '*:'; then + _directories && ret=0 + else + _wanted schemata expl 'schema' compadd -M 'r:|.=* r:|=*' \ + $(_call_program schemata $service list-schemas) && ret=0 + fi + ;; + keys) + _wanted keys expl 'key' compadd \ + $(_call_program keys $service list-keys $words[CURRENT-1]) && ret=0 + ;; +esac + +return ret |