From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9601 invoked by alias); 19 Mar 2015 10:57:25 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 34742 Received: (qmail 7802 invoked from network); 19 Mar 2015 10:57:23 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_HI, SPF_HELO_PASS autolearn=ham version=3.3.2 X-AuditID: cbfec7f5-b7fc86d0000066b7-08-550aaaf8c486 Date: Thu, 19 Mar 2015 10:57:16 +0000 From: Peter Stephenson To: Zsh Hackers' List Subject: Re: capturing output of !! not working Message-id: <20150319105716.620cd931@pwslap01u.europe.root.pri> In-reply-to: References: Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrCLMWRmVeSWpSXmKPExsVy+t/xy7o/VnGFGnRfMbM42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGXNm3WMuaOWpuPXnO2sD4zbOLkZODgkBE4lrx1pZIGwxiQv3 1rN1MXJxCAksZZRY8fMuI4SzhEni0otrUJltjBJf7j1lBmlhEVCVmPl/JSOIzSZgKDF102wg m4NDREBbov2jGEhYWEBf4sqsDiYQm1fAXuLM+hNg5ZwCwRKnXsxkBSkXEgiQ2DI/FyTMD1R+ 9e8nJoiD7CVmXjnDCNEqKPFj8j2wQ5kFtCQ2b2tihbDlJTaveQt2jZCAusSNu7vZJzAKzULS MgtJyywkLQsYmVcxiqaWJhcUJ6XnGukVJ+YWl+al6yXn525ihITs1x2MS49ZHWIU4GBU4uF1 +MERKsSaWFZcmXuIUYKDWUmE93QZV6gQb0piZVVqUX58UWlOavEhRiYOTqkGxtLie2WFAfUd FZbsgTvWZ/7qfVvmqNZUzKZiFbHJTHL7nfbzhpP6b7/8pPNfm2dLqWGa9kNp1pmLHl/X3L/1 q2CW3ecDE2NUjwrfLmf88bVKvGbK08/CdofOPdrwdMuf21ZOthH35TqXPDj26sxXO44F6/ZN W98iz3Y2/4xnqsLeJpPz+rMfCiixFGckGmoxFxUnAgBLpIkfNwIAAA== On Wed, 18 Mar 2015 21:49:37 -0400 Vin Shelton wrote: > $ ls -l $(!!) > ls -l $() This is due to special code for handling aliases inside command substitutions that got applied too widely because the flag that indicates aliases also indicates history expansion; however, there's a discriminator in another bit. I suspect restricting application of INP_ALIAS is a better fix overall, but it needs a lot more code tracking down plus safety checks. Another case where we need a framework for testing interactive shells. pws diff --git a/Src/hist.c b/Src/hist.c index aa07ce8..b7ef522 100644 --- a/Src/hist.c +++ b/Src/hist.c @@ -338,7 +338,8 @@ ihwaddc(int c) * fashion as we never need the expansion in the history * line, only in the lexer and above. */ - !((histactive & HA_INWORD) && (inbufflags & INP_ALIAS))) { + !((histactive & HA_INWORD) && + (inbufflags & (INP_ALIAS|INP_HIST)) == INP_ALIAS)) { /* Quote un-expanded bangs in the history line. */ if (c == bangchar && stophist < 2 && qbang) /* If qbang is not set, we do not escape this bangchar as it's * @@ -901,7 +902,8 @@ ihungetc(int c) zlemetall--; exlast++; } - if (!(histactive & HA_INWORD) || !(inbufflags & INP_ALIAS)) { + if (!(histactive & HA_INWORD) || + (inbufflags & (INP_ALIAS|INP_HIST)) != INP_ALIAS) { DPUTS(hptr <= chline, "BUG: hungetc attempted at buffer start"); hptr--; DPUTS(*hptr != (char) c, "BUG: wrong character in hungetc() ");