I want to set a key binding in bash for "history-search-backward" readline command to a combination of Control+some other key (I'm using 2 as an example), but I'm unable to do so.
(edit: it seems the problem was my choice of 2 as the example key. I tried with \C-l and it's working. I'll still accept an answer if someone explains why 2 doesn't work)
After several tries my ~/.inputrc now looks like this
set bind-tty-special-chars off
"\C-2": history-search-backward
but it doesn't work and bind -p | grep "-2" gives nothing. If I try something without the control key, it works:
"C-2": history-search-backward
I can search in the history by prssing the sequence C + – + 2.
bind -p gives control in \C form, for example:
"\C-w": unix-word-rubout
I've tried different formats in my inputrc:
Control-2: history-search-backward
Ctrl-2: history-search-backward
"Control-2": history-search-backward
but nothing works.
"\e2": history-search-backward
works if I press Escape followed by 2.
Can anyone help?
Setup:
Fedora 11:
Bash version 4.0.23(1)
GNU Readline 5.2 (according to the man page)
Best Answer
There's no ASCII code for Control-2. Control-@ through Control-_ correspond to control codes 0x00 (NUL) through 0x1F (Unit Separator). For example, the code for Control-I is the code for 'I' (0x49) minus 0x40 = 0x09 (HT, aka tab). There's no set definition for Control+(some other character not in the @ to _ block).
Programs that do their own keyboard handling can interpret Control any way they like in combination with any other keys. But programs like bash, which read their input through a terminal, don't have any way of even seeing Control-2.