959 lines
16 KiB
HTML
959 lines
16 KiB
HTML
|
<HTML
|
||
|
><HEAD
|
||
|
><TITLE
|
||
|
>What You Should Do On Your System</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="What You Should Do When Writing Applications"
|
||
|
HREF="writing.html"><LINK
|
||
|
REL="NEXT"
|
||
|
TITLE="What If Nothing Works"
|
||
|
HREF="notwork.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="writing.html"
|
||
|
>Prev</A
|
||
|
></TD
|
||
|
><TD
|
||
|
WIDTH="80%"
|
||
|
ALIGN="center"
|
||
|
VALIGN="bottom"
|
||
|
></TD
|
||
|
><TD
|
||
|
WIDTH="10%"
|
||
|
ALIGN="right"
|
||
|
VALIGN="bottom"
|
||
|
><A
|
||
|
HREF="notwork.html"
|
||
|
>Next</A
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
><HR
|
||
|
ALIGN="LEFT"
|
||
|
WIDTH="100%"></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT1"
|
||
|
><H1
|
||
|
CLASS="SECT1"
|
||
|
><A
|
||
|
NAME="SYSTEM"
|
||
|
>6. What You Should Do On Your System</A
|
||
|
></H1
|
||
|
><P
|
||
|
>Note again that the main issue that confuses people trying to fix
|
||
|
their system is that usually they are fixing thing in the wrong
|
||
|
place. Since the parts that work often just work by chance, trying to fix
|
||
|
the system assuming something is broken will often lead to change correct
|
||
|
settings into incorrect settings.</P
|
||
|
><DIV
|
||
|
CLASS="SECT2"
|
||
|
><H2
|
||
|
CLASS="SECT2"
|
||
|
><A
|
||
|
NAME="AEN209"
|
||
|
>6.1. What Needs to Be Done</A
|
||
|
></H2
|
||
|
><DIV
|
||
|
CLASS="SECT3"
|
||
|
><H3
|
||
|
CLASS="SECT3"
|
||
|
><A
|
||
|
NAME="DEVIANCE"
|
||
|
>6.1.1. Detecting Deviance</A
|
||
|
></H3
|
||
|
><P
|
||
|
>The first step towards a clean solution is to know exactly which
|
||
|
terminals are deviant and which not. Usually they all behave like the
|
||
|
console, and in this case the modifications to get everything working
|
||
|
are minimal. If, however, you have some deviant terminal (e.g., a
|
||
|
deviant version of <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
>), you will
|
||
|
have to treat it in a special way.</P
|
||
|
><P
|
||
|
>The following C one-liner
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> void main(void) {int c; while(c = getchar()) printf("%d 0x%02X\n", c, c);}</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
may help you. Put the line into a file named <TT
|
||
|
CLASS="FILENAME"
|
||
|
>ascii.c</TT
|
||
|
>,
|
||
|
compile it with <B
|
||
|
CLASS="COMMAND"
|
||
|
>gcc ascii.c -o ascii</B
|
||
|
>, type
|
||
|
<B
|
||
|
CLASS="COMMAND"
|
||
|
>./ascii</B
|
||
|
> and press a key followed by <B
|
||
|
CLASS="KEYCAP"
|
||
|
>RETURN</B
|
||
|
>.
|
||
|
The program will display the decimal and hexadecimal codes of the
|
||
|
<SPAN
|
||
|
CLASS="ACRONYM"
|
||
|
>ASCII</SPAN
|
||
|
> sequence produced (you may want to do a <B
|
||
|
CLASS="COMMAND"
|
||
|
>stty
|
||
|
erase ^-</B
|
||
|
> first to get really all the codes). Now you can easily see
|
||
|
what <B
|
||
|
CLASS="KEYCAP"
|
||
|
>Backspace</B
|
||
|
> key does: if it emits a <SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>DEL</SPAN
|
||
|
>
|
||
|
(127), you have a standard emulator, if it emits a <SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>BS</SPAN
|
||
|
> (8) you have
|
||
|
a deviant one.</P
|
||
|
></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT3"
|
||
|
><H3
|
||
|
CLASS="SECT3"
|
||
|
><A
|
||
|
NAME="AEN226"
|
||
|
>6.1.2. Distinguishing Between Emulators</A
|
||
|
></H3
|
||
|
><P
|
||
|
>If you have some deviant terminal emulator, you must distinguish
|
||
|
it from the standard ones. Theoretically, this should not be a problem
|
||
|
because there are different entries in the terminal database for
|
||
|
terminals with different sequences (the entry used depends on the value
|
||
|
of the <TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable).</P
|
||
|
><P
|
||
|
>Here we take the approach that the <TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome</TT
|
||
|
> entry
|
||
|
should be used for all deviant VT100 emulators, and the
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>xterm</TT
|
||
|
> entry for the standard ones. This is in line
|
||
|
with several distributions (except a few cases like RedHat ≤5.0,
|
||
|
where the <TT
|
||
|
CLASS="LITERAL"
|
||
|
>xterm</TT
|
||
|
> entry is deviant).</P
|
||
|
><P
|
||
|
>However, <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> uses by
|
||
|
default the same entry as <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>xterm</SPAN
|
||
|
>, so if one
|
||
|
is deviant and the other one is not you will need to find a way to tell
|
||
|
them apart. The option <TT
|
||
|
CLASS="LITERAL"
|
||
|
>termname</TT
|
||
|
> of
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> allows the user to set the
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable to a more sensible name. However, in older
|
||
|
versions of <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> the option does
|
||
|
not work. Moreover, sometimes it is not easy to modify the way
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> is started.</P
|
||
|
><P
|
||
|
>A good idea here is to exploit the fact that
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> sets the
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>COLORTERM</TT
|
||
|
> variable to
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome-terminal</TT
|
||
|
>. Thus, by adding a simple test to the
|
||
|
shell configuration files we can fix the <TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
>
|
||
|
variable.</P
|
||
|
></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT3"
|
||
|
><H3
|
||
|
CLASS="SECT3"
|
||
|
><A
|
||
|
NAME="AEN247"
|
||
|
>6.1.3. Fixing the Terminal Database</A
|
||
|
></H3
|
||
|
><P
|
||
|
>Our problem now is that the terminal database could lack a
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome</TT
|
||
|
> entry for deviant terminals (this happens on a
|
||
|
number of <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>termcap</SPAN
|
||
|
> and
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>terminfo</SPAN
|
||
|
> versions). Recent
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>terminfo</SPAN
|
||
|
> databases have an entry
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome</TT
|
||
|
>, but, in any case, since
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> behaves essentially like
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>xterm</SPAN
|
||
|
> modulo our famous two keys, it is
|
||
|
possible to automagically generate a brand new correct entry.</P
|
||
|
></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT3"
|
||
|
><H3
|
||
|
CLASS="SECT3"
|
||
|
><A
|
||
|
NAME="AEN257"
|
||
|
>6.1.4. Fixing the Shell Behaviour</A
|
||
|
></H3
|
||
|
><P
|
||
|
>The <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>readline</SPAN
|
||
|
> library used by the
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>bash</SPAN
|
||
|
> and by many other programs to read the
|
||
|
input line can be customized so to recognize specific sequences of
|
||
|
characters. The customization can also depend on the
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable, so once we can distinguish terminals we
|
||
|
can do fine tuning of the keyboard.</P
|
||
|
><P
|
||
|
>Moreover, if you want <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>less</SPAN
|
||
|
> and other
|
||
|
application that do raw line input to work correctly, you must convince
|
||
|
the shell that under a deviant terminal emulator the erase character is
|
||
|
<SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>BS</SPAN
|
||
|
>, and not <SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>DEL</SPAN
|
||
|
> (in the other case
|
||
|
the <B
|
||
|
CLASS="KEYCAP"
|
||
|
>Backspace</B
|
||
|
> key is already emitting
|
||
|
<SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>DEL</SPAN
|
||
|
>, so we do not have to do anything). This can be
|
||
|
done using the command <B
|
||
|
CLASS="COMMAND"
|
||
|
>stty</B
|
||
|
>.</P
|
||
|
></DIV
|
||
|
></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT2"
|
||
|
><H2
|
||
|
CLASS="SECT2"
|
||
|
><A
|
||
|
NAME="AEN270"
|
||
|
>6.2. How to Do It</A
|
||
|
></H2
|
||
|
><DIV
|
||
|
CLASS="CAUTION"
|
||
|
><P
|
||
|
></P
|
||
|
><TABLE
|
||
|
CLASS="CAUTION"
|
||
|
WIDTH="100%"
|
||
|
BORDER="0"
|
||
|
><TR
|
||
|
><TD
|
||
|
WIDTH="25"
|
||
|
ALIGN="CENTER"
|
||
|
VALIGN="TOP"
|
||
|
><IMG
|
||
|
SRC="../images/caution.gif"
|
||
|
HSPACE="5"
|
||
|
ALT="Caution"></TD
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
><P
|
||
|
>These fixes have some drawbacks. First, they work only for the
|
||
|
specified terminals. Second, in theory (but this is unlikely to happen)
|
||
|
they could confuse the <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>readline</SPAN
|
||
|
> library on
|
||
|
other terminals. Both limitations are however mostly harmless.</P
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
></DIV
|
||
|
><P
|
||
|
>First of all, check with <B
|
||
|
CLASS="COMMAND"
|
||
|
>infocmp gnome</B
|
||
|
>
|
||
|
whether you already have a <TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome</TT
|
||
|
> entry in your
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>terminfo</SPAN
|
||
|
> database (we will fix
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>termcap</SPAN
|
||
|
> later). If the entry does not exist,
|
||
|
the following command
|
||
|
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> bash$ tic <(infocmp xterm |\
|
||
|
sed 's/xterm|/gnome|/' |\
|
||
|
sed 's/kbs=\\177,/kbs=^H,/' |\
|
||
|
sed 's/kdch1=\\E\[3~,/kdch1=\\177,/')</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
|
||
|
will create a correct one in <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.terminfo</TT
|
||
|
>. If the same
|
||
|
command is launched by the root, it will generate the entry in the global
|
||
|
database (you can override this behaviour by setting <TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERMINFO</TT
|
||
|
> to
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.terminfo</TT
|
||
|
>). Note that if your <TT
|
||
|
CLASS="LITERAL"
|
||
|
>xterm</TT
|
||
|
>
|
||
|
entry is already deviant (e.g., you have a Red Hat ≤5.0) the script will copy it unchanged, which is
|
||
|
exactly what we want.</P
|
||
|
><P
|
||
|
>Now, add the following snippet to
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.inputrc</TT
|
||
|
><A
|
||
|
NAME="ADDINPUTRC"
|
||
|
HREF="#FTN.ADDINPUTRC"
|
||
|
>[1]</A
|
||
|
>:
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> "\e[3~": delete-char</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
This line teaches the <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>readline</SPAN
|
||
|
> library how to
|
||
|
manage your standard <B
|
||
|
CLASS="KEYCAP"
|
||
|
>Delete</B
|
||
|
> key for standard emulators,
|
||
|
and with a bit of luck it should not interfere with other
|
||
|
terminals. However, now we must also explain to the library the meaning
|
||
|
of the <SPAN
|
||
|
CLASS="SYMBOL"
|
||
|
>DEL</SPAN
|
||
|
> character on deviant terminals, for instance
|
||
|
by adding
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> $if term=gnome
|
||
|
DEL: delete-char
|
||
|
Meta-DEL: kill-word
|
||
|
"\M-\C-?": kill-word
|
||
|
$endif</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
to <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.inputrc</TT
|
||
|
>. If <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>xterm</SPAN
|
||
|
>
|
||
|
is deviant, too, you must add other three lines for it. On the other
|
||
|
hand, if no terminal emulator is deviant this part is not needed. All
|
||
|
these changes can be made global by altering the
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>/etc/inputrc</TT
|
||
|
> file.</P
|
||
|
><P
|
||
|
>Note that the conditional assignments make deviant terminal
|
||
|
emulators work <EM
|
||
|
>given that the <TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable is
|
||
|
set correctly</EM
|
||
|
>. To guarantee this, there are a number of
|
||
|
techniques. First of all, since the default value of the
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable for
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> is <TT
|
||
|
CLASS="LITERAL"
|
||
|
>xterm</TT
|
||
|
>, if
|
||
|
all terminals are not deviant then we do nothing. If, however, a terminal
|
||
|
that by default uses the <TT
|
||
|
CLASS="LITERAL"
|
||
|
>xterm</TT
|
||
|
> entry is deviant you
|
||
|
must find a way to set the <TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable correctly; assume
|
||
|
for instance this is true of
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
>.</P
|
||
|
><P
|
||
|
>The simplest way to obtain this effect is to start
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> with the argument
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>--termname=gnome</TT
|
||
|
>, for instance by suitably setting the
|
||
|
command line in the launcher on the <SPAN
|
||
|
CLASS="ACRONYM"
|
||
|
>GNOME</SPAN
|
||
|
> panel. If
|
||
|
however you have an old version, and this method does not work, you can
|
||
|
add the lines
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> if [ "$COLORTERM" = "gnome-terminal" ]
|
||
|
then
|
||
|
export TERM=gnome
|
||
|
fi</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
to your <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.bashrc</TT
|
||
|
> configuration file<A
|
||
|
NAME="AEN316"
|
||
|
HREF="#FTN.AEN316"
|
||
|
>[2]</A
|
||
|
>. The assignment is executed
|
||
|
only under <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
>, and sets correctly the
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>TERM</TT
|
||
|
> variable.</P
|
||
|
><DIV
|
||
|
CLASS="NOTE"
|
||
|
><P
|
||
|
></P
|
||
|
><TABLE
|
||
|
CLASS="NOTE"
|
||
|
WIDTH="100%"
|
||
|
BORDER="0"
|
||
|
><TR
|
||
|
><TD
|
||
|
WIDTH="25"
|
||
|
ALIGN="CENTER"
|
||
|
VALIGN="TOP"
|
||
|
><IMG
|
||
|
SRC="../images/note.gif"
|
||
|
HSPACE="5"
|
||
|
ALT="Note"></TD
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
><P
|
||
|
>Setting the terminal to <TT
|
||
|
CLASS="LITERAL"
|
||
|
>gnome</TT
|
||
|
> could prevent
|
||
|
<B
|
||
|
CLASS="COMMAND"
|
||
|
>ls</B
|
||
|
> from using colours, as many versions of
|
||
|
<B
|
||
|
CLASS="COMMAND"
|
||
|
>ls</B
|
||
|
> do not know that
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>gnome-terminal</SPAN
|
||
|
> is colour capable. To avoid this
|
||
|
problem, create a configuration file <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.dircolors</TT
|
||
|
> with
|
||
|
<B
|
||
|
CLASS="COMMAND"
|
||
|
>dircolors --print-database >~/.dircolors</B
|
||
|
>, and add a line
|
||
|
<TT
|
||
|
CLASS="USERINPUT"
|
||
|
><B
|
||
|
>TERM=gnome</B
|
||
|
></TT
|
||
|
> to the configuration file.</P
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
></DIV
|
||
|
><P
|
||
|
>We will now generate on-the-fly a suitable
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>termcap</SPAN
|
||
|
> entry for deviant terminal emulators; this
|
||
|
can be done as follows, always in <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.bashrc</TT
|
||
|
>:
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> if [ "$TERM" = "gnome" ]
|
||
|
then
|
||
|
export TERMCAP=$(infocmp -C gnome | grep -v '^#' | \
|
||
|
tr '\n\t' ' ' | sed 's/\\ //g' | sed s/::/:/g)
|
||
|
fi</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
></P
|
||
|
><P
|
||
|
>Finally, we must explain to the terminal device which character is
|
||
|
generated by the erase key. Since usually the erase key is expected to
|
||
|
backspace, there is a nice trick taken from the Red Hat
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>/etc/bashrc</TT
|
||
|
> that works: add this to
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.bashrc</TT
|
||
|
>:
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> KBS=$(tput kbs)
|
||
|
if [ ${#KBS} -eq 1 ]; then stty erase $KBS; fi</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
It's a simple idea: we read from the terminal database the capability
|
||
|
<TT
|
||
|
CLASS="LITERAL"
|
||
|
>kbs</TT
|
||
|
>, and set the erase character to its value if it is a
|
||
|
single character (which happens in both standard and deviant terminals).</P
|
||
|
><DIV
|
||
|
CLASS="NOTE"
|
||
|
><P
|
||
|
></P
|
||
|
><TABLE
|
||
|
CLASS="NOTE"
|
||
|
WIDTH="100%"
|
||
|
BORDER="0"
|
||
|
><TR
|
||
|
><TD
|
||
|
WIDTH="25"
|
||
|
ALIGN="CENTER"
|
||
|
VALIGN="TOP"
|
||
|
><IMG
|
||
|
SRC="../images/note.gif"
|
||
|
HSPACE="5"
|
||
|
ALT="Note"></TD
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
><P
|
||
|
>Certain distributions could have fixes already in place in the
|
||
|
system-wide <TT
|
||
|
CLASS="FILENAME"
|
||
|
>/etc/inputrc</TT
|
||
|
> configuration file. In
|
||
|
this case you can eliminate redundant lines from your
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.inputrc</TT
|
||
|
>.</P
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
></DIV
|
||
|
></DIV
|
||
|
><DIV
|
||
|
CLASS="SECT2"
|
||
|
><H2
|
||
|
CLASS="SECT2"
|
||
|
><A
|
||
|
NAME="AEN343"
|
||
|
>6.3. Fixing for <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>tcsh</SPAN
|
||
|
></A
|
||
|
></H2
|
||
|
><P
|
||
|
>In the case of the <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>tcsh</SPAN
|
||
|
>, the fixes go
|
||
|
all in <TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.tcshrc</TT
|
||
|
>, and follow the same rationale as the ones for the
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>bash</SPAN
|
||
|
>:
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> bindkey "^[[3~" delete-char
|
||
|
|
||
|
if ($?COLORTERM) then
|
||
|
if ($COLORTERM == "gnome-terminal") then
|
||
|
setenv TERM gnome
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
if ($?TERM) then
|
||
|
if ($TERM == "gnome") then
|
||
|
setenv TERMCAP \
|
||
|
"`infocmp -C gnome | grep -v '^#' | tr '\n\t' ' ' | sed 's/\\ //g' | sed s/::/:/g`"
|
||
|
bindkey "^?" delete-char
|
||
|
bindkey "^[^?" delete-word
|
||
|
bindkey "\377" delete-word
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
set KBS=`tput kbs`
|
||
|
if (${%KBS} == 1) then
|
||
|
stty erase $KBS
|
||
|
endif </PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
>
|
||
|
The second part must be replicated for every deviant terminal. Of course, if a
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>termcap</SPAN
|
||
|
> entry already exists it is not necessary to
|
||
|
generate it.</P
|
||
|
></DIV
|
||
|
></DIV
|
||
|
><H3
|
||
|
CLASS="FOOTNOTES"
|
||
|
>Notes</H3
|
||
|
><TABLE
|
||
|
BORDER="0"
|
||
|
CLASS="FOOTNOTES"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
WIDTH="5%"
|
||
|
><A
|
||
|
NAME="FTN.ADDINPUTRC"
|
||
|
HREF="system.html#ADDINPUTRC"
|
||
|
>[1]</A
|
||
|
></TD
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
WIDTH="95%"
|
||
|
><P
|
||
|
>On older
|
||
|
version of the <SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>bash</SPAN
|
||
|
>, you must remember to set
|
||
|
<TT
|
||
|
CLASS="ENVAR"
|
||
|
>INPUTRC</TT
|
||
|
> suitably, for instance adding
|
||
|
<TABLE
|
||
|
BORDER="0"
|
||
|
BGCOLOR="#E0E0E0"
|
||
|
WIDTH="100%"
|
||
|
><TR
|
||
|
><TD
|
||
|
><FONT
|
||
|
COLOR="#000000"
|
||
|
><PRE
|
||
|
CLASS="PROGRAMLISTING"
|
||
|
> export INPUTRC=~/.inputrc</PRE
|
||
|
></FONT
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
> to your
|
||
|
<TT
|
||
|
CLASS="FILENAME"
|
||
|
>~/.profile</TT
|
||
|
> (or whichever file is read just by login
|
||
|
shells).</P
|
||
|
></TD
|
||
|
></TR
|
||
|
><TR
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
WIDTH="5%"
|
||
|
><A
|
||
|
NAME="FTN.AEN316"
|
||
|
HREF="system.html#AEN316"
|
||
|
>[2]</A
|
||
|
></TD
|
||
|
><TD
|
||
|
ALIGN="LEFT"
|
||
|
VALIGN="TOP"
|
||
|
WIDTH="95%"
|
||
|
><P
|
||
|
>More
|
||
|
precisely, to the shell configuration file that is read in every shell, not
|
||
|
only in login shells. The right file depend on startup sequence of your
|
||
|
<SPAN
|
||
|
CLASS="APPLICATION"
|
||
|
>bash</SPAN
|
||
|
>.</P
|
||
|
></TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
><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="writing.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="notwork.html"
|
||
|
>Next</A
|
||
|
></TD
|
||
|
></TR
|
||
|
><TR
|
||
|
><TD
|
||
|
WIDTH="33%"
|
||
|
ALIGN="left"
|
||
|
VALIGN="top"
|
||
|
>What You Should Do When Writing Applications</TD
|
||
|
><TD
|
||
|
WIDTH="34%"
|
||
|
ALIGN="center"
|
||
|
VALIGN="top"
|
||
|
> </TD
|
||
|
><TD
|
||
|
WIDTH="33%"
|
||
|
ALIGN="right"
|
||
|
VALIGN="top"
|
||
|
>What If Nothing Works</TD
|
||
|
></TR
|
||
|
></TABLE
|
||
|
></DIV
|
||
|
></BODY
|
||
|
></HTML
|
||
|
>
|