zsh-workers
 help / color / mirror / code / Atom feed
* Vi command mode and end-of-line; ZWC('\n') ?
@ 2015-08-23  1:19 Bart Schaefer
  2015-08-24  8:33 ` Peter Stephenson
  0 siblings, 1 reply; 2+ messages in thread
From: Bart Schaefer @ 2015-08-23  1:19 UTC (permalink / raw)
  To: zsh-workers

That thread about end-of-line not working as a "bindkey -a" widget annoys
me for some reason.  I started looking through zle_move.c and discovered
that in a few places we compare

	zleline[zlecs] == ZWC('\n')

but in more places we simply do

	zleline[pos] == '\n'
	zleline[zlecs - 1] != '\n'

There's even one comment about the latter

	/* works OK with combining chars since '\n' must be on its own */

So which is it?  Should we be using ZWC() or not?

Meanwhile, any objection to this?

diff --git a/Src/Zle/zle_move.c b/Src/Zle/zle_move.c
index f49df86..155fda8 100644
--- a/Src/Zle/zle_move.c
+++ b/Src/Zle/zle_move.c
@@ -344,6 +344,8 @@ endofline(char **args)
 	    zlecs = zlell;
 	    return 0;
 	}
+	if ((zlecs += invicmdmode()) == zlell)
+	    break;
 	if (zleline[zlecs] == '\n')
 	    if (++zlecs == zlell)
 		return 0;
@@ -414,6 +416,8 @@ endoflinehist(char **args)
 	    zlecs = zlell;
 	    break;
 	}
+	if ((zlecs += invicmdmode()) == zlell)
+	    break;
 	if (zleline[zlecs] == '\n')
 	    if (++zlecs == zlell)
 		break;


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

* Re: Vi command mode and end-of-line; ZWC('\n') ?
  2015-08-23  1:19 Vi command mode and end-of-line; ZWC('\n') ? Bart Schaefer
@ 2015-08-24  8:33 ` Peter Stephenson
  0 siblings, 0 replies; 2+ messages in thread
From: Peter Stephenson @ 2015-08-24  8:33 UTC (permalink / raw)
  To: zsh-workers

On Sat, 22 Aug 2015 18:19:11 -0700
Bart Schaefer <schaefer@brasslantern.com> wrote:
> That thread about end-of-line not working as a "bindkey -a" widget annoys
> me for some reason.  I started looking through zle_move.c and discovered
> that in a few places we compare
> 
> 	zleline[zlecs] == ZWC('\n')
> 
> but in more places we simply do
> 
> 	zleline[pos] == '\n'
> 	zleline[zlecs - 1] != '\n'
> 
> There's even one comment about the latter
> 
> 	/* works OK with combining chars since '\n' must be on its own */
> 
> So which is it?  Should we be using ZWC() or not?

ZWC is basically a glorified standards-compliant cast --- '\n' is a char
while zleline takes wchar_t.  So the sole effect is to ensure we assign
a wide character. So ideally we should be using it everywhere for
consistency; however, I can't think of a practical effect for a 7-bit
ASCII character on a modern system.

pws


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

end of thread, other threads:[~2015-08-24  8:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-23  1:19 Vi command mode and end-of-line; ZWC('\n') ? Bart Schaefer
2015-08-24  8:33 ` Peter Stephenson

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).