Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

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.

share|improve this question
    
Wow, mintty is great - have been looking for a decent terminal emulator for Windows for some time now. Thanks for that. –  blueyed Jan 13 '11 at 17:37
    
However, I am getting ^[[1;5A for Ctrl-Up, which appears to be more correct, according to code.google.com/p/mintty/wiki/Keycodes#Cursor_keys –  blueyed Jan 13 '11 at 18:25

7 Answers 7

up vote 12 down vote accepted

Edit:

Here's what worked for me:

  • My ~/.bashrc sets TERM=xterm (mine happens to be TERM=xterm-256colors) overriding screen's TERM=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 get
    0000000 033 [ ? 1 h 033 =
    and
    tput rmkx | hexdump -c
    gives me
    0000000 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.

share|improve this answer
    
set -o vi (if you're that type of person :) –  MikeyB Apr 7 '10 at 21:58
    
@MikeyB: How does that help (it doesn't, by the way)? –  Dennis Williamson Apr 7 '10 at 22:23
    
Thanks. Not the answer I was hoping for but now I can move on and live with this limitation or use another key binding. –  kbosak Apr 8 '10 at 11:44
1  
@Dennis: Well, it gives you another way of handling the forward/backwards if you're the typoe of person who can wrap their head around it. set -o vi turns on vi command-line mode so you can hit ESC and use the vi keys to move around and edit your command line. –  MikeyB Apr 8 '10 at 14:47
1  
@kbosak: I'm not happy with that answer, either. That's why I fixed it. :-) –  Dennis Williamson Apr 8 '10 at 22:24

As mentioned in here, u can put in ~/.inputrc:

"\eOD": backward-word
"\eOC": forward-word

It worked for me.

share|improve this answer
1  
This worked for me and was far easier than the accepted answer. –  pate Sep 1 '13 at 14:53
    
This worked for me too, while the accepted answer didn't –  Schiavini May 2 at 11:16
    
+1 Succinct answer that just works. –  Adam Caviness Oct 19 at 3:27

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
share|improve this answer
    
I may go this route as well. The left ctrl key is so much easier to hit than the meta or alt keys (at least on my keyboard). Oh well. –  kbosak Apr 8 '10 at 11:47

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

share|improve this answer

You should look into the documentation of terminfo, ncurses, screen and putty if you want to debug/configure properly. Also bash shortcuts can be configured with inputrc. Look into the man pages of bash and search for inputrc.

share|improve this answer
    
I don't think the prob is what's in inputrc. I've already tried several possible solutions that involved putting entries in inputrc with no success. Again, it appears that the incorrect code is being sent to screen for ctrl-arrow keys. I also don't want to spend much more time on this than I already have as it's really just a minor inconvenience. –  kbosak Apr 7 '10 at 16:57

Do you have the right character encoding in Putty ? If you connect to a server in UTF-8 and your putty is in standard charset, in vim, the arrow keys are written. If Putty is in UTF-8, you can move your cursor. Maybe it is the same in your case...

share|improve this answer
    
It's not a vi/vim problem at all and I only saw one option in PuTTY for character set, which didn't help. –  kbosak Apr 7 '10 at 17:00
    
Try the different options in Terminal->Keyboard->The Function keys and keypad. BTW, for me Ctrl-Arrow doesn't work in bash either, it does the same as without pressing Ctrl. –  Prof. Moriarty Apr 7 '10 at 17:09
    
Yeah, I've tried as many options and combination of options without any luck. FYI, there are some entries you can put in inputrc to help with the ctrl-arrow keys in bash, but they don't help when using screen. –  kbosak Apr 7 '10 at 17:34

In your putty configuration under Terminal -> Features, there's a few "disable" checkboxes. You may want to try disabling application cursor keys or application keypad mode -- sometimes putty tries to be "too smart" and sends control characters that aren't compatible with the server.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.