qemacs-commit
[Top][All Lists]
Advanced

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

[Qemacs-commit] qemacs clang.c extras.c qe.c extra-modes.c lisp...


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs clang.c extras.c qe.c extra-modes.c lisp...
Date: Fri, 30 May 2014 22:57:35 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        14/05/30 22:57:35

Modified files:
        .              : clang.c extras.c qe.c extra-modes.c lisp.c qe.h 

Log message:
        improve key binding handling
        
        * add fallback mode to share key bindings
        * simplify key binding lookup method

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/clang.c?cvsroot=qemacs&r1=1.74&r2=1.75
http://cvs.savannah.gnu.org/viewcvs/qemacs/extras.c?cvsroot=qemacs&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.179&r2=1.180
http://cvs.savannah.gnu.org/viewcvs/qemacs/extra-modes.c?cvsroot=qemacs&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/qemacs/lisp.c?cvsroot=qemacs&r1=1.18&r2=1.19
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.178&r2=1.179

Patches:
Index: clang.c
===================================================================
RCS file: /sources/qemacs/qemacs/clang.c,v
retrieving revision 1.74
retrieving revision 1.75
diff -u -b -r1.74 -r1.75
--- clang.c     30 May 2014 17:37:31 -0000      1.74
+++ clang.c     30 May 2014 22:57:34 -0000      1.75
@@ -1430,6 +1430,7 @@
     .types = c_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef lex_mode = {
@@ -1441,6 +1442,7 @@
     .types = c_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef cpp_mode = {
@@ -1453,6 +1455,7 @@
     .types = cpp_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 static int objc_mode_probe(ModeDef *mode, ModeProbeData *p)
@@ -1480,6 +1483,7 @@
     .types = objc_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef csharp_mode = {
@@ -1492,6 +1496,7 @@
     .types = csharp_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef css_mode = {
@@ -1502,6 +1507,7 @@
     .keywords = css_keywords,
     .types = css_types,
     .indent_func = c_indent_line,
+    .fallback = &c_mode,
 };
 
 ModeDef js_mode = {
@@ -1513,6 +1519,7 @@
     .types = js_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef as_mode = {
@@ -1524,6 +1531,7 @@
     .types = as_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef java_mode = {
@@ -1535,6 +1543,7 @@
     .types = java_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef php_mode = {
@@ -1543,6 +1552,7 @@
     .colorize_flags = CLANG_PHP | CLANG_REGEX,
     .keywords = php_keywords,
     .types = php_types,
+    .fallback = &c_mode,
 };
 
 ModeDef go_mode = {
@@ -1554,6 +1564,7 @@
     .types = go_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef d_mode = {
@@ -1565,6 +1576,7 @@
     .types = d_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef limbo_mode = {
@@ -1576,6 +1588,7 @@
     .types = limbo_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef cyclone_mode = {
@@ -1587,6 +1600,7 @@
     .types = cyclone_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef ch_mode = {
@@ -1598,6 +1612,7 @@
     .types = ch_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef squirrel_mode = {
@@ -1609,6 +1624,7 @@
     .types = squirrel_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef ici_mode = {
@@ -1620,6 +1636,7 @@
     .types = ici_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef jsx_mode = {
@@ -1631,6 +1648,7 @@
     .types = jsx_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef haxe_mode = {
@@ -1642,6 +1660,7 @@
     .types = haxe_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef dart_mode = {
@@ -1653,6 +1672,7 @@
     .types = dart_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef pike_mode = {
@@ -1664,6 +1684,7 @@
     .types = pike_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 static ModeDef idl_mode = {
@@ -1675,6 +1696,7 @@
     .types = idl_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 static int calc_mode_probe(ModeDef *mode, ModeProbeData *p)
@@ -1700,6 +1722,7 @@
     .types = calc_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef enscript_mode = {
@@ -1711,6 +1734,7 @@
     .types = enscript_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 static int qs_mode_probe(ModeDef *mode, ModeProbeData *p)
@@ -1735,6 +1759,7 @@
     .types = qs_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef ec_mode = {
@@ -1746,6 +1771,7 @@
     .types = ec_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 ModeDef sl_mode = {
@@ -1757,6 +1783,7 @@
     .types = sl_types,
     .indent_func = c_indent_line,
     .auto_indent = 1,
+    .fallback = &c_mode,
 };
 
 static int c_init(void)

Index: extras.c
===================================================================
RCS file: /sources/qemacs/qemacs/extras.c,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- extras.c    29 May 2014 11:35:17 -0000      1.32
+++ extras.c    30 May 2014 22:57:34 -0000      1.33
@@ -623,8 +623,6 @@
 {
     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;
@@ -633,7 +631,7 @@
 
         for (; kd != NULL; kd = kd->next) {
             if (kd->cmd == d
-            &&  qe_find_binding(kd->keys, kd->nb_keys, 2, kd1, kd2) == kd) {
+            &&  qe_find_current_binding(kd->keys, kd->nb_keys, mode) == kd) {
                 if (out->len > pos)
                     buf_puts(out, ", ");
 
@@ -643,7 +641,7 @@
         if (!inherit || !mode)
             break;
         /* Should move up to base mode */
-        mode = NULL;
+        mode = mode->fallback;
     }
     return out->len;
 }

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.179
retrieving revision 1.180
diff -u -b -r1.179 -r1.180
--- qe.c        30 May 2014 17:18:15 -0000      1.179
+++ qe.c        30 May 2014 22:57:34 -0000      1.180
@@ -4437,25 +4437,29 @@
     c->buf[0] = '\0';
 }
 
-KeyDef *qe_find_binding(unsigned int *keys, int nb_keys, int nroots, ...)
+KeyDef *qe_find_binding(unsigned int *keys, int nb_keys, KeyDef *kd)
 {
-    KeyDef *kd = NULL;
-    va_list ap;
-
-    va_start(ap, nroots);
-    while (nroots--) {
-        for (kd = va_arg(ap, KeyDef *); kd != NULL; kd = kd->next) {
+    for (; kd != NULL; kd = kd->next) {
             if (kd->nb_keys >= nb_keys
             &&  !memcmp(kd->keys, keys, nb_keys * sizeof(keys[0]))) {
-                nroots = 0;
                 break;
             }
         }
-    }
-    va_end(ap);
     return kd;
 }
 
+KeyDef *qe_find_current_binding(unsigned int *keys, int nb_keys, ModeDef *m)
+{
+    QEmacsState *qs = &qe_state;
+
+    for (; m; m = m->fallback) {
+        KeyDef *kd = qe_find_binding(keys, nb_keys, m->first_key);
+        if (kd != NULL)
+            return kd;
+    }
+    return qe_find_binding(keys, nb_keys, qs->first_key);
+}
+
 static void qe_key_process(int key)
 {
     QEmacsState *qs = &qe_state;
@@ -4508,9 +4512,8 @@
     }
 
     /* see if one command is found */
-    if (!(kd = qe_find_binding(c->keys, c->nb_keys, 2,
-                               s->mode->first_key, qs->first_key)))
-    {
+    kd = qe_find_current_binding(c->keys, c->nb_keys, s->mode);
+    if (!kd) {
         /* no key found */
         unsigned int key_default = KEY_DEFAULT;
 
@@ -4530,8 +4533,7 @@
                         goto next;
                     }
                 }
-                kd = qe_find_binding(&key_default, 1, 2,
-                                     s->mode->first_key, qs->first_key);
+                kd = qe_find_current_binding(&key_default, 1, s->mode);
                 if (kd) {
                     /* horrible kludge to pass key as intrinsic argument */
                     /* CG: should have an argument type for key */

Index: extra-modes.c
===================================================================
RCS file: /sources/qemacs/qemacs/extra-modes.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28

Index: lisp.c
===================================================================
RCS file: /sources/qemacs/qemacs/lisp.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -b -r1.18 -r1.19
--- lisp.c      30 May 2014 20:01:01 -0000      1.18
+++ lisp.c      30 May 2014 22:57:34 -0000      1.19
@@ -370,6 +370,7 @@
     .mode_probe = elisp_mode_probe,
     .colorize_func = lisp_colorize_line,
     .colorize_flags = LISP_LANG_ELISP,
+    .fallback = &lisp_mode,
 };
 
 ModeDef scheme_mode = {
@@ -379,6 +380,7 @@
     .types = lisp_types,
     .colorize_func = lisp_colorize_line,
     .colorize_flags = LISP_LANG_SCHEME,
+    .fallback = &lisp_mode,
 };
 
 ModeDef racket_mode = {
@@ -388,6 +390,7 @@
     .types = lisp_types,
     .colorize_func = lisp_colorize_line,
     .colorize_flags = LISP_LANG_RACKET,
+    .fallback = &lisp_mode,
 };
 
 ModeDef clojure_mode = {
@@ -397,6 +400,7 @@
     .types = lisp_types,
     .colorize_func = lisp_colorize_line,
     .colorize_flags = LISP_LANG_CLOJURE,
+    .fallback = &lisp_mode,
 };
 
 static int lisp_init(void)

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -b -r1.178 -r1.179
--- qe.h        30 May 2014 17:18:13 -0000      1.178
+++ qe.h        30 May 2014 22:57:35 -0000      1.179
@@ -135,6 +135,7 @@
 typedef struct ModeDef ModeDef;
 typedef struct QETimer QETimer;
 typedef struct QEColorizeContext QEColorizeContext;
+typedef struct KeyDef KeyDef;
 
 static inline char *s8(u8 *p) { return (char*)p; }
 static inline const char *cs8(const u8 *p) { return (const char*)p; }
@@ -736,7 +737,8 @@
 /* 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, 
...);
+KeyDef *qe_find_binding(unsigned int *keys, int nb_keys, KeyDef *kd);
+KeyDef *qe_find_current_binding(unsigned int *keys, int nb_keys, ModeDef *m);
 
 #define COLORED_MAX_LINE_SIZE  4096
 
@@ -1258,6 +1260,8 @@
     /* mode specific key bindings */
     struct KeyDef *first_key;
 
+    ModeDef *fallback;  /* use bindings from fallback mode */
+
     ModeDef *next;
 };
 
@@ -1409,12 +1413,12 @@
 
 #define MAX_KEYS 10
 
-typedef struct KeyDef {
+struct KeyDef {
     struct KeyDef *next;
     struct CmdDef *cmd;
     int nb_keys;
     unsigned int keys[1];
-} KeyDef;
+};
 
 void unget_key(int key);
 



reply via email to

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