Hi,
While writing tests for the Emacs editing mode in ksh I discovered some
potential errors in the manual:

- Sync the order of key bindings in emacs.c with the manual

- ^W is bound to delete-word-backward and not kill-region which is
  mentioned in emacs.c. I don't know the full history here...

- Add missing '^' in backward-char binding

- The WERASE control character is also bound to delete-word-backward,
  see x_emacs_keys().

- Rephrase delete-word-forward to match the other bindings

- Move kill-region to a separate list of commands without default
  bindings

Comments? OK?

Index: emacs.c
===================================================================
RCS file: /cvs/src/bin/ksh/emacs.c,v
retrieving revision 1.73
diff -u -p -r1.73 emacs.c
--- emacs.c     30 Aug 2017 17:02:53 -0000      1.73
+++ emacs.c     21 Nov 2017 19:28:44 -0000
@@ -1472,6 +1472,7 @@ x_init_emacs(void)
        kb_add(x_del_back,              NULL, CTRL('?'), 0);
        kb_add(x_del_back,              NULL, CTRL('H'), 0);
        kb_add(x_del_char,              NULL, CTRL('['), '[', '3', '~', 0); /* 
delete */
+       kb_add(x_del_bword,             NULL, CTRL('W'), 0);
        kb_add(x_del_bword,             NULL, CTRL('['), CTRL('?'), 0);
        kb_add(x_del_bword,             NULL, CTRL('['), CTRL('H'), 0);
        kb_add(x_del_bword,             NULL, CTRL('['), 'h', 0);
@@ -1493,7 +1494,6 @@ x_init_emacs(void)
        kb_add(x_mv_fword,              NULL, CTRL('['), 'f', 0);
        kb_add(x_goto_hist,             NULL, CTRL('['), 'g', 0);
        /* kill-line */
-       kb_add(x_del_bword,             NULL, CTRL('W'), 0); /* not what man 
says */
        kb_add(x_kill,                  NULL, CTRL('K'), 0);
        kb_add(x_enumerate,             NULL, CTRL('['), '?', 0);
        kb_add(x_list_comm,             NULL, CTRL('X'), '?', 0);
@@ -1505,6 +1505,7 @@ x_init_emacs(void)
        kb_add(x_prev_histword,         NULL, CTRL('['), '.', 0);
        kb_add(x_prev_histword,         NULL, CTRL('['), '_', 0);
        /* how to handle: quote: ^^ */
+       kb_add(x_literal,               NULL, CTRL('^'), 0);
        kb_add(x_draw_line,             NULL, CTRL('L'), 0);
        kb_add(x_search_char_back,      NULL, CTRL('['), CTRL(']'), 0);
        kb_add(x_search_char_forw,      NULL, CTRL(']'), 0);
@@ -1516,7 +1517,6 @@ x_init_emacs(void)
        kb_add(x_fold_upper,            NULL, CTRL('['), 'U', 0);
        kb_add(x_fold_upper,            NULL, CTRL('['), 'u', 0);
        kb_add(x_literal,               NULL, CTRL('V'), 0);
-       kb_add(x_literal,               NULL, CTRL('^'), 0);
        kb_add(x_yank,                  NULL, CTRL('Y'), 0);
        kb_add(x_meta_yank,             NULL, CTRL('['), 'y', 0);
        /* man page ends here */
Index: ksh.1
===================================================================
RCS file: /cvs/src/bin/ksh/ksh.1,v
retrieving revision 1.195
diff -u -p -r1.195 ksh.1
--- ksh.1       30 Aug 2017 17:08:45 -0000      1.195
+++ ksh.1       21 Nov 2017 19:28:45 -0000
@@ -4656,7 +4656,7 @@ Simply causes the character to appear as
 Most ordinary characters are bound to this.
 .It Xo backward-char:
 .Op Ar n
-.No ^B , ^XD
+.No ^B , ^X^D
 .Xc
 Moves the cursor backward
 .Ar n
@@ -4749,7 +4749,7 @@ Deletes
 characters after the cursor.
 .It Xo delete-word-backward:
 .Op Ar n
-.No ERASE , ^[^? , ^[^H , ^[h
+.No WERASE , ^[ERASE , ^W, ^[^? , ^[^H , ^[h
 .Xc
 Deletes
 .Ar n
@@ -4758,9 +4758,9 @@ words before the cursor.
 .Op Ar n
 .No ^[d
 .Xc
-Deletes characters after the cursor up to the end of
+Deletes
 .Ar n
-words.
+words after the cursor.
 .It Xo down-history:
 .Op Ar n
 .No ^N , ^XB
@@ -4830,8 +4830,6 @@ Goes to history number
 .Ar n .
 .It kill-line: KILL
 Deletes the entire input line.
-.It kill-region: ^W
-Deletes the input between the cursor and the mark.
 .It Xo kill-to-eol:
 .Op Ar n
 .No ^K
@@ -4937,6 +4935,14 @@ Inserts the most recently killed text st
 Immediately after a
 .Ic yank ,
 replaces the inserted text string with the next previously killed text string.
+.El
+.Pp
+The following editing commands lack default bindings but can be used with the
+.Ic bind
+command:
+.Bl -tag -width Ds
+.It kill-region
+Deletes the input between the cursor and the mark.
 .El
 .Ss Vi editing mode
 The vi command-line editor in

Reply via email to