zsh-workers
 help / color / mirror / code / Atom feed
* vicmd bindings
@ 2000-12-15 22:20 Clint Adams
  2000-12-16 16:20 ` PATCH: " Clint Adams
  2000-12-16 18:08 ` Bart Schaefer
  0 siblings, 2 replies; 9+ messages in thread
From: Clint Adams @ 2000-12-15 22:20 UTC (permalink / raw)
  To: zsh-workers

Any reason that

"j" down-line-or-history
"k" up-line-or-history

aren't vi-down-line-or-history &al. by default?


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

* PATCH: Re: vicmd bindings
  2000-12-15 22:20 vicmd bindings Clint Adams
@ 2000-12-16 16:20 ` Clint Adams
  2000-12-18  0:27   ` Zefram
  2000-12-16 18:08 ` Bart Schaefer
  1 sibling, 1 reply; 9+ messages in thread
From: Clint Adams @ 2000-12-16 16:20 UTC (permalink / raw)
  To: zsh-workers

> Any reason that
> 
> "j" down-line-or-history
> "k" up-line-or-history
> 
> aren't vi-down-line-or-history &al. by default?

I'll commit this patch.  It should be trivial to reverse should
there actually be a reason for the original behavior.

Index: Src/Zle/zle_bindings.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_bindings.c,v
retrieving revision 1.1.1.3
diff -u -r1.1.1.3 zle_bindings.c
--- Src/Zle/zle_bindings.c	1999/12/01 18:36:09	1.1.1.3
+++ Src/Zle/zle_bindings.c	2000/12/16 16:16:30
@@ -396,8 +396,8 @@
     /* g */ z_undefinedkey,
     /* h */ z_vibackwardchar,
     /* i */ z_viinsert,
-    /* j */ z_downlineorhistory,
-    /* k */ z_uplineorhistory,
+    /* j */ z_vidownlineorhistory,
+    /* k */ z_viuplineorhistory,
     /* l */ z_viforwardchar,
     /* m */ z_visetmark,
     /* n */ z_virepeatsearch,
Index: Src/Zle/zle_keymap.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_keymap.c,v
retrieving revision 1.1.1.10
diff -u -r1.1.1.10 zle_keymap.c
--- Src/Zle/zle_keymap.c	1999/12/01 18:36:09	1.1.1.10
+++ Src/Zle/zle_keymap.c	2000/12/16 16:16:30
@@ -1067,12 +1067,12 @@
      * Both standard and keypad modes are supported.                  */
 
     /* vi command mode: arrow keys */
-    bindkey(amap, "\33[A",  refthingy(t_uplineorhistory), NULL);
-    bindkey(amap, "\33[B",  refthingy(t_downlineorhistory), NULL);
+    bindkey(amap, "\33[A",  refthingy(t_viuplineorhistory), NULL);
+    bindkey(amap, "\33[B",  refthingy(t_vidownlineorhistory), NULL);
     bindkey(amap, "\33[C",  refthingy(t_viforwardchar), NULL);
     bindkey(amap, "\33[D",  refthingy(t_vibackwardchar), NULL);
-    bindkey(amap, "\33OA",  refthingy(t_uplineorhistory), NULL);
-    bindkey(amap, "\33OB",  refthingy(t_downlineorhistory), NULL);
+    bindkey(amap, "\33OA",  refthingy(t_viuplineorhistory), NULL);
+    bindkey(amap, "\33OB",  refthingy(t_vidownlineorhistory), NULL);
     bindkey(amap, "\33OC",  refthingy(t_viforwardchar), NULL);
     bindkey(amap, "\33OD",  refthingy(t_vibackwardchar), NULL);
 


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

* Re: vicmd bindings
  2000-12-15 22:20 vicmd bindings Clint Adams
  2000-12-16 16:20 ` PATCH: " Clint Adams
@ 2000-12-16 18:08 ` Bart Schaefer
  2000-12-20  1:57   ` Clint Adams
  1 sibling, 1 reply; 9+ messages in thread
From: Bart Schaefer @ 2000-12-16 18:08 UTC (permalink / raw)
  To: zsh-workers

On Dec 15,  5:20pm, Clint Adams wrote:
}
} Any reason that
} 
} "j" down-line-or-history
} "k" up-line-or-history
} 
} aren't vi-down-line-or-history &al. by default?

The most likely answer is that ksh's vi emulation is imperfect, and zsh
intentionally emulated ksh rather than emulating the real vi.

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

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   


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

* Re: PATCH: Re: vicmd bindings
  2000-12-16 16:20 ` PATCH: " Clint Adams
@ 2000-12-18  0:27   ` Zefram
  2000-12-18 17:02     ` Clint Adams
  0 siblings, 1 reply; 9+ messages in thread
From: Zefram @ 2000-12-18  0:27 UTC (permalink / raw)
  To: Clint Adams; +Cc: zsh-workers

Clint Adams wrote:
>> Any reason that
>> 
>> "j" down-line-or-history
>> "k" up-line-or-history
>> 
>> aren't vi-down-line-or-history &al. by default?

The names are misleading: the vi- versions do something quite
different from the unprefixed versions, it's not just a question
of vi and Emacs doing something differently.  You'll notice that
vi-{up,down}-line-or-history are bound to "-" and "+" by default --
vi has both types of line movement.  (The difference is that the "-"/"+"
versions -- the "vi-"-prefixed widgets -- move the cursor to the beginning
of the target line, rather than leaving it at the same column.)

>I'll commit this patch.  It should be trivial to reverse should
>there actually be a reason for the original behavior.

Your patch is wrong and should be reversed.  (I have bandwidth issues
right now so I can't reverse it myself.)  Without the patch, zle
accurately imitates vi in this respect.

-zefram


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

* Re: PATCH: Re: vicmd bindings
  2000-12-18  0:27   ` Zefram
@ 2000-12-18 17:02     ` Clint Adams
  2000-12-20 18:09       ` Zefram
  0 siblings, 1 reply; 9+ messages in thread
From: Clint Adams @ 2000-12-18 17:02 UTC (permalink / raw)
  To: Zefram; +Cc: zsh-workers

> Your patch is wrong and should be reversed.  (I have bandwidth issues
> right now so I can't reverse it myself.)  Without the patch, zle
> accurately imitates vi in this respect.

It doesn't appear to do so here.  up-line-or-history leaves the cursor
at the end of the line rather than the same column.


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

* Re: vicmd bindings
  2000-12-16 18:08 ` Bart Schaefer
@ 2000-12-20  1:57   ` Clint Adams
  0 siblings, 0 replies; 9+ messages in thread
From: Clint Adams @ 2000-12-20  1:57 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

> The most likely answer is that ksh's vi emulation is imperfect, and zsh
> intentionally emulated ksh rather than emulating the real vi.

I've tried a few kshes and they all behave exactly like bash.
That is, ESC-j and -k move the cursor to the very beginning of
the line.  However, I think that matching vi's behavior would be
more useful, and this patch aims toward that.

Unresolved problems include a poor choice in widget nomenclature
and a failure to keep the value of what cs should be across whatever
it is that determines cursor state boundaries.

I'll leave this uncommitted for a bit.

Index: Src/Zle/iwidgets.list
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/iwidgets.list,v
retrieving revision 1.3
diff -u -r1.3 iwidgets.list
--- Src/Zle/iwidgets.list	2000/04/12 08:24:16	1.3
+++ Src/Zle/iwidgets.list	2000/12/20 01:45:35
@@ -121,6 +121,7 @@
 "vi-delete-char", videletechar, ZLE_KEEPSUFFIX
 "vi-digit-or-beginning-of-line", vidigitorbeginningofline, 0
 "vi-down-line-or-history", vidownlineorhistory, ZLE_LINEMOVE
+"vi-j-down-line-or-history", vijdownlineorhistory, ZLE_LINEMOVE
 "vi-end-of-line", viendofline, ZLE_LASTCOL
 "vi-fetch-history", vifetchhistory, 0
 "vi-find-next-char", vifindnextchar, 0
@@ -166,6 +167,7 @@
 "vi-undo-change", viundochange, ZLE_KEEPSUFFIX
 "vi-unindent", viunindent, 0
 "vi-up-line-or-history", viuplineorhistory, ZLE_LINEMOVE
+"vi-k-up-line-or-history", vikuplineorhistory, ZLE_LINEMOVE
 "vi-yank", viyank, 0
 "vi-yank-eol", viyankeol, 0
 "vi-yank-whole-line", viyankwholeline, 0
Index: Src/Zle/zle_bindings.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_bindings.c,v
retrieving revision 1.3
diff -u -r1.3 zle_bindings.c
--- Src/Zle/zle_bindings.c	2000/12/18 02:14:57	1.3
+++ Src/Zle/zle_bindings.c	2000/12/20 01:46:11
@@ -396,8 +396,8 @@
     /* g */ z_undefinedkey,
     /* h */ z_vibackwardchar,
     /* i */ z_viinsert,
-    /* j */ z_downlineorhistory,
-    /* k */ z_uplineorhistory,
+    /* j */ z_vijdownlineorhistory,
+    /* k */ z_vikuplineorhistory,
     /* l */ z_viforwardchar,
     /* m */ z_visetmark,
     /* n */ z_virepeatsearch,
Index: Src/Zle/zle_hist.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/Zle/zle_hist.c,v
retrieving revision 1.1.1.14
diff -u -r1.1.1.14 zle_hist.c
--- Src/Zle/zle_hist.c	2000/02/23 15:18:49	1.1.1.14
+++ Src/Zle/zle_hist.c	2000/12/20 01:46:14
@@ -142,6 +142,17 @@
 
 /**/
 int
+vikuplineorhistory(char **args)
+{
+    int col = lastcol, oldcs = cs;
+    uplineorhistory(args);
+    lastcol = col;
+    cs = (oldcs > findeol()) ? findeol() : oldcs;
+    return 0;
+}
+
+/**/
+int
 uplineorsearch(char **args)
 {
     int ocs = cs;
@@ -222,6 +233,17 @@
     downlineorhistory(args);
     lastcol = col;
     return vifirstnonblank(zlenoargs);
+}
+
+/**/
+int
+vijdownlineorhistory(char **args)
+{
+    int col = lastcol, oldcs = cs;
+    downlineorhistory(args);
+    lastcol = col;
+    cs = (oldcs > findeol()) ? findeol() : oldcs;
+    return 0;
 }
 
 /**/


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

* Re: PATCH: Re: vicmd bindings
  2000-12-18 17:02     ` Clint Adams
@ 2000-12-20 18:09       ` Zefram
  2000-12-21 13:28         ` Clint Adams
  0 siblings, 1 reply; 9+ messages in thread
From: Zefram @ 2000-12-20 18:09 UTC (permalink / raw)
  To: Clint Adams; +Cc: Zefram, zsh-workers

Clint Adams wrote:
>It doesn't appear to do so here.  up-line-or-history leaves the cursor
>at the end of the line rather than the same column.

up-line-or-history leaves the cursor in the same column, as vi does,
when moving between lines within a single command.  When it moves to
a prior history entry it does move to the end of the line; I'm in two
minds as to whether that should be changed.

-zefram


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

* Re: PATCH: Re: vicmd bindings
  2000-12-20 18:09       ` Zefram
@ 2000-12-21 13:28         ` Clint Adams
  2000-12-22 19:27           ` Zefram
  0 siblings, 1 reply; 9+ messages in thread
From: Clint Adams @ 2000-12-21 13:28 UTC (permalink / raw)
  To: Zefram; +Cc: zsh-workers

> up-line-or-history leaves the cursor in the same column, as vi does,
> when moving between lines within a single command.  When it moves to
> a prior history entry it does move to the end of the line; I'm in two
> minds as to whether that should be changed.

Based on what factors?


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

* Re: PATCH: Re: vicmd bindings
  2000-12-21 13:28         ` Clint Adams
@ 2000-12-22 19:27           ` Zefram
  0 siblings, 0 replies; 9+ messages in thread
From: Zefram @ 2000-12-22 19:27 UTC (permalink / raw)
  To: Clint Adams; +Cc: Zefram, zsh-workers

Clint Adams wrote:
>Based on what factors?

It seems vaguely sensible to move to the end of the line when going to
an separate history entry, which is effectively a new file to edit.
However, on reflection I've decided that it makes more sense for the
`-line-or-history' commands to place the cursor on the target line in
a consistent manner.

-zefram


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

end of thread, other threads:[~2000-12-22 19:28 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2000-12-15 22:20 vicmd bindings Clint Adams
2000-12-16 16:20 ` PATCH: " Clint Adams
2000-12-18  0:27   ` Zefram
2000-12-18 17:02     ` Clint Adams
2000-12-20 18:09       ` Zefram
2000-12-21 13:28         ` Clint Adams
2000-12-22 19:27           ` Zefram
2000-12-16 18:08 ` Bart Schaefer
2000-12-20  1:57   ` Clint Adams

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