From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14673 invoked from network); 22 Nov 1998 00:05:59 -0000 Received: from math.gatech.edu (list@130.207.146.50) by ns1.primenet.com.au with SMTP; 22 Nov 1998 00:05:59 -0000 Received: (from list@localhost) by math.gatech.edu (8.9.1/8.9.1) id TAA14794; Sat, 21 Nov 1998 19:00:36 -0500 (EST) Resent-Date: Sat, 21 Nov 1998 19:00:36 -0500 (EST) From: "Bart Schaefer" Message-Id: <981121155906.ZM28341@candle.brasslantern.com> Date: Sat, 21 Nov 1998 15:59:06 -0800 In-Reply-To: <199811212133.VAA00956@athenaeum.demon.co.uk> Comments: In reply to Phil Pennock "zle vi-mode tilde bug?" (Nov 21, 9:33pm) References: <199811212133.VAA00956@athenaeum.demon.co.uk> X-Mailer: Z-Mail (4.0b.820 20aug96) To: Phil Pennock , zsh-workers@math.gatech.edu (Zsh Development Workers) Subject: Re: zle vi-mode tilde bug? MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Resent-Message-ID: <"NQ9r_.0.5d3.ZGrLs"@math> Resent-From: zsh-workers@math.gatech.edu X-Mailing-List: archive/latest/4677 X-Loop: zsh-workers@math.gatech.edu Precedence: list Resent-Sender: zsh-workers-request@math.gatech.edu On Nov 21, 9:33pm, Phil Pennock wrote: } Subject: zle vi-mode tilde bug? } } Looking at Zle/zle_vi.c (vioperswapcase) there is an explicit call to } vifirstnonblank() which explains the behaviour, but not the reasoning. } Just before that call, cs is reset to a saved value. } } Am I missing something or is this a bug? It seems ... strange. I've been playing with this and I agree that the behavior is pretty odd. The following patch seems to make it more sensible; with this patch, the cursor always ends up at the end of the motion, except that on ~~ (upcase the current line) it always ends up at the end of the line. BTW, there doesn't seem to be any sensible way to use vi-oper-swap-case on the very last character of any line. ~l just beeps because the cursor can't move left. "oldcs" is perhaps no longer the best name for the variable, but ... Index: Src/Zle/zle_vi.c =================================================================== --- zle_vi.c 1998/11/04 17:13:58 1.2 +++ zle_vi.c 1998/11/21 23:50:28 @@ -551,12 +551,15 @@ void vioperswapcase(void) { - int oldcs, c2; + int oldcs = cs, oldbol = findbol(), c2; /* get the range */ startvichange(1); if ((c2 = getvirange(0)) != -1) { - oldcs = cs; + if (cs < oldbol || c2 == oldcs) + oldcs = cs; + else if (cs == oldcs || c2 >= findeol()) + oldcs = c2; /* swap the case of all letters within range */ while (cs < c2) { if (islower(line[cs])) @@ -565,9 +568,7 @@ line[cs] = tulower(line[cs]); cs++; } - /* go back to the first line of the range */ cs = oldcs; - vifirstnonblank(); } vichgflag = 0; } -- Bart Schaefer Brass Lantern Enterprises http://www.well.com/user/barts http://www.brasslantern.com