File FOO-dir-completion-boo905348.patch of Package bash-completion

---
 bash_completion |   51 ++++++++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 3 deletions(-)

--- bash_completion
+++ 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
 
     local -a toks
     local quoted x tmp
 
     _quote_readline_by_ref "$cur" quoted
-    x=$( compgen -d -- "$quoted" ) &&
+    x=$( compgen -d -- "$cur" ) &&
     while read -r tmp; do
         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 dollar 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
 
openSUSE Build Service is sponsored by