to be clear, this doesn't change anything unless the optional new variable is set. users who are happy with the current behaviour should just leave things as they are.
On 2012-03-12, Stuart Henderson <s...@spacehopper.org> wrote: > On 2012-03-11, Tobias Ulmer <tobi...@tmux.org> wrote: >> On Sun, Mar 11, 2012 at 02:43:42PM -0500, Chris Bennett wrote: >>> This started for me a while back. >>> Login as root, I can repeat older commands with up down arrows. >>> History command shows history. >>> >>> su -l otheruser >>> >>> Cannot use up down arrows to access history. >>> History command shows correct history. >> >> You most likely set EDITOR to something containing "vi". ksh parses that >> and switches to vi mode. IMO it's a disgusting "feature", but that >> appears to be just me. >> >> set -o emacs >> set +o vi > > I've wasted countless time because of this "feature", it's probably > my no.1 annoyance with the OS. It used to be possible to set this > in a file sourced via ENV so it could be applied automatically, > but sudo now (rightly) prohibits passing this variable. > > After using stupid things like EDITOR=/usr/bin/emacs-not-really > symlinked to vi for a while on some machines, I came up with this > approach instead. Does anyone else think this is worth the extra > bytes? > > Index: bin/ksh/ksh.1 >=================================================================== > RCS file: /cvs/src/bin/ksh/ksh.1,v > retrieving revision 1.141 > diff -u -p -r1.141 ksh.1 > --- bin/ksh/ksh.1 3 Sep 2011 22:59:08 -0000 1.141 > +++ bin/ksh/ksh.1 12 Mar 2012 09:37:28 -0000 > @@ -1362,14 +1362,36 @@ This parameter is used by the interactiv > and > .Ic kill -l > commands to format information columns. > +.It Ev EDITMODE > +If set, this parameter controls the command-line editing mode for interactive > +shells. > +If the last component of the path specified in this parameter contains > +the string > +.Dq vi , > +.Dq emacs , > +or > +.Dq gmacs , > +the > +.Xr vi , > +.Xr emacs , > +or > +.Xr gmacs > +(Gosling emacs) editing mode is enabled, respectively. > +Also see the > +.Ev EDITOR > +and > +.Ev VISUAL > +parameters below. > .It Ev EDITOR > If the > .Ev VISUAL > -parameter is not set, this parameter controls the command-line editing mode > for > -interactive shells. > +and > +.Ev EDITMODE > +parameters are not set, this parameter controls the command-line editing mode > +for interactive shells. > See the > -.Ev VISUAL > -parameter below for how this works. > +.Ev EDITMODE > +parameter above for how this works. > .Pp > Note: > traditionally, > @@ -1381,8 +1403,9 @@ and > was used to specify a (new-style) screen editor, such as > .Xr vi 1 . > Hence if > -.Ev VISUAL > -is set, it overrides > +.Ev VISUAL or > +.Ev EDITMODE > +are set, they override > .Ev EDITOR . > .It Ev ENV > If this parameter is found to be set after any profile files are executed, > the > @@ -1745,23 +1768,13 @@ set, or does not contain the absolute pa > files are created in > .Pa /tmp . > .It Ev VISUAL > -If set, this parameter controls the command-line editing mode for interactive > -shells. > -If the last component of the path specified in this parameter contains > -the string > -.Dq vi , > -.Dq emacs , > -or > -.Dq gmacs , > -the > -.Xr vi , > -.Xr emacs , > -or > -.Xr gmacs > -(Gosling emacs) editing mode is enabled, respectively. > -See also the > -.Ev EDITOR > -parameter, above. > +If the > +.Ev EDITMODE > +parameter is not set, this parameter controls the command-line editing mode > +for interactive shells. > +See the > +.Ev EDITMODE > +parameter above for how this works. > .El > .Ss Tilde expansion > Tilde expansion, which is done in parallel with parameter substitution, is > done > Index: bin/ksh/table.h >=================================================================== > RCS file: /cvs/src/bin/ksh/table.h,v > retrieving revision 1.8 > diff -u -p -r1.8 table.h > --- bin/ksh/table.h 19 Feb 2012 07:52:30 -0000 1.8 > +++ bin/ksh/table.h 12 Mar 2012 09:37:28 -0000 > @@ -170,6 +170,7 @@ extern const struct builtin shbuiltins [ > #define V_TMOUT 15 > #define V_TMPDIR 16 > #define V_LINENO 17 > +#define V_EDITMODE 18 > > /* values for set_prompt() */ > #define PS1 0 /* command */ > Index: bin/ksh/var.c >=================================================================== > RCS file: /cvs/src/bin/ksh/var.c,v > retrieving revision 1.34 > diff -u -p -r1.34 var.c > --- bin/ksh/var.c 15 Oct 2007 02:16:35 -0000 1.34 > +++ bin/ksh/var.c 12 Mar 2012 09:37:28 -0000 > @@ -96,6 +96,7 @@ initvar(void) > { "HISTSIZE", V_HISTSIZE }, > #endif /* HISTORY */ > #ifdef EDIT > + { "EDITMODE", V_EDITMODE }, > { "EDITOR", V_EDITOR }, > { "VISUAL", V_VISUAL }, > #endif /* EDIT */ > @@ -1004,11 +1005,16 @@ setspec(struct tbl *vp) > break; > #endif /* HISTORY */ > #ifdef EDIT > - case V_VISUAL: > + case V_EDITMODE: > set_editmode(str_val(vp)); > break; > + case V_VISUAL: > + if (!(global("EDITMODE")->flag & ISSET)) > + set_editmode(str_val(vp)); > + break; > case V_EDITOR: > - if (!(global("VISUAL")->flag & ISSET)) > + if ((!(global("EDITMODE")->flag & ISSET)) && > + (!(global("VISUAL")->flag & ISSET))) > set_editmode(str_val(vp)); > break; > case V_COLUMNS: > Index: usr.bin/sudo/sudoers >=================================================================== > RCS file: /cvs/src/usr.bin/sudo/sudoers,v > retrieving revision 1.25 > diff -u -p -r1.25 sudoers > --- usr.bin/sudo/sudoers 26 Oct 2009 19:28:26 -0000 1.25 > +++ usr.bin/sudo/sudoers 12 Mar 2012 09:37:28 -0000 > @@ -16,11 +16,11 @@ > # Cmnd alias specification > > # Defaults specification > -Defaults env_keep +="DESTDIR DISTDIR EDITOR FETCH_CMD FLAVOR FTPMODE GROUP > MAKE" > -Defaults env_keep +="MAKECONF MULTI_PACKAGES NOMAN OKAY_FILES OWNER > PKG_CACHE" > -Defaults env_keep +="PKG_DBDIR PKG_DESTDIR PKG_PATH PKG_TMPDIR PORTSDIR" > -Defaults env_keep +="RELEASEDIR SHARED_ONLY SSH_AUTH_SOCK SUBPACKAGE VISUAL" > -Defaults env_keep +="WRKOBJDIR" > +Defaults env_keep +="DESTDIR DISTDIR EDITOR EDITMODE FETCH_CMD FLAVOR > FTPMODE" > +Defaults env_keep +="GROUP MAKE MAKECONF MULTI_PACKAGES NOMAN OKAY_FILES > OWNER" > +Defaults env_keep +="PKG_CACHE PKG_DBDIR PKG_DESTDIR PKG_PATH PKG_TMPDIR" > +Defaults env_keep +="PORTSDIR RELEASEDIR SHARED_ONLY SSH_AUTH_SOCK" > +Defaults env_keep +="SUBPACKAGE VISUAL WRKOBJDIR" > > # Uncomment to disable the lecture the first time you run sudo > #Defaults !lecture