chiark / gitweb /
*** empty log message ***
[sympathy.git] / src / ansi.c
index 4113a36..970d353 100644 (file)
@@ -10,6 +10,9 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.36  2008/02/28 22:00:42  james
+ * *** empty log message ***
+ *
  * Revision 1.35  2008/02/28 16:57:51  james
  * *** empty log message ***
  *
@@ -728,6 +731,26 @@ ansi_terminal_reset (ANSI * a)
   ansi_move (a, p);
 }
 
+
+int ansi_key(ANSI *a,Context *c,int key)
+{
+
+  if (!c->d)
+    return c->k->key (c->k, c, key);
+
+  cmd_show_status (c->d, c);
+
+  if (c->d->active)
+    return cmd_key (c->d, c,a, key);
+
+  if (key == CMD_KEY)
+    return cmd_activate (c->d, c);
+
+
+  return c->k->key (c->k, c, key);
+}
+
+
 static void
 ansi_flush_escape (ANSI * a, Context * c)
 {
@@ -736,7 +759,7 @@ ansi_flush_escape (ANSI * a, Context * c)
 
   for (i = 0; i < p->escape_ptr; ++i)
     {
-      keydis_key (c->k, c, p->escape_buf[i]);
+      ansi_key (a, c, p->escape_buf[i]);
     }
 
   p->escape_ptr = 0;
@@ -755,11 +778,11 @@ ansi_parse_deckey (ANSI * a, Context * c)
 
   if ((p->escape_buf[2] >= 'A') || (p->escape_buf[2] <= 'Z'))
     {
-      keydis_key (c->k, c, KEY_UP + (p->escape_buf[2] - 'A'));
+      ansi_key (a, c, KEY_UP + (p->escape_buf[2] - 'A'));
     }
   else if ((p->escape_buf[2] >= 'a') || (p->escape_buf[2] <= 'z'))
     {
-      keydis_key (c->k, c, KEY_154 + (p->escape_buf[2] - 'a'));
+      ansi_key (a, c, KEY_154 + (p->escape_buf[2] - 'a'));
     }
   else
     {
@@ -782,7 +805,7 @@ ansi_parse_ansikey (ANSI * a, Context * c)
     }
   if ((p->escape_buf[2] >= '0') || (p->escape_buf[2] <= '9'))
     {
-      keydis_key (c->k, c, KEY_180 + (p->escape_buf[2] - '0'));
+      ansi_key (a, c, KEY_180 + (p->escape_buf[2] - '0'));
     }
   else
     {
@@ -895,7 +918,7 @@ ansi_parse_char (ANSI * a, Context * c, int ch)
     }
   else
     {
-      keydis_key (c->k, c, ch);
+      ansi_key (a, c, ch);
     }
 
 }