I hope the basic problem is clear at this point: there is a bottleneck between the keyboard and console applications, that is, the fact that they can only communicate by ASCII sequences. So special keys must be first translated from keysyms to sequences, and then from sequences to key capabilities. Since different consoles have different ideas about what this translation can look like, we need a terminal database. The system would work flawlessly, except for a small problem: it is not always set up correctly, and not everyone uses it.
Applications must have a way to know which database entry to use:
this is accomplished by suitably setting the TERM
environment variable. In some cases, there is a mismatch between the
terminal emulator and the content of the database entry suggested by
TERM
.
Moreover, many applications do not use the
terminal database (or at least not all of it), and consider
BS
and DEL
ASCII codes
with an intended meaning: thus, without looking at the database, they
assign them semantics (usually, of course, the semantics is removing the
character before or under the cursor). So now our beautiful scheme is
completely broken (as every Linux user is bitterly aware). For instance,
the bash assumes that DEL
should do a backward-delete-char, that is,
backspace. Hence, on a fresh install the Backspace
key works on the console as expected, but just because of two twists in a
row! Of course, the Delete key does not work. This happens
because the bash does not look into the terminal
database for the kdch1 capability.
Just to illustrate how things have become entangled, consider the
fix_bs_and_del script provided with the Red Hat
distribution (and maybe others). It assigns on-the-fly the
BackSpace keysym to the Backspace key,
and the Delete keysym to the Delete
key. Now the shell works! Unfortunately, all programs relying on the
correct coupling of keysym generation and terminal database mappings are
now not working at all, as the Delete keysym is mapped to
DEL
, and the latter to the kbs key
capability by the terminfo database, so in such programs both keys produce
backspacing.