Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: [BUG?] - history word expansion for commands with interactive comments
- X-seq: zsh-workers 42245
- From: Peter Stephenson <p.stephenson@xxxxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: Re: [BUG?] - history word expansion for commands with interactive comments
- Date: Mon, 08 Jan 2018 10:21:47 +0000
- Cms-type: 201P
- Dkim-filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20180108102154euoutp0116605bb222fe18e37fafa07e9c6581a4~Hzo9WUIFR3248132481euoutp01g
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1515406914; bh=B9UNPXIIG1vcyDzph2V95c2TamMHw5sUAFI2nO48kJE=; h=Date:From:To:Subject:In-reply-to:References:From; b=Dt4Ck0H96k8pnpSBRikE9KrvBqebXTG096JvOWPM3n4hm8LAQU2hI5fIwHNZ2gOGl ecW9FYRjfam1UDMpiyi7jDPtP+xbeiNIPGuddR0M6MYASG4WBVKLL773WOUM/n6wsB mefABUAH2QCJWtmYBDweCH3MMxd6sTCeTR86PtpM=
- In-reply-to: <CAC5uWd_ORE6vdP2fka4J8g5A-Sqnv5+66VKzooFR0pcQY4hEPg@mail.gmail.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- Organization: Samsung Cambridge Solution Centre
- References: <CGME20180108093217epcas3p1ca24c2c8aca1afabe08df88a2a425a8d@epcas3p1.samsung.com> <CAC5uWd_ORE6vdP2fka4J8g5A-Sqnv5+66VKzooFR0pcQY4hEPg@mail.gmail.com>
On Mon, 8 Jan 2018 10:31:14 +0100
JB M <jbm.lists@xxxxxxxxx> wrote:
> on a somewhat recent version of ZSH, it seems that the comment character is
> considered part of the arguments of commands ending with a comment:
> gandia% echo test # My comment sentence.
> test
>
> gandia% echo !:$
> echo #
Hmm, that doesn't look particularly useful.
We might get away with something like this.
pws
diff --git a/Src/hist.c b/Src/hist.c
index 177250f..e08984f 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -46,6 +46,9 @@ void (*hwaddc) _((int));
void (*hwbegin) _((int));
/**/
+void (*hwabort) _((void));
+
+/**/
void (*hwend) _((void));
/**/
@@ -250,6 +253,7 @@ hist_context_save(struct hist_stack *hs, int toplevel)
hs->hungetc = hungetc;
hs->hwaddc = hwaddc;
hs->hwbegin = hwbegin;
+ hs->hwabort = hwabort;
hs->hwend = hwend;
hs->addtoline = addtoline;
hs->hlinesz = hlinesz;
@@ -294,6 +298,7 @@ hist_context_restore(const struct hist_stack *hs, int toplevel)
hungetc = hs->hungetc;
hwaddc = hs->hwaddc;
hwbegin = hs->hwbegin;
+ hwabort = hs->hwabort;
hwend = hs->hwend;
addtoline = hs->addtoline;
hlinesz = hs->hlinesz;
@@ -986,6 +991,11 @@ nohw(UNUSED(int c))
}
static void
+nohwabort(void)
+{
+}
+
+static void
nohwe(void)
{
}
@@ -1057,6 +1067,7 @@ hbegin(int dohist)
hungetc = inungetc;
hwaddc = nohw;
hwbegin = nohw;
+ hwabort = nohwabort;
hwend = nohwe;
addtoline = nohw;
} else {
@@ -1066,6 +1077,7 @@ hbegin(int dohist)
hungetc = ihungetc;
hwaddc = ihwaddc;
hwbegin = ihwbegin;
+ hwabort = ihwabort;
hwend = ihwend;
addtoline = iaddtoline;
if (!isset(BANGHIST))
@@ -1571,6 +1583,16 @@ ihwbegin(int offset)
chwords[chwordpos++] = hptr - chline + offset;
}
+/* Abort current history word, not needed */
+
+/**/
+void
+ihwabort(void)
+{
+ if (chwordpos%2)
+ chwordpos--;
+}
+
/* add a word to the history List */
/**/
diff --git a/Src/lex.c b/Src/lex.c
index c2a5966..2379804 100644
--- a/Src/lex.c
+++ b/Src/lex.c
@@ -677,7 +677,7 @@ gettok(void)
(char *)hcalloc(lexbuf.siz = LEX_HEAP_SIZE);
add(c);
}
- hwend();
+ hwabort();
while ((c = ingetc()) != '\n' && !lexstop) {
hwaddc(c);
addtoline(c);
diff --git a/Src/zsh.h b/Src/zsh.h
index 92f7576..ba2f8cd 100644
--- a/Src/zsh.h
+++ b/Src/zsh.h
@@ -2992,6 +2992,7 @@ struct hist_stack {
void (*hungetc) _((int));
void (*hwaddc) _((int));
void (*hwbegin) _((int));
+ void (*hwabort) _((void));
void (*hwend) _((void));
void (*addtoline) _((int));
unsigned char *cstack;
Messages sorted by:
Reverse Date,
Date,
Thread,
Author