+_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
'-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
-*)
--fake
--force
--internal-only
+ --namespace
--no-mtab
--lazy
--test-opts
--recursive
--read-only
--types
+ --quiet
--verbose
--help
--version"
;;
esac
- local oldifs=$IFS
- IFS=$'\n'
- COMPREPLY=( $( compgen -W '$(findmnt -lno TARGET | sed "s/\([[:blank:]]\)/\\\\\1/g")' -- "$cur" ) )
- IFS=$oldifs
+ local IFS=$'\n'
+ COMPREPLY=( $( compgen -W '$( _umount_points_list )' -- "$cur" ) )
}
-complete -F _umount_module umount
+complete -F _umount_module -o nospace umount