mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 21:44:16 +00:00
Support space separators for abbreviations as part of #731
This commit is contained in:
parent
d982f2a575
commit
fbade198b9
2 changed files with 14 additions and 6 deletions
12
expand.cpp
12
expand.cpp
|
@ -2107,13 +2107,15 @@ bool expand_abbreviation(const wcstring &src, wcstring *output)
|
||||||
wcstokenizer tokenizer(var, ARRAY_SEP_STR);
|
wcstokenizer tokenizer(var, ARRAY_SEP_STR);
|
||||||
while (tokenizer.next(line))
|
while (tokenizer.next(line))
|
||||||
{
|
{
|
||||||
/* Line is expected to be of the form 'foo=bar'. Parse out the first =. Be forgiving about spaces, but silently skip on failure (no equals, or equals at the end or beginning). Try to avoid copying any strings until we are sure this is a match. */
|
/* Line is expected to be of the form 'foo=bar' or 'foo bar'. Parse out the first = or space. Silently skip on failure (no equals, or equals at the end or beginning). Try to avoid copying any strings until we are sure this is a match. */
|
||||||
size_t equals = line.find(L'=');
|
size_t equals_pos = line.find(L'=');
|
||||||
if (equals == wcstring::npos || equals == 0 || equals + 1 == line.size())
|
size_t space_pos = line.find(L' ');
|
||||||
|
size_t separator = mini(equals_pos, space_pos);
|
||||||
|
if (separator == wcstring::npos || separator == 0 || separator + 1 == line.size())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* Find the character just past the end of the command. Walk backwards, skipping spaces. */
|
/* Find the character just past the end of the command. Walk backwards, skipping spaces. */
|
||||||
size_t cmd_end = equals;
|
size_t cmd_end = separator;
|
||||||
while (cmd_end > 0 && iswspace(line.at(cmd_end - 1)))
|
while (cmd_end > 0 && iswspace(line.at(cmd_end - 1)))
|
||||||
cmd_end--;
|
cmd_end--;
|
||||||
|
|
||||||
|
@ -2122,7 +2124,7 @@ bool expand_abbreviation(const wcstring &src, wcstring *output)
|
||||||
{
|
{
|
||||||
/* Success. Set output to everythign past the end of the string. */
|
/* Success. Set output to everythign past the end of the string. */
|
||||||
if (output != NULL)
|
if (output != NULL)
|
||||||
output->assign(line, equals + 1, wcstring::npos);
|
output->assign(line, separator + 1, wcstring::npos);
|
||||||
|
|
||||||
result = true;
|
result = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1466,7 +1466,8 @@ static void test_abbreviations(void)
|
||||||
L"=" ARRAY_SEP_STR
|
L"=" ARRAY_SEP_STR
|
||||||
L"=foo" ARRAY_SEP_STR
|
L"=foo" ARRAY_SEP_STR
|
||||||
L"foo" ARRAY_SEP_STR
|
L"foo" ARRAY_SEP_STR
|
||||||
L"foo=bar";
|
L"foo=bar" ARRAY_SEP_STR
|
||||||
|
L"gx git checkout";
|
||||||
|
|
||||||
env_push(true);
|
env_push(true);
|
||||||
|
|
||||||
|
@ -1493,6 +1494,11 @@ static void test_abbreviations(void)
|
||||||
expanded = reader_expand_abbreviation_in_command(L"gc somebranch", wcslen(L"gc"), &result);
|
expanded = reader_expand_abbreviation_in_command(L"gc somebranch", wcslen(L"gc"), &result);
|
||||||
if (! expanded) err(L"gc not expanded");
|
if (! expanded) err(L"gc not expanded");
|
||||||
if (result != L"git checkout somebranch") err(L"gc incorrectly expanded on line %ld to '%ls'", (long)__LINE__, result.c_str());
|
if (result != L"git checkout somebranch") err(L"gc incorrectly expanded on line %ld to '%ls'", (long)__LINE__, result.c_str());
|
||||||
|
|
||||||
|
/* space separation */
|
||||||
|
expanded = reader_expand_abbreviation_in_command(L"gx somebranch", wcslen(L"gc"), &result);
|
||||||
|
if (! expanded) err(L"gx not expanded");
|
||||||
|
if (result != L"git checkout somebranch") err(L"gc incorrectly expanded on line %ld to '%ls'", (long)__LINE__, result.c_str());
|
||||||
|
|
||||||
expanded = reader_expand_abbreviation_in_command(L"echo hi ; gc somebranch", wcslen(L"echo hi ; g"), &result);
|
expanded = reader_expand_abbreviation_in_command(L"echo hi ; gc somebranch", wcslen(L"echo hi ; g"), &result);
|
||||||
if (! expanded) err(L"gc not expanded on line %ld", (long)__LINE__);
|
if (! expanded) err(L"gc not expanded on line %ld", (long)__LINE__);
|
||||||
|
|
Loading…
Reference in a new issue