mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-11-23 14:40:37 +08:00
Don't do intermediate fuzzy directory matching with $PATH
When expanding an executable with $PATH, don't attempt to interpret the directories in PATH as fuzzy matching. Fixes #2413.
This commit is contained in:
parent
bec6d5c174
commit
aeaacedf75
|
@ -1147,11 +1147,12 @@ void completer_t::complete_cmd(const wcstring &str_cmd, bool use_function, bool
|
|||
nxt_completion.append(str_cmd);
|
||||
|
||||
size_t prev_count = this->completions.size();
|
||||
expand_flags_t expand_flags = EXPAND_FOR_COMPLETIONS | EXECUTABLES_ONLY | EXPAND_NO_FUZZY_DIRECTORIES | this->expand_flags();
|
||||
if (expand_string(nxt_completion,
|
||||
&this->completions,
|
||||
EXPAND_FOR_COMPLETIONS | EXECUTABLES_ONLY | this->expand_flags(), NULL) != EXPAND_ERROR)
|
||||
expand_flags, NULL) != EXPAND_ERROR)
|
||||
{
|
||||
/* For all new completions, if COMPLETE_NO_CASE is set, then use only the last path component */
|
||||
/* For all new completions, if COMPLETE_REPLACES_TOKEN is set, then use only the last path component */
|
||||
for (size_t i=prev_count; i< this->completions.size(); i++)
|
||||
{
|
||||
completion_t &c = this->completions.at(i);
|
||||
|
|
|
@ -56,7 +56,10 @@ enum
|
|||
EXPAND_SKIP_HOME_DIRECTORIES = 1 << 8,
|
||||
|
||||
/** Allow fuzzy matching */
|
||||
EXPAND_FUZZY_MATCH = 1 << 9
|
||||
EXPAND_FUZZY_MATCH = 1 << 9,
|
||||
|
||||
/** Disallow directory abbreviations like /u/l/b for /usr/local/bin. Only applicable if EXPAND_FUZZY_MATCH is set. */
|
||||
EXPAND_NO_FUZZY_DIRECTORIES = 1 << 10
|
||||
};
|
||||
typedef int expand_flags_t;
|
||||
|
||||
|
|
|
@ -1002,9 +1002,11 @@ void wildcard_expander_t::expand(const wcstring &base_dir, const wchar_t *wc)
|
|||
/* This just trumps everything */
|
||||
size_t before = this->resolved_completions->size();
|
||||
this->expand(base_dir + wc_segment + L'/', wc_remainder);
|
||||
if ((this->flags & EXPAND_FUZZY_MATCH) && this->resolved_completions->size() == before)
|
||||
|
||||
/* Maybe try a fuzzy match (#94) if nothing was found with the literal match. Respect EXPAND_NO_DIRECTORY_ABBREVIATIONS (#2413). */
|
||||
bool allow_fuzzy = (this->flags & (EXPAND_FUZZY_MATCH | EXPAND_NO_FUZZY_DIRECTORIES)) == EXPAND_FUZZY_MATCH;
|
||||
if (allow_fuzzy && this->resolved_completions->size() == before)
|
||||
{
|
||||
/* Nothing was found with the literal match. Try a fuzzy match (#94). */
|
||||
assert(this->flags & EXPAND_FOR_COMPLETIONS);
|
||||
DIR *base_dir_fd = open_dir(base_dir);
|
||||
if (base_dir_fd != NULL)
|
||||
|
|
Loading…
Reference in New Issue
Block a user