bin/170651: On 9.0-RELEASE#0 and master sh(1) gobbles high bit at first

Steffen "Daode" Nurpmeso sdaoden at
Sun Aug 19 19:08:25 UTC 2012

 |  |>Number:         170651
 |  |>Synopsis:       On 9.0-RELEASE#0 and master sh(1) gobbles high bit at first
 |  |>Confidential:   no no no!
 |  |>Severity:       non-critical
 |  |>Priority:       low
 |  |>Responsible:    freebsd-bugs
 |  |>Arrival-Date:   Wed Aug 15 15:10:09 UTC 2012
 |  |>Release:        9.0-REALEASE, and git master branch
 |  |>Description:
 |  [.]
 |  |If /bin/sh is the login shell, starting it won't allow input of
 |  |german umlauts in ISO8859-15 locale with fonts plus well set up.
 |  |Issue a set with arguments ($set +o, $set -o), and it'll work
 |  |as expected.
 |  [.]
 |  |So it turns out the problem is the histedit() function.
 |  |If it isn't called from within optschanged() then everything is fine.
 |  [.]
 |  |The problem occurs when 'el' must be initialized.  If that actually
 |  |happens (upon sh(1) startup), then it'll change handling of the high
 |  |The only solution i've found is to call histedit() from within main()
 |  |again (or outsource the pure initialization code to histedit_init(),
 |  |but anyway call it once from within main()).
 |  [.]
 | An update: i've compiled the shell again, linked against libedit
 | as of today (master branch, 493ac26f0cdccc, [Add mvts(4) driver
 | for internal thermal sensor.., 2012-08-18]), and the problem
 | persists.  (I'm still using 9.0-RELEASE#0, just in case it's even

Yet another update.
I've #defined DEBUG_READ in libedit and actually found my problem.
The reason why the german umlauts don't appear is that they actually
result in "ed-unassigned" errors because of the input-to-command map.

I'm using multi-platform multi-shell init scripts which i've just
recently updated to be compatible to some pretty ancient
Bourne-compatible shell, and now it turns out that the plain
FreeBSD /bin/sh is classified as "NONE" type at all, so that no
set command is used to configure shell behaviour upon startup.  I
didn't think about this before, hmm.

Anyway, once the login shell starts, it's a vanilla shell, but
with emacs mode enabled, or at least this is what the '$ set -o'
says which then also turns over all the ED_UNASSIGNED to ED_INSERT
commands.  If nobody jumps into this here i'll try to figure out
why, how and where that actually happens and fix it, maybe next week.


More information about the freebsd-bugs mailing list