2014-11-17 13:50:19 +01:00
|
|
|
---
|
2015-03-18 14:07:18 +01:00
|
|
|
bash_completion | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
|
|
|
|
1 file changed, 48 insertions(+), 3 deletions(-)
|
2014-11-17 13:50:19 +01:00
|
|
|
|
|
|
|
--- bash_completion
|
2015-03-18 14:07:18 +01:00
|
|
|
+++ bash_completion 2015-03-18 12:43:01.808831000 +0000
|
|
|
|
@@ -558,15 +558,16 @@ _quote_readline_by_ref()
|
|
|
|
#
|
|
|
|
_filedir()
|
|
|
|
{
|
|
|
|
- local i IFS=$'\n' xspec
|
|
|
|
+ local IFS=$'\n' xspec
|
|
|
|
|
|
|
|
_tilde "$cur" || return 0
|
|
|
|
+ _dollar "$cur" || return 0
|
|
|
|
|
2014-11-17 13:50:19 +01:00
|
|
|
local -a toks
|
|
|
|
local quoted x tmp
|
|
|
|
|
|
|
|
_quote_readline_by_ref "$cur" quoted
|
2015-03-18 14:07:18 +01:00
|
|
|
- x=$( compgen -d -- "$quoted" ) &&
|
|
|
|
+ x=$( compgen -d -- "$cur" ) &&
|
2014-11-17 13:50:19 +01:00
|
|
|
while read -r tmp; do
|
2015-03-18 14:07:18 +01:00
|
|
|
toks+=( "$tmp" )
|
|
|
|
done <<< "$x"
|
|
|
|
@@ -937,6 +938,41 @@ _tilde()
|
|
|
|
return $result
|
|
|
|
}
|
|
|
|
|
|
|
|
+# Perform dollar ($) completion
|
|
|
|
+# @return True (0) if completion needs further processing,
|
|
|
|
+# False (> 0) if tilde is followed by a valid username, completions
|
|
|
|
+# are put in COMPREPLY and no further processing is necessary.
|
|
|
|
+_dollar()
|
|
|
|
+{
|
|
|
|
+ local s=""
|
|
|
|
+ local -i glob=0
|
|
|
|
+
|
|
|
|
+ shopt -q extglob && let glob++
|
|
|
|
+ ((glob == 0)) && shopt -s extglob
|
|
|
|
+
|
|
|
|
+ [[ "$COMP_LINE" == cd* ]] && s="/"
|
|
|
|
+
|
|
|
|
+ case "$1" in
|
|
|
|
+ \$\(*|\`*)
|
|
|
|
+ COMPREPLY=($(compgen -c -P '$(' -S ")$s" -- ${1#??})) ;;
|
|
|
|
+ \$\{*)
|
|
|
|
+ COMPREPLY=($(compgen -v -P '${' -S "}$s" -- ${1#??})) ;;
|
|
|
|
+ \$*)
|
|
|
|
+ COMPREPLY=($(compgen -v -P '$' ${s:+-S $s} -- ${1#?})) ;;
|
|
|
|
+ *)
|
|
|
|
+ ((glob == 0)) && shopt -u extglob
|
|
|
|
+ return 0
|
|
|
|
+ esac
|
|
|
|
+
|
|
|
|
+ if ((${#COMPREPLY[@]} > 0)) ; then
|
|
|
|
+ ((${#COMPREPLY[@]} == 1)) && eval COMPREPLY=\(${COMPREPLY[@]}\)
|
|
|
|
+ else
|
|
|
|
+ eval COMPREPLY=\(${1}\)
|
|
|
|
+ fi
|
|
|
|
+
|
|
|
|
+ ((glob == 0)) && shopt -u extglob
|
|
|
|
+ return ${#COMPREPLY[@]}
|
|
|
|
+}
|
|
|
|
|
|
|
|
# Expand variable starting with tilde (~)
|
|
|
|
# We want to expand ~foo/... to /home/foo/... to avoid problems when
|
|
|
|
@@ -1576,7 +1612,16 @@ complete -F _known_hosts traceroute trac
|
|
|
|
_cd()
|
|
|
|
{
|
|
|
|
local cur prev words cword
|
|
|
|
- _init_completion || return
|
|
|
|
+ _init_completion || {
|
|
|
|
+ if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
|
|
|
|
+ local i=${COMPREPLY[0]}
|
|
|
|
+ if [[ "$i" == "$cur" && $i != "*/" ]]; then
|
|
|
|
+ _dollar "$i" || return
|
|
|
|
+ COMPREPLY[0]="${i%%/}/"
|
|
|
|
+ fi
|
|
|
|
+ fi
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
|
|
|
|
local IFS=$'\n' i j k
|
|
|
|
|