summaryrefslogtreecommitdiffstats
path: root/bash-completion/umount
diff options
context:
space:
mode:
Diffstat (limited to 'bash-completion/umount')
-rw-r--r--bash-completion/umount79
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