diff options
Diffstat (limited to 'bash-completion/umount')
-rw-r--r-- | bash-completion/umount | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/bash-completion/umount b/bash-completion/umount new file mode 100644 index 0000000..7650358 --- /dev/null +++ b/bash-completion/umount @@ -0,0 +1,89 @@ +_umount_points_list() +{ + # List of characters to escape shamelessly stolen from "scp" completion + local escape_chars='[][(){}<>\",:;^&!$=?`|\\'\'' \t\f\n\r\v]' + + findmnt -lno TARGET | awk ' + + function literal_ere(s) { + gsub(/[][^$.*?+{}\\()|]/, "\\\\&", s) + return s + } + + { + home_ere = literal_ere(ENVIRON["HOME"]) + print home_ere + if ($0 ~ "^"home_ere) { + homeless = $0 + sub("^"home_ere, "~", homeless) + gsub("'"$escape_chars"'", "\\\\&", homeless) + print homeless " " + } + pwd_ere = literal_ere(ENVIRON["PWD"]) + if ($0 ~ "^"pwd_ere) { + reldir = $0 + sub("^"pwd_ere"/?", "", reldir) + gsub("'"$escape_chars"'", "\\\\&", reldir) + print "./" reldir " " + print reldir " " + } + gsub("'"$escape_chars"'", "\\\\&") + print $0 " " + }' +} + +_umount_module() +{ + local cur prev OPTS + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD-1]}" + case $prev in + '-t'|'--types') + local TYPES + TYPES=" + $(\ls /lib/modules/$(uname -r)/kernel/fs | awk '{print $1, "no" $1}') + $(awk '{print $NF, "no" $NF}' /proc/filesystems) + " + COMPREPLY=( $(compgen -W "$TYPES" -- $cur) ) + return 0 + ;; + '-h'|'--help'|'-V'|'--version') + return 0 + ;; + '-N'|'--namespace') + local NAMESPACE + NAMESPACE="$(lsns --type mnt --output PATH --noheadings)" + COMPREPLY=( $(compgen -W "$NAMESPACE" -- $cur) ) + return 0 + ;; + esac + case $cur in + -*) + OPTS=" --all + --all-targets + --no-canonicalize + --detach-loop + --fake + --force + --internal-only + --namespace + --no-mtab + --lazy + --test-opts + --recursive + --read-only + --types + --quiet + --verbose + --help + --version" + COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) ) + return 0 + ;; + esac + + local IFS=$'\n' + COMPREPLY=( $( compgen -W '$( _umount_points_list )' -- "$cur" ) ) +} +complete -F _umount_module -o nospace umount |