Since I finally got a "round tuit", I've been studying readline.  The
inputrc file in the current book has gotten a bit long in the tooth.
Some of the settings are now the default and readline uses better
defaults and also uses termcap to map certain keys in different
terminals.  Here is the current LFS inputrc file with my comments.

> # Begin /etc/inputrc
> # Modified by Chris Lynn <[email protected]>
> 
> # Allow the command prompt to wrap to the next line
> set horizontal-scroll-mode Off
This is now the default setting.  It is redundant.

> 
> # Enable 8bit input
> set meta-flag On
> set input-meta On
These are the same thing, setting one sets both.

> 
> # Turns off 8th bit stripping
> set convert-meta Off
> 
> # Keep the 8th bit for display
> set output-meta On
Nothing wrong here.

> 
> # none, visible or audible
> set bell-style none
Since this one is a personal preference how about leaving it in but
commented out.

> 
> # All of the following map the escape sequence of the
> # value contained inside the 1st argument to the
> # readline specific functions
> 
> "\eOd": backward-word
> "\eOc": forward-word
These are by default mapped to backward-char and forward-char.  What are
these keys?  The only clue is a comment in the code about common arrow
keys.  Does anybody really want some special keyboard to use the arrow
keys differently.  Meta-b and Meta-f already do these.

> 
> # for linux console
> "\e[1~": beginning-of-line
Default one linux terminal.

> "\e[4~": end-of-line
Default one linux terminal.

> "\e[5~": beginning-of-history
> "\e[6~": end-of-history
These two are needed.

> "\e[3~": delete-char
Default one linux terminal.

> "\e[2~": quoted-insert
Use the INSERT key for quoted-insert.  I think overwrite-mode is a
better default.  quoted-insert already has 2 default key sequences.

> 
> # for xterm
> "\eOH": beginning-of-line
> "\eOF": end-of-line
Readline already does the right thing here in xterm.

> 
> # for Konsole
> "\e[H": beginning-of-line
> "\e[F": end-of-line
I don't use Konsole but the readline does these also.

> 
> # End /etc/inputrc

Here is my new inputrc file.  I've gone to a lot of effort to find out
exactly what readline really does in the default case without any inputrc
file.  Since LFS doesn't use emacs and I don't either, this is set up
for vi mode, but includes commands to switch back and forth.  All the
info on the web about readline and the inputrc file is old and does not
really explain what readline is really doing with these commands.

NOTE:  There are some bash specific bindable functions that are bound by
default in emacs mode but are not bound at all in vi mode while others
are bound.

> # Begin ~/.inputrc
> # By Steve Jones <[email protected]>
> 
> # Set these for modern 8bit terminals.
> set input-meta On
> set convert-meta Off
> set output-meta On
> 
> # none, visible or audible
> set bell-style audible
> 
> # Don't match hidden files on tab complete.
> set match-hidden-files Off
> 
> # Set emacs mode, even though it is the default before setting the keymap.
> set editing-mode emacs
>       # Although emacs mode has 3 different keymaps, they are all
>       # concatenated together, so we only need to set stuff in one keymap.
>       set keymap emacs
>               # Use this to see the editing mode and keymap.
>               "\e\C-v": dump-variables
>               # Change to vi mode.
>               "\e\C-j": vi-editing-mode
>               # Change to overwrite.  Changes back to insert after new line.
>               "\e[2~": overwrite-mode # INSERT
>               # Use Page-Up/Down to help navigate history.
>               "\e[5~": beginning-of-history # PAGE-UP
>               "\e[6~": end-of-history # PAGE-DOWN
>               # Set forward-search-history to M-C-s since \C-s is
>               # caught by the kernel to stop the terminal.
>               "\e\C-s": forward-search-history 
>               $if term=linux
>                       # These do not work in {E,x}term, Caught by e16.
>                       "\e\C-f": dump-functions # Ctr-Alt-f
>                       "\e\C-m": dump-macros
>                       "\e\C-r": re-read-init-file
>               $endif
>               $if bash
>                       # F1: Get the man 1 page for the command on the line.
>                       # Remove any options that may still be there.
>                       # NOTE: This does not work correctly on commands that
>                       # contain dashes (-) or other word brake characters in
>                       # their name.
>                       "\e[[A": "\C-aman 1 \ef\C-k\C-m"
>               $endif
> 
> # Set vi editing mode and leave it as the mode to use.
> set editing-mode vi
>       # Since the vi keymaps are different, we need different mappings for
>       # each.
>       set keymap vi-insert
>               "\C-l": clear-screen # CTRL-L
>               "\e\C-v": dump-variables
>               # Change to emacs mode.
>               "\e\C-j": emacs-editing-mode
>               # Overstrike in vi-insert.
>               "\e[2~": vi-replace # Insert
>               "\e[3~": vi-delete # Delete
>               # Use Page-Up/Down to help navigate history.
>               "\e[5~": beginning-of-history # PAGE-UP
>               "\e[6~": end-of-history # PAGE-DOWN
>               # Set forward-search-history to M-C-s since \C-s is
>               # caught by the kernel to stop the terminal.
>               "\e\C-s": forward-search-history 
>               $if term=linux
>                       # These do not work in {E,x}term, Caught by e16.
>                       "\e\C-f": dump-functions # Ctr-Alt-f
>                       "\e\C-m": dump-macros
>                       "\e\C-r": re-read-init-file
>               $endif
>               $if bash
>                       # F1: Get the man 1 page for the command on the line.
>                       # Remove any options that may still be there.
>                       # NOTE: If there is no trailing space on a command with
>                       # no options, the `a' command complains with a bell.
>                       "\e[[A": "\e0iman 1 \eEa \ed$\C-m"
>               $endif
> 
>       set keymap vi-command
>               "\e\C-v": dump-variables
>               "\e\C-j": emacs-editing-mode
>               # Change to vi-insert mode.
>               "\e[2~": vi-editing-mode # Insert
>               # Use Page-Up/Down to help navigate history.
>               "\e[5~": beginning-of-history # PAGE-UP
>               "\e[6~": end-of-history # PAGE-DOWN
>               # Set forward-search-history to M-C-s since \C-s is
>               # caught by the kernel to stop the terminal.
>               "\e\C-s": forward-search-history 
>               $if term=linux
>                       # These do not work in {E,x}term, Caught by e16.
>                       "\e\C-f": dump-functions # Ctr-Alt-f
>                       "\e\C-m": dump-macros
>                       "\e\C-r": re-read-init-file
>               $endif
>               $if bash
>                       # F1: Get the man 1 page for the command on the line.
>                       # Remove any options that may still be there.
>                       # NOTE: If there is no trailing space on a command with
>                       # no options, the `a' command complains with a bell.
>                       "\e[[A": "0iman 1 \eEa \ed$\C-m"
>               $endif
> 
> # End ~/.inputrc

I also have built an authoritative inputrc file, one with all the variables
and bindable functions for readline with the bash add ons.  Also all the
default keymaps are included.  Not all the functions or variables are
documented, What I could find and so far figure out from reading the
code is included.  If anyone is interested I can post it later (2233
lines long).

-- 
Steve Jones
[email protected]
-- 
http://linuxfromscratch.org/mailman/listinfo/lfs-chat
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to