diff options
Diffstat (limited to 'bash-completion/umount')
-rw-r--r-- | bash-completion/umount | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/bash-completion/umount b/bash-completion/umount new file mode 100644 index 0000000..2988c42 --- /dev/null +++ b/bash-completion/umount @@ -0,0 +1,79 @@ +_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 '{ + if ($0 ~ "^"ENVIRON["HOME"]) { + homeless = $0 + sub("^"ENVIRON["HOME"], "~", homeless) + gsub("'"$escape_chars"'", "\\\\&", homeless) + print homeless " " + } + if ($0 ~ "^"ENVIRON["PWD"]) { + reldir = $0 + sub("^"ENVIRON["PWD"]"/?", "", 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 |