aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--complete.c12
-rw-r--r--function.c1
-rw-r--r--init/completions/cd.fish2
-rw-r--r--parser.c2
4 files changed, 14 insertions, 3 deletions
diff --git a/complete.c b/complete.c
index 00dc6dd6..c35066b7 100644
--- a/complete.c
+++ b/complete.c
@@ -18,6 +18,7 @@
#include <ctype.h>
#include <pwd.h>
#include <signal.h>
+#include <wchar.h>
#include "config.h"
#include "util.h"
@@ -1073,6 +1074,7 @@ static void complete_cmd_desc( const wchar_t *cmd, array_list_t *comp )
al_init( &list );
hash_init( &lookup, &hash_wcs_func, &hash_wcs_cmp );
+
/*
First locate a list of possible descriptions using a single
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.
*/
exec_subshell( lookup_cmd, &list );
+
/*
Then discard anything that is not a possible completion and put
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.
*/
val_begin[0]=towupper(val_begin[0]);
+
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,
new_desc,
0 );
+
al_set( comp, i, new_el );
free( el );
}
@@ -1260,6 +1265,10 @@ static void complete_cmd( const wchar_t *cmd,
/*
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 );
nxt_path != 0;
nxt_path = wcstok( 0, ARRAY_SEP_STR, &state) )
@@ -1303,7 +1312,8 @@ static void complete_cmd( const wchar_t *cmd,
}
al_destroy( &tmp );
-
+ }
+
}
free( cdpath_cpy );
diff --git a/function.c b/function.c
index 47633026..a3f76b0b 100644
--- a/function.c
+++ b/function.c
@@ -20,6 +20,7 @@
#include "reader.h"
#include "parse_util.h"
#include "env.h"
+#include "expand.h"
/**
diff --git a/init/completions/cd.fish b/init/completions/cd.fish
index ea5eed01..93eadcb7 100644
--- a/init/completions/cd.fish
+++ b/init/completions/cd.fish
@@ -18,7 +18,7 @@ function __fish_complete_cd -d "Completions for the cd command"
set mycdpath $CDPATH
end
- if echo (commandline -ct)|grep '^/' >/dev/null
+ if echo (commandline -ct)|grep '^/\|./' >/dev/null
# This is an absolute search path
eval printf '\%s\\tDirectory\\n' (commandline -ct)\*/
else
diff --git a/parser.c b/parser.c
index 2c8789fe..09b48e40 100644
--- a/parser.c
+++ b/parser.c
@@ -605,7 +605,7 @@ wchar_t *parser_cdpath_get( wchar_t *dir )
return 0;
- if( dir[0] == L'/' )
+ if( dir[0] == L'/'|| (wcsncmp( dir, L"./", 2 )==0) )
{
struct stat buf;
if( wstat( dir, &buf ) == 0 )