zsh-workers
 help / color / mirror / code / Atom feed
* zle vi-mode tilde bug?
@ 1998-11-21 21:33 Phil Pennock
  1998-11-21 23:59 ` Bart Schaefer
  0 siblings, 1 reply; 4+ messages in thread
From: Phil Pennock @ 1998-11-21 21:33 UTC (permalink / raw)
  To: Zsh Development Workers

In many modern vi clones, there is an option 'tildeop', which makes the
tilde-key act like a normal operator, taking movement.  zsh has
something similiar, in that you can do this:
 bindkey -a '~' vi-oper-swap-case
which tries to do the same thing.  Unfortunately, it also seems to reset
the cursor to the start of the line (first non-blank) afterwards.

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.  As
though someone's expecting only vertical movements (~j).
-- 
--> Phil Pennock ; GAT d- s+:+ a22 C++(++++) UL++++/I+++/S+++/H+ P++@ L+++
E-@ W(+) N>++ o !K w--- O>+ M V !PS PE Y+ PGP+ t-- 5++ X+ R !tv b++>+++ DI+ D+
G+ e+ h* r y?


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: zle vi-mode tilde bug?
  1998-11-21 21:33 zle vi-mode tilde bug? Phil Pennock
@ 1998-11-21 23:59 ` Bart Schaefer
  1998-11-22  3:31   ` Phil Pennock
  0 siblings, 1 reply; 4+ messages in thread
From: Bart Schaefer @ 1998-11-21 23:59 UTC (permalink / raw)
  To: Phil Pennock, Zsh Development Workers

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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: zle vi-mode tilde bug?
  1998-11-21 23:59 ` Bart Schaefer
@ 1998-11-22  3:31   ` Phil Pennock
  1998-11-22  4:10     ` Bart Schaefer
  0 siblings, 1 reply; 4+ messages in thread
From: Phil Pennock @ 1998-11-22  3:31 UTC (permalink / raw)
  To: Zsh Development Workers

On Sat, Nov 21, 1998 at 03:59:06PM -0800, Bart Schaefer wrote:
[vi-oper-swap-case stuff]
> 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.

For the record, both versions of vi that I know of that have tildeop
(nvi and vim) leave the cursor on the first changed character.  This is
consistent with cs=oldcs, just without the vifirstnonblank() :^)

HTH
-- 
--> Phil Pennock ; GAT d- s+:+ a22 C++(++++) UL++++/I+++/S+++/H+ P++@ L+++
E-@ W(+) N>++ o !K w--- O>+ M V !PS PE Y+ PGP+ t-- 5++ X+ R !tv b++>+++ DI+ D+
G+ e+ h* r y?


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: zle vi-mode tilde bug?
  1998-11-22  3:31   ` Phil Pennock
@ 1998-11-22  4:10     ` Bart Schaefer
  0 siblings, 0 replies; 4+ messages in thread
From: Bart Schaefer @ 1998-11-22  4:10 UTC (permalink / raw)
  To: Phil Pennock, Zsh Development Workers

On Nov 22,  3:31am, Phil Pennock wrote:
} Subject: Re: zle vi-mode tilde bug?
}
} For the record, both versions of vi that I know of that have tildeop
} (nvi and vim) leave the cursor on the first changed character.  This is
} consistent with cs=oldcs, just without the vifirstnonblank() :^)

Aha.  I've never used nvi, and I never realized vim had it (and I probably
wouldn't have left it set it if I did realize it, especially with THAT
behavior; vim's other "improvements" on vi's region commands are already
enough to annoy me, though they're not as bad as elvis's.)

Nevertheless, it probably should work like the vi variants that have it.
Please ignore my patch.

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~1998-11-22  4:12 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1998-11-21 21:33 zle vi-mode tilde bug? Phil Pennock
1998-11-21 23:59 ` Bart Schaefer
1998-11-22  3:31   ` Phil Pennock
1998-11-22  4:10     ` Bart Schaefer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).