NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: bin/44347: sh does not respect editrc
The following reply was made to PR bin/44347; it has been noted by GNATS.
From: Julio Merino <jmmv%NetBSD.org@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc: gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: bin/44347: sh does not respect editrc
Date: Sat, 8 Jan 2011 16:13:45 +0000
On Sat, Jan 8, 2011 at 2:10 PM, David Laight <david%l8s.co.uk@localhost> wrote:
> The following reply was made to PR bin/44347; it has been noted by GNATS.
>
> From: David Laight <david%l8s.co.uk@localhost>
> To: gnats-bugs%NetBSD.org@localhost
> Cc:
> Subject: Re: bin/44347: sh does not respect editrc
> Date: Sat, 8 Jan 2011 14:12:56 +0000
>
> =A0On Sat, Jan 08, 2011 at 09:20:01AM +0000, jmmv%netbsd.org@localhost wrote:
> =A0> >Number: =A0 =A0 =A0 =A0 44347
> =A0> >Category: =A0 =A0 =A0 bin
> =A0> >Synopsis: =A0 =A0 =A0 sh does not respect editrc
> =A0...
> =A0> System: NetBSD blackbird 5.99.43 NetBSD 5.99.43 (GENERIC) #0: Fri Ja=
n =A07 23:25:13 GMT 2011 =A0jmmv@blackbird:/home/jmmv/os/netbsd/obj.i386/ho=
me/jmmv/os/netbsd/src/sys/arch/i386/compile/GENERIC i386
> =A0> Architecture: i386
> =A0> Machine: i386
> =A0> >Description:
> =A0> =A0 =A0 =A0/bin/sh does not respect the editing mode set in ~/.editr=
c (nor it
> =A0> =A0 =A0 =A0does respect whether editing is enabled/disabled at all).
> =A0>
> =A0> =A0 =A0 =A0The problem is that sh will only enable editing if set -V=
or set -E
> =A0> =A0 =A0 =A0are specified, defaulting to editing disabled otherwise.
>
> =A0That is the way it needs to be :-)
> =A0The edit mode for a shell comes from the shells initialisation files.
> =A0I'm not rure how you reconcile this with setup from .editrc, particula=
ry
> =A0since the effect of switching the shell between 'vi' and 'emacs' line
> =A0editing has to work correctly - even though the .editrc mappings can
> =A0only (probably) apply to one of the modes.
I guess it could work like this:
1) sh explicitly disables editing after el_init.
2) sh loads editrc with el_source.
3) If editrc enabled editing and/or set the editing mode explicitly,
sh deduces the initial value of its own vi/emacs variables.
4) If the user specified -V, +V, -E or +E, the libedit state is
modified accordingly.
bash does something similar.
> =A0filename completion is, in patticular, a double edged sword.
> =A0I don't necessarily enable it, I type <tab> chars inside commands and
> =A0filename completetion makes that a PITA (it really ought to be disable=
d
> =A0inside single quotes).
>
> =A0Command name completion is even more problematical, since it causes co=
nfusing
> =A0network delays if any of your path references a network filesystem.
>
> =A0Then we get the versions that use CDPATH when completing for 'cd' - wh=
ich
> =A0is again a pita.
Sure, this is the "normal" behavior of the autocompletion. I am not
saying that tab completion should be enabled by default. I am just
saying that if a user sets whatever binding for ^I they want in
.editrc, sh will silently ignore it.
> =A0> =A0 =A0 =A0In other words: the defaults for the interactive shell sh=
ould be those
> =A0> =A0 =A0 =A0provided by ~/.editrc or, if not present, those built in =
into libedit.
> =A0> =A0 =A0 =A0It is up to the user to later override these values by ei=
ther selecting
> =A0> =A0 =A0 =A0a particular editing mode or disabling it altogether.
>
> =A0The presence of libedit shouldn't affect the shell.
> =A0The shell uses libedit to implement it's own command editing.
So, then, why is sh reading .editrc *at all*? It seems to only cause
problems and getting it to "work right" (whatever that means, as I'm
not even sure) is non-trivial and surely controversial.
--=20
Julio Merino
Home |
Main Index |
Thread Index |
Old Index