On 6/06/2018, at 10:20 AM, Alexander Hall wrote:
> This adds a "clear-screen" editing command to the emacs editing mode. > This is the same name as bash and zsh uses, and then I stopped looking. > > Thoughts? OK? It's unclear to me what need is being being addressed here --- are you wanting a way to quickly hide sensitive info typed by mistake at a commandline? ^Cclear^M is available, of course, or ^A^K, or the "bind -m '^L'=^Uclear'^J^Y'" that benno@ mentioned. On the console, one can switch VT. I suppose some window managers offer short-cuts to "lock screen", or can switch virtual desktops, or minimise the window. Yes, I could see how the patch might be warranted if this occured frequently, but how often do you find yourself needing it? Often enough to be annoyed by the side-effects you mentioned of benno's key binding? It seems to me this patch would make ksh into a screen-orientated shell for the sake of reimplementing a rarely-used shortcut. best, Richard. > > > /Alexander > > > Index: emacs.c > =================================================================== > RCS file: /cvs/src/bin/ksh/emacs.c,v > retrieving revision 1.84 > diff -u -p -r1.84 emacs.c > --- emacs.c 16 Jan 2018 17:17:18 -0000 1.84 > +++ emacs.c 5 Jun 2018 22:03:49 -0000 > @@ -146,6 +146,7 @@ static int isu8cont(unsigned char); > /* proto's for keybindings */ > static int x_abort(int); > static int x_beg_hist(int); > +static int x_clear_screen(int); > static int x_comp_comm(int); > static int x_comp_file(int); > static int x_complete(int); > @@ -202,6 +203,7 @@ static int x_debug_info(int); > static const struct x_ftab x_ftab[] = { > { x_abort, "abort", 0 }, > { x_beg_hist, "beginning-of-history", 0 }, > + { x_clear_screen, "clear-screen", 0 }, > { x_comp_comm, "complete-command", 0 }, > { x_comp_file, "complete-file", 0 }, > { x_complete, "complete", 0 }, > @@ -1004,12 +1006,19 @@ x_draw_line(int c) > { > x_redraw(-1); > return KSTD; > +} > > +static int > +x_clear_screen(int c) > +{ > + x_redraw(-2); > + return KSTD; > } > > -/* Redraw (part of) the line. If limit is < 0, the everything is redrawn > - * on a NEW line, otherwise limit is the screen column up to which needs > - * redrawing. > +/* Redraw (part of) the line. > + * A non-negative limit is the screen column up to which needs > + * redrawing. A limit of -1 redraws on a new line, while a limit > + * of -2 (attempts to) clear the screen. > */ > static void > x_redraw(int limit) > @@ -1018,9 +1027,15 @@ x_redraw(int limit) > char *cp; > > x_adj_ok = 0; > - if (limit == -1) > + if (limit == -2) { > + char *clearstr = str_val(global("CLEARSTR")); > + if (clearstr == null) > + clearstr = "\033[H\033[J"; > + x_e_puts(clearstr); > + } > + else if (limit == -1) > x_e_putc('\n'); > - else > + else if (limit >= 0) > x_e_putc('\r'); > x_flush(); > if (xbp == xbuf) { > Index: ksh.1 > =================================================================== > RCS file: /cvs/src/bin/ksh/ksh.1,v > retrieving revision 1.200 > diff -u -p -r1.200 ksh.1 > --- ksh.1 30 May 2018 21:20:52 -0000 1.200 > +++ ksh.1 5 Jun 2018 22:03:49 -0000 > @@ -1345,6 +1345,8 @@ Also, the > .Ic cd > built-in command will display the resulting directory when a match is found > in any search path other than the empty path. > +.It Ev CLEARSTR > +If set, overrides the default escape sequence to clear the screen. > .It Ev COLUMNS > Set to the number of columns on the terminal or window. > Currently set to the > @@ -4690,6 +4692,12 @@ Moves the cursor to the beginning of the > Uppercase the first character in the next > .Ar n > words, leaving the cursor past the end of the last word. > +.It clear-screen: > +Clears the screen and redraws the prompt and current input line. > +If the > +.Ev CLEARSTR > +parameter is set, it is used to clear the screen. > +Otherwise, a default escape sequence (^[[H^[2J) is used. > .It comment: ^[# > If the current line does not begin with a comment character, one is added at > the beginning of the line and the line is entered (as if return had been >