Bash – .inputrc TAB not behaving as expected

bashreadline

I'm on a roll today, here's another question:

How come when I put these into .inputrc, they both do the same thing?

TAB: menu-complete
Shift-TAB: menu-complete-reverse

i.e. they both do whatever the last one says.

Best Answer

Readline doesn't know anything about a modifier called Shift, and quietly ignores unknown modifier names. Try wibble-TAB.

To bind an action to Shift+Tab, you need to find out what escape sequence your terminal sends. In bash, run cat and type Ctrl+V then Shift+Tab. This will insert the escape sequence literally. It's likely that the first character will be an escape character, shown as ^[; different terminals have different escape sequences, but common possibilities are ␛[Z (i.e. escape, left bracket, capital Z) and ␛␉ (i.e. escape, tab). Bind the key appropriately in ~/.inputrc (where \e means an escape character).

"\e\t": menu-complete-backward
"\e[Z": menu-complete-backward