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
