old-www/HOWTO/BackspaceDelete/why.html

244 lines
4.4 KiB
HTML

<HTML
><HEAD
><TITLE
>Why It Doesn't (Always) Work</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.63
"><LINK
REL="HOME"
TITLE="Linux Backspace/Delete mini-HOWTO"
HREF="index.html"><LINK
REL="PREVIOUS"
TITLE="How Keys Are Turned Into Actions"
HREF="actions.html"><LINK
REL="NEXT"
TITLE="X"
HREF="x.html"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Linux <B
CLASS="KEYCAP"
>Backspace</B
>/<B
CLASS="KEYCAP"
>Delete</B
> mini-HOWTO</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="actions.html"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x.html"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="WHY"
>3. Why It Doesn't (Always) Work</A
></H1
><P
>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 <SPAN
CLASS="ACRONYM"
>ASCII</SPAN
> 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.
</P
><P
>Applications must have a way to know which database entry to use:
this is accomplished by suitably setting the <TT
CLASS="ENVAR"
>TERM</TT
>
environment variable. In some cases, there is a mismatch between the
terminal emulator and the content of the database entry suggested by
<TT
CLASS="ENVAR"
>TERM</TT
>.</P
><P
>Moreover, many applications <EM
>do not use</EM
> the
terminal database (or at least not all of it), and consider
<SPAN
CLASS="SYMBOL"
>BS</SPAN
> and <SPAN
CLASS="SYMBOL"
>DEL</SPAN
> <SPAN
CLASS="ACRONYM"
>ASCII</SPAN
> 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 <SPAN
CLASS="APPLICATION"
>bash</SPAN
> assumes that <SPAN
CLASS="SYMBOL"
>DEL</SPAN
>
should do a <SPAN
CLASS="ACTION"
>backward-delete-char</SPAN
>, that is,
backspace. Hence, on a fresh install the <B
CLASS="KEYCAP"
>Backspace</B
>
key works on the console as expected, but just because of two twists in a
row! Of course, the <B
CLASS="KEYCAP"
>Delete</B
> key does not work. This happens
because the <SPAN
CLASS="APPLICATION"
>bash</SPAN
> does not look into the terminal
database for the <TT
CLASS="LITERAL"
>kdch1</TT
> capability.</P
><P
>Just to illustrate how things have become entangled, consider the
<B
CLASS="COMMAND"
>fix_bs_and_del</B
> script provided with the Red Hat
distribution (and maybe others). It assigns on-the-fly the
<SPAN
CLASS="KEYSYM"
>BackSpace</SPAN
> keysym to the <B
CLASS="KEYCAP"
>Backspace</B
> key,
and the <SPAN
CLASS="KEYSYM"
>Delete</SPAN
> keysym to the <B
CLASS="KEYCAP"
>Delete</B
>
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 <SPAN
CLASS="KEYSYM"
>Delete</SPAN
> keysym is mapped to
<SPAN
CLASS="SYMBOL"
>DEL</SPAN
>, and the latter to the <TT
CLASS="LITERAL"
>kbs</TT
> key
capability by the terminfo database, so in such programs both keys produce
backspacing.</P
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="actions.html"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x.html"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>How Keys Are Turned Into Actions</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>X</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>