mirror of
https://github.com/fish-shell/fish-shell
synced 2024-12-26 04:43:10 +00:00
Fix to better support CDPATH
This commit is contained in:
parent
e0baab2722
commit
99b51ce6ea
4 changed files with 16 additions and 6 deletions
|
@ -49,9 +49,7 @@ extern wcstring stdout_buffer, stderr_buffer;
|
||||||
*/
|
*/
|
||||||
static int is_path_variable( const wchar_t *env )
|
static int is_path_variable( const wchar_t *env )
|
||||||
{
|
{
|
||||||
return contains( env,
|
return contains(env, L"PATH", L"CDPATH" );
|
||||||
L"PATH"
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1009,7 +1009,11 @@ void completer_t::complete_cmd( const wcstring &str, bool use_function, bool use
|
||||||
wchar_t *state;
|
wchar_t *state;
|
||||||
std::vector<completion_t> possible_comp;
|
std::vector<completion_t> possible_comp;
|
||||||
|
|
||||||
wchar_t *cdpath_cpy = wcsdup(L".");
|
|
||||||
|
env_var_t cdpath = env_get_string(L"CDPATH");
|
||||||
|
if (cdpath.missing_or_empty())
|
||||||
|
cdpath = L".";
|
||||||
|
wchar_t *cdpath_cpy = wcsdup(cdpath.c_str());
|
||||||
|
|
||||||
const bool wants_description = (type == COMPLETE_DEFAULT);
|
const bool wants_description = (type == COMPLETE_DEFAULT);
|
||||||
|
|
||||||
|
|
3
env.cpp
3
env.cpp
|
@ -1525,4 +1525,5 @@ const wchar_t *env_vars::get(const wchar_t *key) const
|
||||||
return (iter == vars.end() ? NULL : iter->second.c_str());
|
return (iter == vars.end() ? NULL : iter->second.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
const wchar_t * const env_vars::highlighting_keys[] = {L"PATH", L"HIGHLIGHT_DELAY", L"fish_function_path", NULL};
|
const wchar_t * const env_vars::highlighting_keys[] = {L"PATH", L"CDPATH", L"HIGHLIGHT_DELAY", L"fish_function_path", NULL};
|
||||||
|
|
||||||
|
|
9
path.cpp
9
path.cpp
|
@ -377,7 +377,7 @@ wchar_t *path_allocate_cdpath( const wchar_t *dir, const wchar_t *wd )
|
||||||
|
|
||||||
// Respect CDPATH
|
// Respect CDPATH
|
||||||
env_var_t path = env_get_string(L"CDPATH");
|
env_var_t path = env_get_string(L"CDPATH");
|
||||||
if (path.missing_or_empty()) path = L".";
|
if (path.missing_or_empty()) path = L"."; //We'll change this to the wd if we have one
|
||||||
|
|
||||||
path_cpy = wcsdup( path.c_str() );
|
path_cpy = wcsdup( path.c_str() );
|
||||||
|
|
||||||
|
@ -385,6 +385,13 @@ wchar_t *path_allocate_cdpath( const wchar_t *dir, const wchar_t *wd )
|
||||||
nxt_path != NULL;
|
nxt_path != NULL;
|
||||||
nxt_path = wcstok( 0, ARRAY_SEP_STR, &state) )
|
nxt_path = wcstok( 0, ARRAY_SEP_STR, &state) )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (! wcscmp(nxt_path, L".") && wd != NULL) {
|
||||||
|
// nxt_path is just '.', and we have a working directory, so use the wd instead
|
||||||
|
// TODO: if nxt_path starts with ./ we need to replace the . with the wd
|
||||||
|
nxt_path = wd;
|
||||||
|
}
|
||||||
|
|
||||||
wchar_t *expanded_path = expand_tilde_compat( wcsdup(nxt_path) );
|
wchar_t *expanded_path = expand_tilde_compat( wcsdup(nxt_path) );
|
||||||
|
|
||||||
// debug( 2, L"woot %ls\n", expanded_path );
|
// debug( 2, L"woot %ls\n", expanded_path );
|
||||||
|
|
Loading…
Reference in a new issue