qemacs-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemacs-commit] qemacs extras.c qe.c qe.h


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs extras.c qe.c qe.h
Date: Wed, 12 Mar 2014 05:50:23 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/03/12 05:50:23

Modified files:
        .              : extras.c qe.c qe.h 

Log message:
        fix show-bindings for redefined bindings
        
        * merge find_binding and find_binding1, export as qe_find_binding
        * check if binding is rebound to another command

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/extras.c?cvsroot=qemacs&r1=1.22&r2=1.23
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.155&r2=1.156
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.149&r2=1.150

Patches:
Index: extras.c
===================================================================
RCS file: /sources/qemacs/qemacs/extras.c,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- extras.c    10 Mar 2014 01:56:16 -0000      1.22
+++ extras.c    12 Mar 2014 05:50:23 -0000      1.23
@@ -459,6 +459,8 @@
 {
     int pos;
     buf_t outbuf, *out;
+    KeyDef *kd1 = mode ? mode->first_key : NULL;
+    KeyDef *kd2 = inherit ? qe_state.first_key : NULL;
 
     out = buf_init(&outbuf, buf, size);
     pos = 0;
@@ -466,7 +468,8 @@
         KeyDef *kd = mode ? mode->first_key : qe_state.first_key;
 
         for (; kd != NULL; kd = kd->next) {
-            if (kd->cmd == d) {
+            if (kd->cmd == d
+            &&  qe_find_binding(kd->keys, kd->nb_keys, 2, kd1, kd2) == kd) {
                 if (out->len > pos)
                     buf_puts(out, ", ");
 

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.155
retrieving revision 1.156
diff -u -b -r1.155 -r1.156
--- qe.c        6 Mar 2014 20:36:50 -0000       1.155
+++ qe.c        12 Mar 2014 05:50:23 -0000      1.156
@@ -4321,7 +4321,7 @@
     c->buf[0] = '\0';
 }
 
-static KeyDef *find_binding(unsigned int *keys, int nb_keys, int nroots, ...)
+KeyDef *qe_find_binding(unsigned int *keys, int nb_keys, int nroots, ...)
 {
     KeyDef *kd = NULL;
     va_list ap;
@@ -4330,30 +4330,12 @@
     while (nroots--) {
         for (kd = va_arg(ap, KeyDef *); kd != NULL; kd = kd->next) {
             if (kd->nb_keys >= nb_keys
-            &&  !memcmp(kd->keys, keys, nb_keys * sizeof(keys[0])))
-            {
-                goto found;
-            }
-        }
+            &&  !memcmp(kd->keys, keys, nb_keys * sizeof(keys[0]))) {
+                nroots = 0;
+                break;
     }
-  found:
-    va_end(ap);
-    return kd;
-}
-
-static KeyDef *find_binding1(unsigned int key, int nroots, ...)
-{
-    KeyDef *kd = NULL;
-    va_list ap;
-
-    va_start(ap, nroots);
-    while (nroots--) {
-        for (kd = va_arg(ap, KeyDef *); kd != NULL; kd = kd->next) {
-            if (kd->nb_keys == 1 && kd->keys[0] == key)
-                goto found;
         }
     }
-  found:
     va_end(ap);
     return kd;
 }
@@ -4410,10 +4392,12 @@
     }
 
     /* see if one command is found */
-    if (!(kd = find_binding(c->keys, c->nb_keys, 2,
+    if (!(kd = qe_find_binding(c->keys, c->nb_keys, 2,
                             s->mode->first_key, qs->first_key)))
     {
         /* no key found */
+        unsigned int key_default = KEY_DEFAULT;
+
         if (c->nb_keys == 1) {
             if (!KEY_SPECIAL(key)) {
                 if (c->is_numeric_arg) {
@@ -4430,7 +4414,7 @@
                         goto next;
                     }
                 }
-                kd = find_binding1(KEY_DEFAULT, 2,
+                kd = qe_find_binding(&key_default, 1, 2,
                                    s->mode->first_key, qs->first_key);
                 if (kd) {
                     /* horrible kludge to pass key as intrinsic argument */

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -b -r1.149 -r1.150
--- qe.h        10 Mar 2014 22:11:24 -0000      1.149
+++ qe.h        12 Mar 2014 05:50:23 -0000      1.150
@@ -720,6 +720,7 @@
 /* CG: Should deal with opaque object life cycle */
 void qe_grab_keys(void (*cb)(void *opaque, int key), void *opaque);
 void qe_ungrab_keys(void);
+struct KeyDef *qe_find_binding(unsigned int *keys, int nb_keys, int nroots, 
...);
 
 /* buffer.c */
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]