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