HowToReadline
|
Size: 4820
Comment:
|
Size: 5326
Comment: Rewrite for 6.06. Leaving in CategoryCleanup -- see FIXME comment.
|
| Deletions are marked like this. | Additions are marked like this. |
| Line 1: | Line 1: |
| '''Note: this article was written before release 6.06. A new version of the article is being worked on to bring it up to date.''' If you use a '''bash''' shell, you might know it uses the '''Readline''' |
If you use a Bash shell, you might know it uses the Readline |
| Line 7: | Line 5: |
| 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>f and <Alt>b move forwards and backwards a word at a time. Enter the bash builtin command {{{bind -P}}} for a complete list of |
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 |
| Line 19: | Line 16: |
| ||<><Ctrl><arrow>||Move forwards and backwards a word at a time|| | ||<><Ctrl><arrow>||Move forwards and backwards a word at a time^1^|| |
| Line 24: | Line 21: |
| ||<><Insert>||Toggle overwrite/insert mode^1^|| | ||<><Insert>||Toggle overwrite/insert mode^2^|| |
| Line 26: | Line 23: |
| ^1^ Each call to Readline starts in insert mode; the Insert key doesn't "stick". |
^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. |
| Line 32: | Line 32: |
| characters in: ''':@-./_~''' to be part of a word when double clicking | characters in ''':@-./_~''' to be part of a word when double clicking |
| Line 37: | Line 37: |
| Before installing the Readline configuration file, it is necessary to | Before installing the new Readline configuration file, it is necessary to |
| Line 39: | Line 39: |
| required key combination. For instance, Konsole with the default '''XTerm (XFree 4.x.x)''' keyboard table emits the same byte sequence (<Esc>[OD) for <Ctrl><left arrow> as for <left arrow>. |
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. |
| Line 43: | Line 44: |
| Attached to this article is attachment:myKubuntu.keytab, which configures Konsole to emit the required byte sequences. Download it and put it in /usr/share/apps/konsole or ~/.kde/share/apps/konsole ('''~''' is the conventional notation for "my home directory"). Then in Konsole select "Settings/Keyboard/XTerm (myKubuntu)". If you're happy with this after testing, select "Settings/Save as Default". |
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`. |
| Line 50: | Line 50: |
| See /usr/share/apps/konsole/README.K''''''eyTab for details of how the keytab file is written. (Note that /usr/include/qt3/qnamespace.h has the prefixes "Key_", not "Qt::Key_".) /usr/share/apps/konsole/README.default.Keytab lists the Konsole builtin keyboard table on which myKubuntu.keytab is based. Some of these default key bindings needed to be changed, due to the way Konsole works. For instance, the default table configures the Backspace key alone to emit "\x7f", but this means the Backspace key together with the Ctrl and/or Shift key also emits "\x7f". Since we need distinct byte sequences for <Backspace>, <Ctrl><Backspace>, and <Shift><Backspace>, the plain "Backspace" definition had to be changed to "Backspace-Shift-Control". |
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'''. |
| Line 64: | Line 68: |
| Konsole with the command {{{konsole --keytab myown}}}. 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. |
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. |
| Line 71: | Line 77: |
| console, or classic xterm. The new Konsole byte sequences follow the classic xterm translations where available, so that <Ctrl><arrow> and <Insert> work in classic xterm.] |
console, or classic xterm.] |
| Line 78: | Line 82: |
| sequences, download the file attachment:inputrc and put it in /etc or in your home directory as '''.inputrc'''. |
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. |
| Line 84: | Line 102: |
| by your custom Readline configuration file. Now '''bash''' and other | by your custom Readline configuration file. Now Bash and other |
| Line 97: | Line 115: |
| CategoryDocumentation | CategoryDocumentation CategoryCleanup |
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 time1 |
<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 mode2 |
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]
HowToReadline (last edited 2008-08-06 16:40:45 by localhost)