Using cat in Terminal.app in order to view the raw codes, I get the following:

$ cat
^[[D    # LEFT
^[[1;2D # S-LEFT
^[[C    # RIGHT 
^[[1;2C # S-RIGHT
^[[A    # UP
^[[A    # S-UP
^[[B    # DOWN
^[[B    # S-DOWN


  • S is for the shift key
  • LEFT is for left arrow
  • RIGHT is for right arrow
  • UP is for up arrow
  • DOWN is for down arrow

Thus, the shift key is ignored in conjunction with the up and down arrows, but not with the left and right arrows.

I don't see anything under Terminal > Preferences > Profiles > keyboard that would explain this behaviour (following this answer, that is how I solved a similar problem).

I could probably use DefaultKeybinding.dict (see this other answer for example) but that doesn't explain the behaviour.

1 Answer 1


I'm not sure what there is to "explain". If you want them to be recognized, define them in your terminal profile.

The canonical list of ANSI keycodes I usually use is here:


 ⇧↑ \033[1;2A
 ⇧↓ \033[1;2B
  • Thanks, that helps. I think that my misunderstanding is that SHIFT is not a character (it doesn't appear in the ANSII code) but only a function key. Thus, if there is no action specified in the keyboard profile of Terminal.app, then nothing happens. For example, SHIFT+LELFT and SHIFT-RIGHT do appear in the list. There is still a question: what is the nature of a function key?
    – Antoine
    Jan 27, 2021 at 11:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .