+_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
;;
esac
- local oldifs=$IFS
- IFS=$'\n'
- COMPREPLY=( $( compgen -W "$(findmnt -lno TARGET | gawk \
- '{
- if ($0 ~ ENVIRON["HOME"]) {
- homeless = $0
- homeless = gensub(ENVIRON["HOME"], "\\\\~", "g", homeless)
- homeless = gensub(/(\s)/, "\\\\\\1", "g", homeless)
- print homeless
- }
- if ($0 ~ ENVIRON["PWD"]) {
- reldir = $0
- reldir = gensub(ENVIRON["PWD"]"/", "", "g", reldir)
- reldir = gensub(/(\s)/, "\\\\\\1", "g", reldir)
- print "./" reldir
- print reldir
- }
- gsub(/\s/, "\\\\&")
- print $0
- }'
- )" -- "$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