Do not use CDPATH when completing arguments starting with a '.'

darcs-hash:20060208152909-ac50b-650092242a4d9454db6cf4d73858c137040db4c5.gz
This commit is contained in:
axel 2006-02-09 01:29:09 +10:00
parent 133b682793
commit a0e1f9113e
4 changed files with 14 additions and 3 deletions

View file

@ -18,6 +18,7 @@
#include <ctype.h> #include <ctype.h>
#include <pwd.h> #include <pwd.h>
#include <signal.h> #include <signal.h>
#include <wchar.h>
#include "config.h" #include "config.h"
#include "util.h" #include "util.h"
@ -1073,6 +1074,7 @@ static void complete_cmd_desc( const wchar_t *cmd, array_list_t *comp )
al_init( &list ); al_init( &list );
hash_init( &lookup, &hash_wcs_func, &hash_wcs_cmp ); hash_init( &lookup, &hash_wcs_func, &hash_wcs_cmp );
/* /*
First locate a list of possible descriptions using a single First locate a list of possible descriptions using a single
call to apropos or a direct search if we know the location call to apropos or a direct search if we know the location
@ -1081,6 +1083,7 @@ static void complete_cmd_desc( const wchar_t *cmd, array_list_t *comp )
since apropos is only called once. since apropos is only called once.
*/ */
exec_subshell( lookup_cmd, &list ); exec_subshell( lookup_cmd, &list );
/* /*
Then discard anything that is not a possible completion and put Then discard anything that is not a possible completion and put
the result into a hashtable with the completion as key and the the result into a hashtable with the completion as key and the
@ -1110,6 +1113,7 @@ static void complete_cmd_desc( const wchar_t *cmd, array_list_t *comp )
things. things.
*/ */
val_begin[0]=towupper(val_begin[0]); val_begin[0]=towupper(val_begin[0]);
hash_put( &lookup, key, val_begin ); hash_put( &lookup, key, val_begin );
} }
@ -1139,6 +1143,7 @@ static void complete_cmd_desc( const wchar_t *cmd, array_list_t *comp )
COMPLETE_SEP_STR, COMPLETE_SEP_STR,
new_desc, new_desc,
0 ); 0 );
al_set( comp, i, new_el ); al_set( comp, i, new_el );
free( el ); free( el );
} }
@ -1260,6 +1265,10 @@ static void complete_cmd( const wchar_t *cmd,
/* /*
Tab complete implicit cd for directories in CDPATH Tab complete implicit cd for directories in CDPATH
*/ */
if( cmd[0] != L'/' && ( wcsncmp( cmd, L"./", 2 )!=0) )
{
for( nxt_path = wcstok( cdpath_cpy, ARRAY_SEP_STR, &state ); for( nxt_path = wcstok( cdpath_cpy, ARRAY_SEP_STR, &state );
nxt_path != 0; nxt_path != 0;
nxt_path = wcstok( 0, ARRAY_SEP_STR, &state) ) nxt_path = wcstok( 0, ARRAY_SEP_STR, &state) )
@ -1303,6 +1312,7 @@ static void complete_cmd( const wchar_t *cmd,
} }
al_destroy( &tmp ); al_destroy( &tmp );
}
} }

View file

@ -20,6 +20,7 @@
#include "reader.h" #include "reader.h"
#include "parse_util.h" #include "parse_util.h"
#include "env.h" #include "env.h"
#include "expand.h"
/** /**

View file

@ -18,7 +18,7 @@ function __fish_complete_cd -d "Completions for the cd command"
set mycdpath $CDPATH set mycdpath $CDPATH
end end
if echo (commandline -ct)|grep '^/' >/dev/null if echo (commandline -ct)|grep '^/\|./' >/dev/null
# This is an absolute search path # This is an absolute search path
eval printf '\%s\\tDirectory\\n' (commandline -ct)\*/ eval printf '\%s\\tDirectory\\n' (commandline -ct)\*/
else else

View file

@ -605,7 +605,7 @@ wchar_t *parser_cdpath_get( wchar_t *dir )
return 0; return 0;
if( dir[0] == L'/' ) if( dir[0] == L'/'|| (wcsncmp( dir, L"./", 2 )==0) )
{ {
struct stat buf; struct stat buf;
if( wstat( dir, &buf ) == 0 ) if( wstat( dir, &buf ) == 0 )