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

Reply via email to