From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 28761 invoked by alias); 4 Apr 2016 12:58:45 -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: 38240 Received: (qmail 27516 invoked from network); 4 Apr 2016 12:58:45 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 X-AuditID: cbfec7f4-f796c6d000001486-2f-570265036dd5 Date: Mon, 04 Apr 2016 13:58:26 +0100 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: Another Message-id: <20160404135826.1050fea7@pwslap01u.europe.root.pri> In-reply-to: <20160404124945.7be02c99@pwslap01u.europe.root.pri> References: <20160404113524.GA21769@tarsus.local2> <20160404124945.7be02c99@pwslap01u.europe.root.pri> 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+NgFrrALMWRmVeSWpSXmKPExsVy+t/xa7rMqUzhBjsXs1scbH7I5MDoserg B6YAxigum5TUnMyy1CJ9uwSujPn9k9kLnvJW3Lqxh7mB8RJXFyMnh4SAicSLszvYIGwxiQv3 1gPZXBxCAksZJW4v38AM4cxgkmj7uogdwjnNKHH803cmCOcMo8TeZQ+ZQPpZBFQl3u27yA5i swkYSkzdNJsRxBYREJc4u/Y8C4gtLCAv8a21BWwfr4C9xJNHd4HqOTg4BRwk/l/RAAkLCWRI HO+6AdbKL6AvcfXvJyaI8+wlZl45wwjRKijxY/I9sJHMAloSm7c1sULY8hKb17xlhpijLnHj 7m72CYzCs5C0zELSMgtJywJG5lWMoqmlyQXFSem5hnrFibnFpXnpesn5uZsYIeH8ZQfj4mNW hxgFOBiVeHg/HGUMF2JNLCuuzD3EKMHBrCTC+yiZKVyINyWxsiq1KD++qDQntfgQozQHi5I4 79xd70OEBNITS1KzU1MLUotgskwcnFINjCYN5TbnmpY8/3aVv09vuvwJ8x1JllzPSxfwHvyk seDR+vt+73K4fBjy/566VJVTuZ6Xf/7B9rkZ9RNL6x8ni9rNYb7yRiw77dWHEGGpiVaiTuUP ps/3SpjxOTt11q65fGJck1yX8CemL7fcdHOhquL22CW/rW85yk9MNL47uaTs2NIWrTjeVUos xRmJhlrMRcWJAJlBzDpjAgAA Sorry, try this one instead... pws diff --git a/Src/Zle/zle_keymap.c b/Src/Zle/zle_keymap.c index 382eb8d..7734ddc 100644 --- a/Src/Zle/zle_keymap.c +++ b/Src/Zle/zle_keymap.c @@ -1615,8 +1615,7 @@ getkeymapcmd(Keymap km, Thingy *funcp, char **strp) else lastchar = lastc; if(lastlen != keybuflen) { - unmetafy(keybuf + lastlen, &keybuflen); - ungetbytes(keybuf+lastlen, keybuflen); + ungetbytes_unmeta(keybuf+lastlen, keybuflen); if(vichgflag) vichgbufptr -= keybuflen; keybuf[lastlen] = 0; @@ -1672,7 +1671,7 @@ getkeybuf(int w) mod_export void ungetkeycmd(void) { - ungetbytes(keybuf, keybuflen); + ungetbytes_unmeta(keybuf, keybuflen); } /* read a command from the current keymap, with widgets */ @@ -1690,17 +1689,12 @@ getkeycmd(void) if(!*seq) return NULL; if(!func) { - int len; - char *pb; - if (++hops == 20) { zerr("string inserting another one too many times"); hops = 0; return NULL; } - pb = unmetafy(ztrdup(str), &len); - ungetbytes(pb, len); - zfree(pb, strlen(str) + 1); + ungetbytes_unmeta(str, strlen(str)); goto sentstring; } if (func == Th(z_executenamedcmd) && !statusline) { diff --git a/Src/Zle/zle_main.c b/Src/Zle/zle_main.c index 104e5d6..472e326 100644 --- a/Src/Zle/zle_main.c +++ b/Src/Zle/zle_main.c @@ -357,6 +357,21 @@ ungetbytes(char *s, int len) ungetbyte(*--s); } +/**/ +void +ungetbytes_unmeta(char *s, int len) +{ + s += len; + while (len--) { + if (len && s[-2] == Meta) { + ungetbyte(*--s ^ 32); + len--; + s--; + } else + ungetbyte(*--s); + } +} + #if defined(pyr) && defined(HAVE_SELECT) static int breakread(int fd, char *buf, int n)