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
add comment

6 Answers

up vote 9 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
show 5 more comments

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

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

It worked for me.

share|improve this answer
    
This worked for me and was far easier than the accepted answer. –  pate Sep 1 '13 at 14:53
add comment

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
add comment

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
add comment

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
add comment

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
add comment

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.