1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-23 04:51:12 +02:00

33480, slightly tweaked: fix for $' completion.

Improves case where completing after the $' but before any
closing quote, or if the closing quote is absent.
No other change --- we still don't attempt to exand the quotes if
we're inside them.
This commit is contained in:
Peter Stephenson 2014-10-24 09:54:55 +01:00
parent 242b419fbc
commit 11c3bc3d73
2 changed files with 16 additions and 4 deletions

View file

@ -1,3 +1,8 @@
2014-10-24 Peter Stephenson <p.stephenson@samsung.com>
* 33480 slightly tweaked: Src/Zle/zle_tricky.c: fix completion
after $' but before closing quote (if any).
2014-10-24 Mikael Magnusson <mikachu@gmail.com>
* 33485: Completion/Unix/Command/_su: fix a missing ;; case

View file

@ -662,8 +662,9 @@ docomplete(int lst)
* NOTE: get_comp_string() calls pushheap(), but not popheap(). */
noerrs = 1;
s = get_comp_string();
DPUTS(wb < 0 || zlemetacs < wb || zlemetacs > we,
"BUG: 0 <= wb <= zlemetacs <= we is not true!");
DPUTS3(wb < 0 || zlemetacs < wb || zlemetacs > we,
"BUG: 0 <= wb (%d) <= zlemetacs (%d) <= we (%d) is not true!",
wb, zlemetacs, we);
noerrs = ne;
/* For vi mode, reset the start-of-insertion pointer to the beginning *
* of the word being completed, if it is currently later. Vi itself *
@ -1720,9 +1721,11 @@ get_comp_string(void)
for (pe = p + 2; *pe && *pe != Snull && i + (pe - p) < zlemetacs;
pe++)
;
if (!*pe) {
if (*pe != Snull) {
/* no terminating Snull, can't substitute */
skipchars = 2;
if (*pe)
j = 1;
} else {
/*
* Try and substitute the $'...' expression.
@ -1795,6 +1798,10 @@ get_comp_string(void)
* first clue how the completion system actually works.
*/
skipchars = 2;
/*
* Also pretend we're in single quotes.
*/
j = 1;
}
}
}
@ -1817,7 +1824,7 @@ get_comp_string(void)
ocs = zlemetacs;
zlemetacs = i;
foredel(skipchars, CUT_RAW);
if ((zlemetacs = ocs) > (i -= skipchars))
if ((zlemetacs = ocs) > --i)
zlemetacs -= skipchars;
we -= skipchars;
}