diff options
Diffstat (limited to '')
-rw-r--r-- | completions/xdg-mime | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/completions/xdg-mime b/completions/xdg-mime new file mode 100644 index 0000000..74c26c4 --- /dev/null +++ b/completions/xdg-mime @@ -0,0 +1,74 @@ +# xdg-mime(1) completion -*- shell-script -*- + +_xdg_mime_mimetype() +{ + COMPREPLY+=($(compgen -S / -W 'application audio font image message model + multipart text video' -- "$cur")) + [[ ${COMPREPLY-} == */ ]] && compopt -o nospace +} + +_xdg_mime() +{ + local cur prev words cword + _init_completion || return + + local args + _count_args + + if ((args == 1)); then + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--help --manual --version' -- "$cur")) + return + fi + COMPREPLY=($(compgen -W \ + 'query default install uninstall' -- "$cur")) + return + fi + + case ${words[1]} in + query) + if ((args == 2)); then + COMPREPLY=($(compgen -W 'filetype default' -- "$cur")) + return + fi + case ${words[2]} in # TODO and args == 3 (takes only one arg!) + filetype) _filedir ;; + default) _xdg_mime_mimetype ;; + esac + ;; + default) + if ((args == 2)); then + local IFS=$' \t\n' reset=$(shopt -p nullglob) + shopt -s nullglob + local -a desktops=(/usr/share/applications/*.desktop) + desktops=("${desktops[@]##*/}") + $reset + IFS=$'\n' + COMPREPLY=($(compgen -W '${desktops[@]}' -- "$cur")) + else + _xdg_mime_mimetype + fi + ;; + install) + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--mode --novendor' -- "$cur")) + elif [[ $prev == --mode ]]; then + COMPREPLY=($(compgen -W 'user system' -- "$cur")) + else + _filedir xml + fi + ;; + uninstall) + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W '--mode' -- "$cur")) + elif [[ $prev == --mode ]]; then + COMPREPLY=($(compgen -W 'user system' -- "$cur")) + else + _filedir xml + fi + ;; + esac +} && + complete -F _xdg_mime xdg-mime + +# ex: filetype=sh |