From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 279 invoked from network); 15 Dec 1996 01:35:53 -0000 Received: from dns.primenet.com.au (203.24.36.40) by coral.primenet.com.au with SMTP; 15 Dec 1996 01:35:53 -0000 Received: (qmail 188 invoked from network); 14 Dec 1996 18:29:06 -0000 Received: from euclid.skiles.gatech.edu (list@130.207.146.50) by dns.primenet.com.au with SMTP; 14 Dec 1996 18:29:06 -0000 Received: (from list@localhost) by euclid.skiles.gatech.edu (8.7.3/8.7.3) id NAA14183; Sat, 14 Dec 1996 13:14:33 -0500 (EST) Resent-Date: Sat, 14 Dec 1996 13:14:33 -0500 (EST) From: Zefram Message-Id: <27598.199612141815@stone.dcs.warwick.ac.uk> Subject: Re: bindkey bug? To: hzoli@cs.elte.hu (Zoltan Hidvegi) Date: Sat, 14 Dec 1996 18:15:16 +0000 (GMT) Cc: zsh-workers@math.gatech.edu In-Reply-To: <199612140329.EAA05233@hzoli.ppp.cs.elte.hu> from "Zoltan Hidvegi" at Dec 14, 96 04:29:41 am X-Loop: zefram@dcs.warwick.ac.uk X-Stardate: [-31]8573.80 X-US-Congress: Moronic fuckers Content-Type: text Resent-Message-ID: <"JSzyv2.0.YT3.9wkio"@euclid> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/2583 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu -----BEGIN PGP SIGNED MESSAGE----- Zoltan Hidvegi wrote: >I have this bindkey in my .zshrc: > >bindkey -s '^Z' '^[Qfg^M' > >In recent zsh versions after this command zsh thinks that ^Z is a prefix >and waits a half second before executing the string. That did not happen >in zsh-3.0.0. > >Does any of you know exactly which caused this changed? It was a side-effect of my key binding patch. The replacement string can't be stored in the simple key table, so ^Z has to be treated as a prefix. Of course, its prefixct is 0, indicating that it's not really a prefix. The bug is that getkeycmd() doesn't check prefixct soon enough. This totally untested patch should fix it: *** zle_main.c.old Sat Dec 14 17:59:26 1996 --- zle_main.c Sat Dec 14 18:10:22 1996 *************** *** 536,542 **** Key ky; metafy_keybuf(); ! cky = (Key) keybindtab->getnode(keybindtab, keybuf); unmetafy(keybuf, NULL); if (cky->func == z_undefinedkey) --- 536,542 ---- Key ky; metafy_keybuf(); ! ky = cky = (Key) keybindtab->getnode(keybindtab, keybuf); unmetafy(keybuf, NULL); if (cky->func == z_undefinedkey) *************** *** 543,549 **** cky = NULL; else lastlen = 1; ! for (;;) { if ((c = getkey(!!cky)) >= 0) { keybuf[keybuflen++] = c; metafy_keybuf(); --- 543,549 ---- cky = NULL; else lastlen = 1; ! while(ky->prefixct) { if ((c = getkey(!!cky)) >= 0) { keybuf[keybuflen++] = c; metafy_keybuf(); *************** *** 555,575 **** if (ky->func == z_undefinedkey) continue; cky = ky; - if (!ky->prefixct) { - ret = ky->func; - break; - } lastlen = keybuflen; } else if (cky) { ungetkeys(keybuf + lastlen, keybuflen - lastlen); if(vichgflag) vichgbufptr -= keybuflen - lastlen; - ret = cky->func; c = keybuf[lastlen - 1]; break; } else return z_undefinedkey; } } if (ret == z_executenamedcmd && !statusline) { while(ret == z_executenamedcmd) --- 555,571 ---- if (ky->func == z_undefinedkey) continue; cky = ky; lastlen = keybuflen; } else if (cky) { ungetkeys(keybuf + lastlen, keybuflen - lastlen); if(vichgflag) vichgbufptr -= keybuflen - lastlen; c = keybuf[lastlen - 1]; break; } else return z_undefinedkey; } + ret = cky->func; } if (ret == z_executenamedcmd && !statusline) { while(ret == z_executenamedcmd) -----BEGIN PGP SIGNATURE----- Version: 2.6.3i Charset: ascii iQCVAwUBMrLum3D/+HJTpU/hAQEfvAP/SpC2GUKcoLkQUgti7fZKdAVw8FmBYELm j/49ff5lKLxQPI3ONAzTB0X2NFAdaGyuzC9ooDbwKRryQ1XLDOQUhrW4Axbwo+7E pehSN6KrgE0aJ1H+Hkt83TQWwDO6hLRk/m4IzaNQD3gfY0FDRYztEe7HLKgF3HfG ApUlKBqoBww= =BI3q -----END PGP SIGNATURE-----