Mercurial > pidgin.yaz
diff console/libgnt/gntkeys.c @ 14876:70623f0d5cdc
[gaim-migrate @ 17645]
Use terminfo/termcap information (from ncurses) as much as possible. There
still need to be some manual 'refinement' based on $TERM. I'll see if I
can get rid of those. Also, I am probably going to allow users to provide
information that terminfo can't provide, like the keycode for ctrl+up etc.
Let me know if any of the keybinding doesn't work.
committer: Tailor Script <tailor@pidgin.im>
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Wed, 01 Nov 2006 03:38:23 +0000 |
parents | ae4cbed1b309 |
children | c01f62c83647 |
line wrap: on
line diff
--- a/console/libgnt/gntkeys.c Wed Nov 01 02:13:37 2006 +0000 +++ b/console/libgnt/gntkeys.c Wed Nov 01 03:38:23 2006 +0000 @@ -2,28 +2,17 @@ #include <string.h> +const char *term; + void gnt_keys_refine(char *text) { - if (text[0] == 27) - { - /* These are for urxvt */ - if (strcmp(text + 1, "Oa") == 0) - { - strcpy(text + 1, GNT_KEY_CTRL_UP); - } - else if (strcmp(text + 1, "Ob") == 0) - { - strcpy(text + 1, GNT_KEY_CTRL_DOWN); - } - } - else if ((unsigned char)text[0] == 195) - { - /* These for xterm */ - if (text[2] == 0) - { - text[0] = 27; - text[1] -= 64; - } + if (*text == 27 && *(text + 1) == '[' && *(text + 3) == '\0' && + (*(text + 2) >= 'A' || *(text + 2) <= 'D')) { + if (term == NULL) + term = getenv("TERM"); + /* Apparently this is necessary for urxvt and screen */ + if (strcmp(term, "screen") == 0 || strcmp(term, "rxvt-unicode") == 0) + *(text + 1) = 'O'; } }