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';
 	}
 }