Using ctrl-arrow keys with PuTTY and screen
I searched and couldn't find a solution for this anywhere. I'm using PuTTY from Windows to connect to various servers where I run bash and screen. It seems bash works fine with ctrl-arrow keys to jump word-to-word on the command line but within screen it's not working. Not in screen, ctrl-left sends "^[OC and ctrl-right is "^[OD". Within screen I instead get "^[[C" and "^[[D", which appears to be the codes for just the left/right arrow keys. Is there any way to get screen to recognize ctrl-arrow keys when using PuTTY? (FYI, I don't remember having this problem when using gnu-terminal in linux instead of PuTTY).
UPDATE: It appears PuTTY is the problem as it is not sending the escape codes that are necessary for this to work. I'm giving up for now and using Cygwin+mintty.
Solution 1:
Edit:
Here's what worked for me:
- My
~/.bashrc
setsTERM=xterm
(mine happens to beTERM=xterm-256colors
) overriding screen'sTERM=screen
- I set PuTTY > Terminal > Features > Disable Application cursor keys mode to checked
- I enter
tput smkx
at the Bash prompt Now Ctrl-Arrow keys jump word-by-word
For informational purposes, if I do:
tput smkx | hexdump -c
I get0000000 033 [ ? 1 h 033 =
andtput rmkx | hexdump -c
gives me0000000 033 [ ? 1 l 033 >
I think there's a way to rework this into something a little better, but it's what I've got so far and it seems to work.
Original answer:
From info screen
:
Each window in a `screen' session emulates a VT100 terminal, with some extra functions added. The VT100 emulator is hard-coded, no other terminal types can be emulated.
And VT100s don't have Ctrl-Arrow keycodes.
Solution 2:
As mentioned in here, u can put in ~/.inputrc:
"\eOD": backward-word
"\eOC": forward-word
It worked for me.
Solution 3:
I'm somewhat surprised that you got Putty to send ctrl-arrowkeys correctly even without using screen, as that has never worked for me. My solution was to switch to using alt-arrowkeys (meta-arrowkeys), which I believe have the same forward-word / backward-word binding in bash by default, though I had to issue a couple extra commands for zsh to recognize them:
bindkey "^[^[[C" forward-word # Meta-RightArrow bindkey "^[^[[D" backward-word # Meta-LeftArrow
Solution 4:
In case others find this old question like I did, a more recent solution:
Ctrl and arrow keys doesn't work in putty! What do I do?
putty inverts the sense of the cursor key mode on ctrl, which is a bit hard for tmux to detect properly. To get ctrl keys right, change the terminfo settings so kUP5 (Ctrl-Up etc) are the adjusted versions, and disable smkx/rmkx so tmux doesn't change the mode. For example with this line in .tmux.conf (assuming you have TERM set to xterm):
set -g terminal-overrides "xterm*:kLFT5=\eOD:kRIT5=\eOC:kUP5=\eOA:kDN5=\eOB:smkx@:rmkx@"
Note that this will only work in tmux 1.2 and above.
http://stuff.mit.edu/afs/athena/project/bsd/src/tmux-1.3/FAQ