HowToReadline

Differences between revisions 6 and 7
Revision 6 as of 2006-06-11 20:22:27
Size: 5326
Editor: host86-137-96-13
Comment: Rewrite for 6.06. Leaving in CategoryCleanup -- see FIXME comment.
Revision 7 as of 2006-06-19 16:07:26
Size: 57
Editor: 127
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
If you use a Bash shell, you might know it uses the Readline
library for editing command lines. Many other programs use it too.
The Readline configuration supplied with Ubuntu and Kubuntu allows you
to use some obvious keys, such as the left/right arrow keys, for moving
around and editing the command line, but you might want a few features
beyond those provided. In fact, Readline has a rich set of default key
bindings, but they can be difficult to remember or awkward to use.
For instance, <Alt>d deletes the word to the right of the cursor.
Enter the Bash builtin command {{{bind -P}}} for a complete list of
the bindings.

This article describes how to add some keys and key combinations to the
repertoire. A new Readline configuration file is attached which
defines the following keys:

||<><Ctrl><arrow>||Move forwards and backwards a word at a time^1^||
||<><Ctrl><Delete>||Delete word to right of cursor||
||<><Ctrl><Backspace>||Delete word to left of cursor||
||<><Shift><Delete>||Delete from cursor to end of line||
||<><Shift><Backspace>||Delete from cursor to start of line||
||<><Insert>||Toggle overwrite/insert mode^2^||

^1^ This has been part of the default configuration since Kubuntu release 6.06,
but is included here for completeness.
[[BR]]
^2^ Each call to Readline starts in insert mode; the Insert key doesn't
"stick" between calls.

A ''word'' is defined by Readline to be a sequence of letters or numbers;
it is not possible to change this definition. Other parts of Ubuntu might
define a word differently. For instance, Konsole by default defines the
characters in ''':@-./_~''' to be part of a word when double clicking
(see '''Settings/Configure Konsole''').

=== Keyboard map ===

Before installing the new Readline configuration file, it is necessary to
configure the terminal emulator to emit a unique byte sequence for each
required key combination. Konsole needs only a small change: with the default
'''XTerm (XFree 4.x.x)''' keyboard table, it emits the same byte sequence
for <Ctrl><Backspace> as for <Shift><Backspace>, which is just the same
as for <Backspace> on its own.

Attached to this article is attachment:myKubuntu.keytab, which configures
Konsole to emit the required byte sequences. The simplest way to install it
is to put it in `~/.kde/share/apps/konsole` ('''~''' is the
conventional notation for "my home directory"). Alternatively, you could make
a system-wide change by putting the keytab in `/usr/share/apps/konsole`.

Rather than downloading the entire table, you could download the
patch in attachment:default.keytab.patch and apply it to the default
keyboard table. The default keyboard table doesn't exist as a .keytab file
since it's built into Konsole; instead, it's available in
`/usr/share/doc/konsole/README.default.Keytab.gz`. To create the new keytab,
issue these commands:
{{{
gzip -cd /usr/share/doc/konsole/README.default.Keytab.gz > myKubuntu.keytab
patch myKubuntu.keytab default.keytab.patch
}}}

After installing myKubuntu.keytab as outlined above, start a new
Konsole session and select
'''Settings/Keyboard/XTerm (myKubuntu)'''.
If you're happy with this after testing, select '''Settings/Save as Default'''.

If you don't use the default Konsole keyboard table, and need to modify a
different keytab file, a useful technique during development is to start
Konsole with the command {{{konsole --keytab myKubuntu}}} (or whatever name you
choose). This allows you to see any error messages from Konsole, for instance
those that say a key combination has been defined earlier in the keytab file.
To verify a key combination, a useful technique is to start vim, enter Insert
mode with i, and enter <Ctrl>v followed by the key combination.
See `/usr/share/doc/konsole/README.KeyTab` for details of the format of
the keytab file.

[FIXME: not described are the GNOME terminal emulator, the Linux tty
console, or classic xterm.]

=== Readline configuration ===

After your terminal emulator is configured to emit the required byte
sequences, it's time to configure Readline. Download the file
attachment:inputrc and install it either in your home directory as
`.inputrc` or as a replacement for the existing file `/etc/inputrc`.

Again, you might prefer to apply a patch instead of installing a complete
replacement. Download attachment:inputrc.patch (say, to `/tmp`) and with root
privilege issue the command:
{{{
patch --backup /etc/inputrc /tmp/inputrc.patch
}}}

Note this creates a backup file, most likely called `/etc/inputrc.orig`
(see `patch(1)` for details).

Remember to start a new session before testing and, if necessary, change the
keyboard table.

== Summary ==

You have modified your terminal emulator to emit the byte sequences required
by your custom Readline configuration file. Now Bash and other
command-line programs can use the keys defined in the table above, as well
as Home, End, etc.

== Related Pages ==

[http://cnswww.cns.cwru.edu/php/chet/readline/rluserman.html GNU Readline Library]

[http://www.gnu.org/software/bash/manual/bashref.html Bash Reference Manual]

[http://www.white.nu/~jwhite/keymapping/ Andrew's (barebones) guide to terminals and keymappings]

----
CategoryDocumentation CategoryCleanup
#REFRESH 0 http://help.ubuntu.com/community/HowToReadline

HowToReadline (last edited 2008-08-06 16:40:45 by localhost)