Rocco Rutte:
[apps/madmutt.git] / contrib / patch.slang-1.2.2.keypad.1
1 diff -ur slang.old/src/slcurses.c slang/src/slcurses.c
2 --- slang.old/src/slcurses.c    Fri Apr 24 09:16:46 1998
3 +++ slang/src/slcurses.c        Sat Jul  4 07:30:31 1998
4 @@ -134,7 +134,10 @@
5                }
6              else if (ch == 0xFFFF) return ERR;
7              SLang_ungetkey (ch);
8 -            return SLkp_getkey ();
9 +            if ((ch = SLkp_getkey ()) != SL_KEY_ERR)
10 +              return ch;
11 +            else
12 +              return SLang_getkey ();
13           }
14         return SLang_getkey ();
15       }
16 diff -ur slang.old/src/slkeymap.c slang/src/slkeymap.c
17 --- slang.old/src/slkeymap.c    Fri Apr 24 09:16:47 1998
18 +++ slang/src/slkeymap.c        Sat Jul  4 07:41:42 1998
19 @@ -343,6 +343,8 @@
20  
21  SLang_Key_Type *SLang_do_key(SLKeyMap_List_Type *kml, int (*getkey)(void))
22  {
23 +   unsigned char SLang_Undo_Buffer [SL_MAX_INPUT_BUFFER_LEN];
24 +   int SLang_Undo_Len = 0;
25     register SLang_Key_Type *key, *next, *kmax;
26     unsigned int len;
27     unsigned char input_ch;
28 @@ -356,6 +358,7 @@
29       return NULL;
30  
31     input_ch = (unsigned char) SLang_Last_Key_Char;
32 +   SLang_Undo_Buffer [SLang_Undo_Len++] = input_ch;
33  
34     key = (SLang_Key_Type *) &((kml->keymap)[input_ch]);
35  
36 @@ -372,7 +375,11 @@
37  
38         key = kml->keymap + input_ch;
39         if (key->type == 0)
40 +       {
41 +         if (getkey == (int (*)(void)) SLang_getkey)
42 +           SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len);
43           return NULL;
44 +       }
45       }
46  
47     /* It appears to be a prefix character in a key sequence. */
48 @@ -385,6 +392,7 @@
49       {
50         SLang_Key_TimeOut_Flag = 1;
51         SLang_Last_Key_Char = (*getkey)();
52 +       SLang_Undo_Buffer [SLang_Undo_Len++] = (unsigned char) SLang_Last_Key_Char;
53         SLang_Key_TimeOut_Flag = 0;
54  
55         len++;
56 @@ -458,6 +466,8 @@
57         kmax = next;
58       }
59  
60 +   if (getkey == (int (*)(void)) SLang_getkey)
61 +     SLang_ungetkey_string (SLang_Undo_Buffer, SLang_Undo_Len);
62     return NULL;
63  }
64  
65 diff -ur slang.old/src/slkeypad.c slang/src/slkeypad.c
66 --- slang.old/src/slkeypad.c    Fri Apr 24 09:16:47 1998
67 +++ slang/src/slkeypad.c        Sat Jul  4 07:30:31 1998
68 @@ -110,7 +110,7 @@
69     key = SLang_do_key (Keymap_List, (int (*)(void)) SLang_getkey);
70     if ((key == NULL) || (key->type != SLKEY_F_KEYSYM))
71       {
72 -       SLang_flush_input ();
73 +       /* SLang_flush_input (); */
74         return SL_KEY_ERR;
75       }
76