Different keymaps (??) on my ttys

walter harms wharms at bfs.de
Mon Dec 3 18:20:27 UTC 2007



Paul Fox wrote:
>  > Alexander Griesser wrote:
>  > > Well, I think I have more details now after my vacation ;)
>  > > It seems as if `login` breaks stuff.
>  > 
>  > Sorry for followin up on my own posting that often, but I think I
>  > found the cause for this now finally. Somewhere down in getty.c
>  > it says:
>  > 
>  > ------------------------ 8< ---------------------
>  > static char *get_logname(char *logname, unsigned size_logname,
>  >         struct options *op, struct chardata *cp, struct termios *tp)
>  > [...]
>  >             case BS:
>  >             case DEL:
>  >             case '#':
>  >                 cp->erase = ascval;     /* set erase character */
>  >                 if (bp > logname) {
>  >                     write(1, erase[cp->parity], 3);
>  >                     bp--;
>  >                 }
>  >                 break;
>  >             case CTL('U'):
>  >             case '@':
>  >                 cp->kill = ascval;      /* set kill character */
>  >                 while (bp > logname) {
>  >                     write(1, erase[cp->parity], 3);
>  >                     bp--;
>  >                 }
>  >                 break;
>  > [...]
>  > ----------------------- 8< -----------------------
>  > 
>  > Which is _EXACTLY_ what I'm experiencing. Is there some reasoning
>  > behind that?
> 
> yes.  it's _very_ historical reasoning, however.
> 
> back in the distant pass, when "glass" terminals were not common,
> the backspace and line-kill characters on unix were '#' and '@'
> by default.  this way if you mistyped a word, you could see your
> corrections on the paper of your terminal:
>     helo#lo
> and if you waxyd to replace@
> and if you wanted to replace a whole line, that was obvious too.
> 
> (this same kind of reasoning is why login will put your terminal into
> upper-case-translation mode if you type all uppercase characters very
> early -- it thinks you're on a terminal that _can't_ do lowercase input.)
> 
> it wasn't until the 80's that the erase/kill characters changed
> to backspace (or DEL, in BSD's case) and ^U by default.
> 
> getting these characters set correctly early is an advantage for
> the user, since otherwise they can't correct their mistakes,
> and since traditional ascii/english usernames did not
> contain the '#' or '@' characters, it was reasonable to set the
> erase and kill characters during the login phase if they were typed,
> since there would be no other reason to type them.
> 
> clearly this code has no place in login or getty in 2007.  (i'm less
> convinced about BS vs. DEL -- that might still be useful.)
> 
> paul

hi paul,
i am unix admin for > 10 years now and i never heard about that. thx.

ntl: can we please disable that stuff ?
like:

#if USE_ANCIENT_KEY_CODE
#define ANCIENT_KEY_CODE_DEL case '#':
#define ANCIENT_KEY_CODE_KILL  case '@':
#endif

I do not like to remove it completely since in some corner cases it may
turnout useful.

re,
 wh



More information about the busybox mailing list