Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between cursor_up (cuu1) and key_up (kcuu1) in terminfo(5)?

In terminfo(5):

Variable String Capname TCap Code Description
cursor_up cuu1 up up one line
key_up kcuu1 ku up-arrow key

I tried with tput and they produce the same output:

$ tput cuu1  | hexdump -C
00000000  1b 5b 41                                      |.[A|
00000003
$ tput kcuu1 | hexdump -C
00000000  1b 5b 41                                      |.[A|
00000003
like image 873
pynexj Avatar asked Oct 21 '25 13:10

pynexj


1 Answers

In a terminfo description, names beginning with k denote keys, while other names are used for non-key capabilities. For most keys, there is no readily apparent relationship between the keys and an existing escape sequence, but cursor-keys are the exception.

Whether they are the same or not depends upon the terminal description. For TERM=linux, they happen to be the same, however a terminal description could be written for the Linux console where they are not.

The distinction is whether the terminal is initialized into application mode or left in the (default/power-up) normal mode. In application mode, the cursor keys would send EscapeO as a prefix rather than Escape[.

A little over half (54%) of the terminal descriptions in the ncurses terminal database use application mode, meaning that cuu1 is more often than not different from kcuu1.

There's another quirk to be aware of: for other cursor movement, such as cud1, the terminal description may say \n, while the key for cursor-down would not send that character (see iTerm for example).

Further reading:

  • My cursor keys do not work
like image 197
Thomas Dickey Avatar answered Oct 23 '25 07:10

Thomas Dickey



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!