[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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs clang.c extras.c qe.c extra-modes.c lisp...,
Charlie Gordon <=