Hello,

does anyone actually use the 'version' keybinding in emacs or vi mode?
I would like to remove it. The command isn't bound to a key per default
and the functionality (and implementation) seems rather odd. The
keybinding is strictly for interactive use, so I don't expect the
removal to break any scripts. The KSH_VERSION environment variable is
still available for interactive and non-interactive use.

See the natano_ksh_noversion branch, or the diff below.

ok?

cheers,
natano


commit 184795a06cee14761ed8ef0d866c5b477b6a9d9f
Author: Martin Natano <[email protected]>
Date:   Thu Mar 19 20:39:49 2015 +0100

    Remove version command from emacs and vi mode.

diff --git a/bin/ksh/emacs.c b/bin/ksh/emacs.c
index 4f83dbe..8dd7c21 100644
--- a/bin/ksh/emacs.c
+++ b/bin/ksh/emacs.c
@@ -176,7 +176,6 @@ static int  x_set_mark(int);
 static int     x_stuff(int);
 static int     x_stuffreset(int);
 static int     x_transpose(int);
-static int     x_version(int);
 static int     x_xchg_point_mark(int);
 static int     x_yank(int);
 static int     x_comp_list(int);
@@ -235,7 +234,6 @@ static const struct x_ftab x_ftab[] = {
        { x_stuff,              "stuff",                        0 },
        { x_stuffreset,         "stuff-reset",                  0 },
        { x_transpose,          "transpose-chars",              0 },
-       { x_version,            "version",                      0 },
        { x_xchg_point_mark,    "exchange-point-and-mark",      0 },
        { x_yank,               "yank",                         0 },
        { x_comp_list,          "complete-list",                0 },
@@ -1576,33 +1574,6 @@ x_xchg_point_mark(int c)
 }
 
 static int
-x_version(int c)
-{
-       char *o_xbuf = xbuf, *o_xend = xend;
-       char *o_xep = xep, *o_xcp = xcp;
-
-       xbuf = xcp = (char *) ksh_version + 4;
-       xend = xep = (char *) ksh_version + 4 + strlen(ksh_version + 4);
-       x_redraw(1);
-       x_flush();
-
-       c = x_e_getc(0);
-       xbuf = o_xbuf;
-       xend = o_xend;
-       xep = o_xep;
-       xcp = o_xcp;
-       x_redraw(1);
-
-       if (c < 0)
-               return KSTD;
-       /* This is what at&t ksh seems to do...  Very bizarre */
-       if (c != ' ')
-               x_e_ungetc(c);
-
-       return KSTD;
-}
-
-static int
 x_noop(int c)
 {
        return KSTD;
diff --git a/bin/ksh/vi.c b/bin/ksh/vi.c
index c325d85..6a37a4e 100644
--- a/bin/ksh/vi.c
+++ b/bin/ksh/vi.c
@@ -138,7 +138,6 @@ const unsigned char classify[128] = {
 #define VREDO          7               /* . */
 #define VLIT           8               /* ^V */
 #define VSEARCH                9               /* /, ? */
-#define VVERSION       10              /* <ESC> ^V */
 
 static char            undocbuf[CMDLEN];
 
@@ -221,7 +220,7 @@ x_vi(char *buf, size_t len)
                                trapsig(c == edchars.intr ? SIGINT : SIGQUIT);
                                x_mode(false);
                                unwind(LSHELL);
-                       } else if (c == edchars.eof && state != VVERSION) {
+                       } else if (c == edchars.eof) {
                                if (es->linelen == 0) {
                                        x_vi_zotc(edchars.eof);
                                        c = -1;
@@ -322,14 +321,6 @@ vi_hook(int ch)
                                                return -1;
                                        refresh(0);
                                }
-                               if (state == VVERSION) {
-                                       save_cbuf();
-                                       es->cursor = 0;
-                                       es->linelen = 0;
-                                       putbuf(ksh_version + 4,
-                                           strlen(ksh_version + 4), 0);
-                                       refresh(0);
-                               }
                        }
                }
                break;
@@ -344,12 +335,6 @@ vi_hook(int ch)
                state = VNORMAL;
                break;
 
-       case VVERSION:
-               restore_cbuf();
-               state = VNORMAL;
-               refresh(0);
-               break;
-
        case VARG1:
                if (isdigit(ch))
                        argc1 = argc1 * 10 + ch - '0';
@@ -571,8 +556,6 @@ nextstate(int ch)
                return VXCH;
        else if (ch == '.')
                return VREDO;
-       else if (ch == Ctrl('v'))
-               return VVERSION;
        else if (is_cmd(ch))
                return VCMD;
        else

Reply via email to