Changeset 83ae07dae4f92f9cea49d1ab26f4e6a92fbe8db9

Show
Ignore:
Timestamp:
03/13/09 01:25:32 (5 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1236907532 +0000
git-parent:

[6480ae14408dabfad215b4f1369579f864f4b558]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1236907532 +0000
Message:

more hacks... works for me now, refs #105

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/noitedit/key.c

    r6480ae1 r83ae07d  
    7171#include <stdlib.h> 
    7272#include <errno.h> 
     73#include <assert.h> 
    7374 
    7475#include "noitedit/el.h" 
     
    182183{ 
    183184#ifdef DEBUG_KEY 
    184         (void) el->el_err_printf(el, "key_get (%p) [%02x]\r\n", 
    185                                  el->el_keystate, *ch); 
     185        (void) el->el_err_printf(el, "key_get (%p [%02x]) [%02x]\r\n", 
     186                                 el->el_keystate, el->el_keystate ? el->el_keystate->ch : 0, *ch); 
    186187#endif 
    187188        return (node_trav(el, el->el_keystate ? el->el_keystate : el->el_key.map, ch, val)); 
     
    285286node_trav(EditLine *el, key_node_t *ptr, char *ch, key_value_t *val) 
    286287{ 
    287         el->el_keystate = NULL; 
     288        int meta = 0; 
     289        if(el->el_keystate && (unsigned char)el->el_keystate->ch == 0x1b) { 
     290                /* A previous character exists and it is 0x1b (ESC) */ 
     291                meta = 1; 
     292        } 
    288293        if (ptr->ch == *ch) { 
    289294                /* match found */ 
     
    300305                                /* PWP: Pretend we just read an end-of-file */ 
    301306                        } 
     307                        el->el_keystate = NULL; 
    302308                        return (node_trav(el, ptr->next, ch, val)); 
    303309                } else { 
     
    305311                        if (ptr->type != XK_CMD) 
    306312                                *ch = '\0'; 
     313                        el->el_keystate = NULL; 
    307314                        return (ptr->type); 
    308315                } 
     
    315322                        /* no next sibling -- mismatch */ 
    316323                        val->str = NULL; 
     324                        el->el_keystate = NULL; 
     325                        if(meta && el->el_map.type == MAP_EMACS) { 
     326                                *ch |= 0200; 
     327                                val->cmd = el->el_map.emacs[(unsigned char) *ch]; 
     328                                return XK_CMD; 
     329                        } 
    317330                        return (XK_STR); 
    318331                } 
  • src/noitedit/read.c

    r6480ae1 r83ae07d  
    252252                } 
    253253                cmd = el->el_map.current[(unsigned char) *ch]; 
    254                 if (cmd == ED_SEQUENCE_LEAD_IN) { 
     254                if (cmd == ED_SEQUENCE_LEAD_IN || el->el_keystate) { 
    255255                        key_value_t val; 
    256256                        switch (key_get(el, ch, &val)) {