Skip to content

Commit

Permalink
Don't do intermediate fuzzy directory matching with $PATH
Browse files Browse the repository at this point in the history
When expanding an executable with $PATH, don't attempt to
interpret the directories in PATH as fuzzy matching. Fixes #2413.
  • Loading branch information
ridiculousfish committed Oct 3, 2015
1 parent bec6d5c commit aeaaced
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 5 deletions.
5 changes: 3 additions & 2 deletions src/complete.cpp
Expand Up @@ -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);
Expand Down
5 changes: 4 additions & 1 deletion src/expand.h
Expand Up @@ -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;

Expand Down
6 changes: 4 additions & 2 deletions src/wildcard.cpp
Expand Up @@ -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)
Expand Down

0 comments on commit aeaaced

Please sign in to comment.