On Sat, 3 Apr 2010, Michael Elkins wrote:
On Sat, Apr 03, 2010 at 09:36:44PM -0400, Thomas Dickey wrote:
On Sun, 4 Apr 2010, Mutt wrote:
The problem is that the ncurses library doesn't have a keycode for
ctrl+<UP> or ctrl+<DOWN>. Instead you get a multibyte escape sequence.
That's an extension (mutt could in principle ask ncurses for the binding
of kUP5 and kDN5). Use "infocmp -x" to see some of the possibilities.
Can you explain in a little more detail how this is supposed to work?
It was not clear to me which of the following would be true:
1) there is some way to make getch() return a KEY_ constant for
ctrl-<UP>
2) mutt would have to query the termcap entry for kUP5 and internally
convert a user's specification of "\c<up>" to the kUP5 sequence.
Briefly:
several of the terminfo entries in ncurses have "extended"
capabilities defined. These are names not in the predefined table of
booleans, numbers, strings. When a terminfo entry is compiled, ncurses
determines from the syntax which type to use.
A convention is used for xterm and related entries (including rxvt) which
uses a mixed-case name with a numeric suffix (based on xterm's modifier
codes). It's been in use for several years, and "should" be available on
multiple platforms.
An application can use these by a tigetstr to check existence, e.g.,
char *s;
s = tigetstr("kDC6");
if (s != 0 && (long)(s) != -1) {
/* use the value */
}
ncurses decides that any of these strings that begin with "k" are (by
convention...) key names, and if
use_extended_names(TRUE);
was called, adds them to the table that getch uses to decode keys.
ncurses generates a keycode for these extended strings, and will return
that number.
An application can make its own list of these keycodes by using
key_defined() for the by-convention names kDN6, kUP5, etc. The keyname()
function also can be used, on the value from getch(), to get the name of
the key.
--
Thomas E. Dickey
http://invisible-island.net
ftp://invisible-island.net