summaryrefslogtreecommitdiff
path: root/Src/lex.c
diff options
context:
space:
mode:
authorAxel Beckert <abe@deuxchevaux.org>2022-04-11 00:18:04 +0200
committerAxel Beckert <abe@deuxchevaux.org>2022-04-11 00:18:04 +0200
commit31bcc5c263aea983e967426e2b94269e7605dcd4 (patch)
tree7b48ad9d7799afe09b7d7d8adc980bd5db935bdf /Src/lex.c
parent5086b5356abcef8849dc8a09902b7c55f01db3c0 (diff)
parentb09f4483416c54c1782824633dfabaf2ec0265b6 (diff)
downloadzsh-31bcc5c263aea983e967426e2b94269e7605dcd4.tar.gz
zsh-31bcc5c263aea983e967426e2b94269e7605dcd4.zip
Update upstream source from tag 'upstream/5.8.1.2-test'
Update to upstream version '5.8.1.2-test' with Debian dir b380d582bf51cd93149e4dea28fffa1ad85db4f5
Diffstat (limited to 'Src/lex.c')
-rw-r--r--Src/lex.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/Src/lex.c b/Src/lex.c
index 1d86da94e..ece02659e 100644
--- a/Src/lex.c
+++ b/Src/lex.c
@@ -270,7 +270,7 @@ zshlex(void)
do {
if (inrepeat_)
++inrepeat_;
- if (inrepeat_ == 3 && isset(SHORTLOOPS))
+ if (inrepeat_ == 3 && (isset(SHORTLOOPS) || isset(SHORTREPEAT)))
incmdpos = 1;
tok = gettok();
} while (tok != ENDINPUT && exalias());
@@ -541,6 +541,17 @@ cmd_or_math_sub(void)
{
int c = hgetc(), ret;
+ if (c == '\\') {
+ c = hgetc();
+ if (c != '\n') {
+ hungetc(c);
+ hungetc('\\');
+ lexstop = 0;
+ return skipcomm() ? CMD_OR_MATH_ERR : CMD_OR_MATH_CMD;
+ }
+ c = hgetc();
+ }
+
if (c == '(') {
int lexpos = (int)(lexbuf.ptr - tokstr);
add(Inpar);
@@ -998,6 +1009,16 @@ gettokstr(int c, int sub)
break;
case LX2_STRING:
e = hgetc();
+ if (e == '\\') {
+ e = hgetc();
+ if (e != '\n') {
+ hungetc(e);
+ hungetc('\\');
+ lexstop = 0;
+ break;
+ }
+ e = hgetc();
+ }
if (e == '[') {
cmdpush(CS_MATHSUBST);
add(String);
@@ -1868,6 +1889,7 @@ exalias(void)
hwend();
if (interact && isset(SHINSTDIN) && !strin && incasepat <= 0 &&
tok == STRING && !nocorrect && !(inbufflags & INP_ALIAS) &&
+ !hist_is_in_word() &&
(isset(CORRECTALL) || (isset(CORRECT) && incmdpos)))
spckword(&tokstr, 1, incmdpos, 1);