diff options
Diffstat (limited to 'Src/Zle/zle_tricky.c')
-rw-r--r-- | Src/Zle/zle_tricky.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Src/Zle/zle_tricky.c b/Src/Zle/zle_tricky.c index 58c7359d5..a007be3e9 100644 --- a/Src/Zle/zle_tricky.c +++ b/Src/Zle/zle_tricky.c @@ -985,7 +985,7 @@ static char * get_comp_string(void) { int t0, tt0, i, j, k, cp, rd, sl, ocs, ins, oins, ia, parct, varq = 0; - int ona = noaliases; + int ona = noaliases, qsub; char *s = NULL, *linptr, *tmp, *p, *tt = NULL, rdop[20]; freebrinfo(brbeg); @@ -1051,6 +1051,8 @@ get_comp_string(void) * and whatnot. */ do { + qsub = 0; + lincmd = ((incmdpos && !ins && !incond) || (oins == 2 && i == 2) || (ins == 3 && i == 1)); linredir = (inredir && !ins); @@ -1126,9 +1128,16 @@ get_comp_string(void) if (!zleparse && !tt0) { /* This is done when the lexer reached the word the cursor is on. */ tt = tokstr ? dupstring(tokstr) : NULL; + + if (isset(RCQUOTES) && *tt == Snull) { + char *p, *e = tt + cs - wb; + for (p = tt; *p && p < e; p++) + if (*p == '\'') + qsub++; + } /* If we added a `x', remove it. */ if (addedx && tt) - chuck(tt + cs - wb); + chuck(tt + cs - wb - qsub); tt0 = tok; /* Store the number of this word. */ clwpos = i; @@ -1176,8 +1185,8 @@ get_comp_string(void) /* If this is the word the cursor is in and we added a `x', * * remove it. */ if (clwpos == i++ && addedx) - chuck(&clwords[i - 1][((cs - wb) >= sl) ? - (sl - 1) : (cs - wb)]); + chuck(&clwords[i - 1][((cs - wb - qsub) >= sl) ? + (sl - 1) : (cs - wb - qsub)]); } while (tok != LEXERR && tok != ENDINPUT && (tok != SEPER || (zleparse && !tt0))); /* Calculate the number of words stored in the clwords array. */ |