@@ -716,7 +716,7 @@ _get_cword()
716716_get_pword ()
717717{
718718    if  (( COMP_CWORD >=  1 )) ;  then 
719-         _get_cword " ${@: - } " 
719+         _get_cword " ${@ -} " 
720720    fi 
721721}
722722
@@ -792,7 +792,7 @@ _quote_readline_by_ref()
792792#  @param $1 Complete filenames matching `.$1' and the uppercase version of it.
793793#            Ignored with `-d`.
794794#  OPTIONS
795- #    -C dir  Change to dir before generating completions 
795+ #    -C dir  Complete entries in specified directory 
796796#    -d      Complete only on directories
797797_filedir ()
798798{
@@ -801,12 +801,12 @@ _filedir()
801801    _tilde " ${cur-} " ||  return 
802802
803803    local  -a toks
804-     local  reset arg chdir=.  dir=false
804+     local  reset arg chdir=" " 
805805
806806    local  OPTIND=1 OPTARG=" " 
807807    while  getopts  " :C:d" " $@ " ;  do 
808808        case  $arg  in 
809-             C) chdir=$OPTARG  ;;
809+             C) chdir=" $OPTARG / " 
810810            d) dir=true ;;
811811            * )
812812                echo  " bash_completion: $FUNCNAME : usage error" >&2 
@@ -820,13 +820,13 @@ _filedir()
820820    if  $dir ;  then 
821821        reset=$( shopt -po noglob) 
822822        set  -o noglob
823-         toks=($( command  cd  --  " $chdir "   2> /dev/null  &&   compgen  -d -- " ${cur-} " ) 
823+         toks=($( compgen -d -- " $chdir ${cur-} " ) 
824824        IFS='  ' 
825825        $reset 
826826        IFS=$' \n ' 
827827    else 
828828        local  quoted
829-         _quote_readline_by_ref " ${cur-} " 
829+         _quote_readline_by_ref " $chdir  $ {cur-}" 
830830
831831        #  Munge xspec to contain uppercase version too
832832        #  https://lists.gnu.org/archive/html/bug-bash/2010-09/msg00036.html
@@ -845,10 +845,7 @@ _filedir()
845845
846846        reset=$( shopt -po noglob) 
847847        set  -o noglob
848-         toks+=($( 
849-             command  cd  -- " $chdir " 2> /dev/null &&  
850-                 compgen  " ${opts[@]} " $quoted  
851-         )  )
848+         toks+=($( compgen " ${opts[@]} " $quoted ) 
852849        IFS='  ' 
853850        $reset 
854851        IFS=$' \n ' 
@@ -858,20 +855,27 @@ _filedir()
858855            $arg  &&  ${# toks[@]}  -lt  1 ]] &&  {
859856            reset=$( shopt -po noglob) 
860857            set  -o noglob
861-             toks+=($( 
862-                 command  cd  -- " $chdir " 2> /dev/null &&  
863-                     compgen  -f ${plusdirs+" ${plusdirs[@]} "   -- $quoted  
864-             )  )
858+             toks+=($( compgen -f ${plusdirs+" ${plusdirs[@]} "   -- $quoted ) 
865859            IFS='  ' 
866860            $reset 
867861            IFS=$' \n ' 
868862        }
869863    fi 
870864
871865    if  (( ${# toks[@]}  !=  0 )) ;  then 
872-         #  2>/dev/null for direct invocation, e.g. in the _filedir unit test
873-         compopt -o filenames 2> /dev/null
874-         COMPREPLY+=(" ${toks[@]} " 
866+         #  compopt 2>/dev/null for direct invocation, e.g. in _filedir unit test
867+         if  [[ -n  $chdir  ]];  then 
868+             local  i
869+             for  i  in  ${! toks[*]} ;  do 
870+                 if  [[ -d  ${toks[i]}  ]];  then 
871+                     toks[i]+=/
872+                     compopt -o nospace 2> /dev/null
873+                 fi 
874+             done 
875+         else 
876+             compopt -o filenames 2> /dev/null
877+         fi 
878+         COMPREPLY+=(" ${toks[@]# $chdir } " 
875879    fi 
876880} #  _filedir()
877881
@@ -1392,9 +1396,9 @@ _available_interfaces()
13921396    local  PATH=$PATH :/sbin
13931397
13941398    COMPREPLY=($( {
1395-         if  [[ ${1: -  ==  -w  ]];  then  
1399+         if  [[ ${1-}  ==  -w  ]];  then  
13961400            iwconfig 
1397-         elif  [[ ${1: -  ==  -a  ]];  then  
1401+         elif  [[ ${1-}  ==  -a  ]];  then  
13981402            ifconfig ||  ip -c=never link show up ||  ip link show up 
13991403        else  
14001404            ifconfig -a ||  ip -c=never link show ||  ip link show 
@@ -2247,7 +2251,7 @@ _cd()
22472251
22482252    #  Use standard dir completion if no CDPATH or parameter starts with /,
22492253    #  ./ or ../
2250-     if  [[ !  ${CDPATH: -  ||  $cur  ==  ? (.)? (.)/*  ]];  then 
2254+     if  [[ !  ${CDPATH-}  ||  $cur  ==  ? (.)? (.)/*  ]];  then 
22512255        _filedir -d
22522256        return 
22532257    fi 
@@ -2435,7 +2439,7 @@ complete -F _comp_root_command fakeroot gksu gksudo kdesudo really
24352439#  Return true if the completion should be treated as running as root
24362440_complete_as_root ()
24372441{
2438-     [[ $EUID  -eq  0 ||  ${root_command: -  ]]
2442+     [[ $EUID  -eq  0 ||  ${root_command-}  ]]
24392443}
24402444
24412445_longopt ()
0 commit comments