qemacs-commit
[Top][All Lists]
Advanced

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

[Qemacs-commit] qemacs buffer.c clang.c dired.c hex.c html.c im...


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs buffer.c clang.c dired.c hex.c html.c im...
Date: Thu, 27 Dec 2007 10:04:10 +0000

CVSROOT:        /cvsroot/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        07/12/27 10:04:10

Modified files:
        .              : buffer.c clang.c dired.c hex.c html.c image.c 
                         latex-mode.c qe.c qe.h qeconfig.h shell.c 
        plugin-example : my_plugin.c 

Log message:
        renamed set_buffer_name to eb_set_buffer_name
        made log buffer more readable with log structure padding trick
        renamed set_filename to eb_set_filename
        added CmdSig enum and CmdProto union for signature based command 
dispatcher
        changed CmdDef structure, val is now required to be an integer (24 bits)
        intrinsic string argument ('S') is now passed as prompt with S{xxx} 
syntax
        changed set-mode functions and do_define_kbd_macro accordingly
        added signature in CMD_ and CMDV macros
        renamed do_load to do_find_file

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/buffer.c?cvsroot=qemacs&r1=1.27&r2=1.28
http://cvs.savannah.gnu.org/viewcvs/qemacs/clang.c?cvsroot=qemacs&r1=1.21&r2=1.22
http://cvs.savannah.gnu.org/viewcvs/qemacs/dired.c?cvsroot=qemacs&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/qemacs/hex.c?cvsroot=qemacs&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/qemacs/html.c?cvsroot=qemacs&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/qemacs/image.c?cvsroot=qemacs&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/qemacs/latex-mode.c?cvsroot=qemacs&r1=1.19&r2=1.20
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.55&r2=1.56
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.51&r2=1.52
http://cvs.savannah.gnu.org/viewcvs/qemacs/qeconfig.h?cvsroot=qemacs&r1=1.23&r2=1.24
http://cvs.savannah.gnu.org/viewcvs/qemacs/shell.c?cvsroot=qemacs&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/qemacs/plugin-example/my_plugin.c?cvsroot=qemacs&r1=1.2&r2=1.3

Patches:
Index: buffer.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/buffer.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -b -r1.27 -r1.28
--- buffer.c    26 Dec 2007 11:09:34 -0000      1.27
+++ buffer.c    27 Dec 2007 10:04:09 -0000      1.28
@@ -434,7 +434,7 @@
 }
 
 /* rename a buffer and add characters so that the name is unique */
-void set_buffer_name(EditBuffer *b, const char *name1)
+void eb_set_buffer_name(EditBuffer *b, const char *name1)
 {
     char name[sizeof(b->name)];
     int n, pos;
@@ -461,6 +461,7 @@
     if (!b)
         return NULL;
 
+    // should ensure name uniqueness ?
     pstrcpy(b->name, sizeof(b->name), name);
     b->flags = flags;
 
@@ -738,6 +739,11 @@
         return;
     if (!b->log_buffer) {
         char buf[MAX_BUFFERNAME_SIZE];
+        /* Name should be unique because b->name is, but b->name may
+         * later change if buffer is written to a different file.  This
+         * should not be a problem since this log buffer is never
+         * referenced by name.
+         */
         snprintf(buf, sizeof(buf), "*log <%s>*", b->name);
         b->log_buffer = eb_new(buf, BF_SYSTEM);
         if (!b->log_buffer)
@@ -759,8 +765,8 @@
     }
 
     /* header */
-    //lb.pad1 = '\n';   /* make log buffer display readable */
-    //lb.pad2 = ':';
+    lb.pad1 = '\n';   /* make log buffer display readable */
+    lb.pad2 = ':';
     lb.op = op;
     lb.offset = offset;
     lb.size = size;
@@ -1453,11 +1459,10 @@
 
 /* Associate a buffer with a file and rename it to match the
    filename. Find a unique buffer name */
-// should rename to eb_set_filename?
-void set_filename(EditBuffer *b, const char *filename)
+void eb_set_filename(EditBuffer *b, const char *filename)
 {
     pstrcpy(b->filename, sizeof(b->filename), filename);
-    set_buffer_name(b, basename(filename));
+    eb_set_buffer_name(b, basename(filename));
 }
 
 int eb_printf(EditBuffer *b, const char *fmt, ...)

Index: clang.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/clang.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- clang.c     26 Dec 2007 09:55:35 -0000      1.21
+++ clang.c     27 Dec 2007 10:04:09 -0000      1.22
@@ -749,33 +749,33 @@
 
 /* C mode specific commands */
 static CmdDef c_commands[] = {
-    CMD_( KEY_CTRL('i'), KEY_NONE, "c-indent-command", do_c_indent, "*")
+    CMD_( KEY_CTRL('i'), KEY_NONE, "c-indent-command", do_c_indent, ES, "*")
     CMD_( KEY_META(KEY_CTRL('\\')), KEY_NONE, "c-indent-region",
-          do_c_indent_region, "*")
+          do_c_indent_region, ES, "*")
             /* should map to KEY_META + KEY_CTRL_LEFT ? */
     CMDV( KEY_META('['), KEY_NONE,
-          "c-backward-preprocessor", do_c_forward_preprocessor, -1, "*v")
+          "c-backward-preprocessor", do_c_forward_preprocessor, ESi, -1, "*v")
     CMDV( KEY_META(']'), KEY_NONE, 
-          "c-forward-preprocessor", do_c_forward_preprocessor, 1, "*v")
+          "c-forward-preprocessor", do_c_forward_preprocessor, ESi, 1, "*v")
     /* CG: should use 'k' intrinsic argument */
-    CMDV( ';', KEY_NONE, "c-electric-semi&comma", do_c_electric, ';', "*v")
-    CMDV( ':', KEY_NONE, "c-electric-colon", do_c_electric, ':', "*v")
-    CMDV( '{', KEY_NONE, "c-electric-obrace", do_c_electric, '{', "*v")
-    CMDV( '}', KEY_NONE, "c-electric-cbrace", do_c_electric, '}', "*v")
+    CMDV( ';', KEY_NONE, "c-electric-semi&comma", do_c_electric, ESi, ';', 
"*v")
+    CMDV( ':', KEY_NONE, "c-electric-colon", do_c_electric, ESi, ':', "*v")
+    CMDV( '{', KEY_NONE, "c-electric-obrace", do_c_electric, ESi, '{', "*v")
+    CMDV( '}', KEY_NONE, "c-electric-cbrace", do_c_electric, ESi, '}', "*v")
     CMD_DEF_END,
 };
 
 /* Non C mode specific commands */
-static CmdDef extra_commands[] = {
+static CmdDef c_global_commands[] = {
     CMDV( KEY_META(KEY_CTRL('b')), KEY_NONE,
-          "c-backward-block", do_c_forward_block, -1, "*v")
+          "c-backward-block", do_c_forward_block, ESi, -1, "*v")
             /* should map to KEY_META + KEY_CTRL_RIGHT */
     CMDV( KEY_META(KEY_CTRL('f')), KEY_NONE,
-          "c-forward-block", do_c_forward_block, 1, "*v")
+          "c-forward-block", do_c_forward_block, ESi, 1, "*v")
     CMDV( KEY_META(KEY_CTRL('k')), KEY_NONE,
-          "c-kill-block", do_c_kill_block, 1, "*v")
+          "c-kill-block", do_c_kill_block, ESi, 1, "*v")
     CMDV( KEY_ESC, KEY_DELETE,
-          "c-backward-kill-block", do_c_kill_block, -1, "*v")
+          "c-backward-kill-block", do_c_kill_block, ESi, -1, "*v")
     CMD_DEF_END,
 };
 
@@ -791,7 +791,7 @@
 
     qe_register_mode(&c_mode);
     qe_register_cmd_table(c_commands, "C");
-    qe_register_cmd_table(extra_commands, NULL);
+    qe_register_cmd_table(c_global_commands, NULL);
 
     return 0;
 }

Index: dired.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/dired.c,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- dired.c     15 Dec 2007 16:44:31 -0000      1.13
+++ dired.c     27 Dec 2007 10:04:09 -0000      1.14
@@ -232,7 +232,7 @@
 
     /* CG: should make absolute ? */
     canonize_path(hs->path, sizeof(hs->path), path);
-    set_filename(s->b, hs->path);
+    eb_set_filename(s->b, hs->path);
     s->b->flags |= BF_DIRED;
 
     ffst = find_file_open(hs->path, "*");
@@ -356,7 +356,7 @@
             /* remove preview flag */
             e->b->flags &= ~BF_PREVIEW;
         } else {
-            do_load(s, filename);
+            do_find_file(s, filename);
         }
     }
 }
@@ -385,7 +385,7 @@
     }
 
     if (e) {
-        do_load(e, filename);
+        do_find_file(e, filename);
         /* disable wrapping to get nicer display */
         e->wrap = WRAP_TRUNCATE;
         b = e->b;
@@ -510,7 +510,7 @@
     if (p)
         *p = '\0';
     canonize_absolute_path(filename, sizeof(filename), filename);
-    set_filename(b, filename);
+    eb_set_filename(b, filename);
     
     width = qs->width / 5;
     e = insert_window_left(b, width, WF_MODELINE);
@@ -544,7 +544,7 @@
     CMD1( KEY_CTRL('g'), KEY_NONE, "dired-abort", do_delete_window, 0)
     CMD0( ' ', KEY_CTRL('t'), "dired-toggle_selection", list_toggle_selection)
     /* BS should go back to previous item and unmark it */
-    CMD_( 's', KEY_NONE, "dired-sort", dired_sort, "s{Sort order: }")
+    CMD_( 's', KEY_NONE, "dired-sort", dired_sort, ESs, "s{Sort order: }")
     /* s -> should also change switches */
     CMD1( 'd', KEY_NONE, "dired-delete", dired_mark, 'D')
     CMD1( 'c', KEY_NONE, "dired-copy", dired_mark, 'C')

Index: hex.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/hex.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- hex.c       26 Dec 2007 11:09:34 -0000      1.14
+++ hex.c       27 Dec 2007 10:04:09 -0000      1.15
@@ -123,8 +123,8 @@
 static CmdDef hex_commands[] = {
     CMD1( KEY_NONE, KEY_NONE, "decrease-width", do_incr_width, -1)
     CMD1( KEY_NONE, KEY_NONE, "increase-width", do_incr_width, 1)
-    CMD_( KEY_NONE, KEY_NONE, "set-width", do_set_width, "ui{Width: }")
-    CMDV( KEY_META('g'), KEY_NONE, "goto-byte", do_goto, 'b', "us{Goto byte: 
}v")
+    CMD_( KEY_NONE, KEY_NONE, "set-width", do_set_width, ESi, "ui{Width: }")
+    CMDV( KEY_META('g'), KEY_NONE, "goto-byte", do_goto, ESsi, 'b', "us{Goto 
byte: }v")
     CMD0( KEY_NONE, KEY_NONE, "toggle-hex", do_toggle_hex)
     CMD_DEF_END,
 };

Index: html.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/html.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- html.c      25 Dec 2007 07:54:00 -0000      1.11
+++ html.c      27 Dec 2007 10:04:09 -0000      1.12
@@ -867,9 +867,9 @@
 /* specific html commands */
 static CmdDef html_commands[] = {
     /* should use 'k' intrinsic argument */
-    CMDV( '<', KEY_NONE, "html-electric-lt", do_html_electric, '<', "*v")
-    CMDV( '>', KEY_NONE, "html-electric-gt", do_html_electric, '>', "*v")
-    CMDV( '&', KEY_NONE, "html-electric-amp", do_html_electric, '&', "*v")
+    CMDV( '<', KEY_NONE, "html-electric-lt", do_html_electric, ESi, '<', "*v")
+    CMDV( '>', KEY_NONE, "html-electric-gt", do_html_electric, ESi, '>', "*v")
+    CMDV( '&', KEY_NONE, "html-electric-amp", do_html_electric, ESi, '&', "*v")
     CMD_DEF_END,
 };
 

Index: image.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/image.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- image.c     12 Dec 2007 11:49:02 -0000      1.12
+++ image.c     27 Dec 2007 10:04:09 -0000      1.13
@@ -801,10 +801,10 @@
 /* specific image commands */
 static CmdDef image_commands[] = {
     CMD0( 't', KEY_NONE, "image-rotate", image_rotate)
-    CMD_( 'c', KEY_NONE, "image-convert", image_convert,
+    CMD_( 'c', KEY_NONE, "image-convert", image_convert, ESs,
           "s{New pixel format: }[pixel_format]|pixel_format|")
     CMD_( 'b', KEY_NONE, "image-set-background-color",
-          image_set_background_color,
+          image_set_background_color, ESs,
           "s{Background color (use 'transparent' for tiling): }")
 #if 1
     CMD0( 'n', KEY_NONE, "image-normal-size", image_normal_size)
@@ -812,7 +812,7 @@
     CMD1( '<', KEY_NONE, "image-halve-size", image_mult_size, -50)
     CMD1( '.', KEY_NONE, "image-larger-10", image_mult_size, 10)
     CMD1( ',', KEY_NONE, "image-smaller-10", image_mult_size, -10)
-    CMD_( 'S', KEY_NONE, "image-set-display-size", image_set_size,
+    CMD_( 'S', KEY_NONE, "image-set-display-size", image_set_size, ESii,
           "i{Displayed width: }i{Displayed height: }")
 #endif
     CMD_DEF_END,

Index: latex-mode.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/latex-mode.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -b -r1.19 -r1.20
--- latex-mode.c        20 Dec 2007 20:41:19 -0000      1.19
+++ latex-mode.c        27 Dec 2007 10:04:10 -0000      1.20
@@ -317,9 +317,9 @@
 
 /* specific LaTeX commands */
 static CmdDef latex_commands[] = {
-    CMD_( '\"', KEY_NONE, "tex-insert-quote", do_tex_insert_quote, "*")
+    CMD_( '\"', KEY_NONE, "tex-insert-quote", do_tex_insert_quote, ES, "*")
     /* this should actually be KEY_CTRLC(KEY_CTRL('c')), ie C-c C-c */
-    CMD_( KEY_CTRL('c'), KEY_NONE, "TeX-command-master", do_latex,
+    CMD_( KEY_CTRL('c'), KEY_NONE, "TeX-command-master", do_latex, ESs,
           "s{Command: (default LaTeX) }[latex]|latex|")
     CMD_DEF_END,
 };

Index: qe.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/qe.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -u -b -r1.55 -r1.56
--- qe.c        26 Dec 2007 10:20:09 -0000      1.55
+++ qe.c        27 Dec 2007 10:04:10 -0000      1.56
@@ -68,7 +68,7 @@
 void qe_register_mode(ModeDef *m)
 {
     ModeDef **p;
-    CmdDef *table;
+    CmdDef *def;
 
     /* record mode in mode list */
     p = &qe_state.first_mode;
@@ -88,25 +88,24 @@
     
     /* add a new command to switch to that mode */
     if (!(m->mode_flags & MODEF_NOCMD)) {
-        char buf[64], *name;
+        char buf[64];
         int size;
 
-        table = qe_mallocz_array(CmdDef, 2);
-        table->key = KEY_NONE;
-        table->alt_key = KEY_NONE;
-
         /* lower case convert for C mode */
         pstrcpy(buf, sizeof(buf) - 10, m->name);
         css_strtolower(buf, sizeof(buf));
         pstrcat(buf, sizeof(buf) - 10, "-mode");
         size = strlen(buf) + 1;
-        buf[size++] = 'S'; /* constant string parameter */
-        buf[size++] = '\0';
-        name = qe_malloc_dup(buf, size);
-        table->name = name;
-        table->action.func = (void*)do_cmd_set_mode;
-        table->val = qe_strdup(m->name);
-        qe_register_cmd_table(table, NULL);
+        /* constant immediate string parameter */
+        size += snprintf(buf + size, sizeof(buf) - size,
+                         "S{%s}", m->name) + 1;
+        def = qe_mallocz_array(CmdDef, 2);
+        def->name = qe_malloc_dup(buf, size);
+        def->key = def->alt_key = KEY_NONE;
+        def->sig = CMD_ESs;
+        def->val = 0;
+        def->action.ESs = do_cmd_set_mode;
+        qe_register_cmd_table(def, NULL);
     }
 }
 
@@ -3245,60 +3244,48 @@
     char default_input[512]; /* default input if none given */
 } ExecCmdState;
 
-/* XXX: potentially non portable on weird architectures */
-/* Minimum assumptions are:
-   - sizeof(int) == sizeof(void*) == sizeof(char*)
-   - arguments are passed the same way for all above types
-   - arguments are passed the same way for prototyped and
-     unprototyped functions
-   These assumptions could be lifted by constructing an
-   argument list signature in parse_args() and switch here
-   to the correct prototype invocation.
+/* Signature based dispatcher.
    So far 144 qemacs commands have these signatures:
    - void (*)(EditState *); (68)
    - void (*)(EditState *, int); (35)
-   - void (*)(EditState *, int, int); (2)
    - void (*)(EditState *, const char *); (19)
+   - void (*)(EditState *, int, int); (2)
    - void (*)(EditState *, const char *, int); (2)
    - void (*)(EditState *, const char *, const char *); (6)
    - void (*)(EditState *, const char *, const char *, const char *); (2)
+   - void (*)(EditState *, const char *, const char *, int); (2)
 */
-/* FIXME: fix this for 64 bit architectures where
- * sizeof(void*) != sizeof(int)
- * First argument is always EditState*, handling all P / I combinations
- * requires 1 + 2 + 4 + 8 + 16 = 31 cases of which only 7 are used.
- * long arguments would still not be supported if these cannot be
- * passed as pointers (but long arguments are not supported anyway).
- * should pass function signature for direct dispatch.
- */
-void call_func(void *func, int nb_args, CmdArg *args, 
-               unsigned char *args_type)
+void call_func(CmdSig sig, CmdProto func, __unused__ int nb_args,
+               CmdArg *args, __unused__ unsigned char *args_type)
 {
-    switch (nb_args) {
-    case 0:
-        ((void (*)(void))func)();
+    switch (sig) {
+    case CMD_void:
+        ((void (*)(void))func.func)();
         break;
-    case 1:
-        ((void (*)(void *))func)(args[0].p);
+    case CMD_ES:     /* ES, no other arguments */
+        (*func.ES)(args[0].s);
         break;
-    case 2:
-        if (args_type[1] <= CMD_ARG_INTVAL) {
-            ((void (*)(void *, int))func)(args[0].p, args[1].n);
-        } else {
-            ((void (*)(void *, void *))func)(args[0].p, args[1].p);
-        }
+    case CMD_ESi:    /* ES + integer */
+        (*func.ESi)(args[0].s, args[1].n);
         break;
-    case 3:
-        ((void (*)(void *, void *, void *))func)(args[0].p, args[1].p, 
args[2].p);
+    case CMD_ESs:    /* ES + string */
+        (*func.ESs)(args[0].s, args[1].p);
         break;
-    case 4:
-        ((void (*)(void *, void *, void *, void *))func)(args[0].p, args[1].p, 
args[2].p, args[3].p);
+    case CMD_ESss:   /* ES + string + string */
+        (*func.ESss)(args[0].s, args[1].p, args[2].p);
         break;
-    case 5:
-        ((void (*)(void *, void *, void *, void *, void *))func)(args[0].p, 
args[1].p, args[2].p, args[3].p, args[4].p);
+    case CMD_ESsi:   /* ES + string + integer */
+        (*func.ESsi)(args[0].s, args[1].p, args[2].n);
+        break;
+    case CMD_ESii:   /* ES + integer + integer */
+        (*func.ESii)(args[0].s, args[1].n, args[2].n);
+        break;
+    case CMD_ESssi:  /* ES + string + string + integer */
+        (*func.ESssi)(args[0].s, args[1].p, args[2].p, args[3].n);
+        break;
+    case CMD_ESsss:  /* ES + string + string + string */
+        (*func.ESsss)(args[0].s, args[1].p, args[2].p, args[3].p);
         break;
-    default:
-        return;
     }
 }
 
@@ -3402,7 +3389,7 @@
     es->nb_args = 0;
 
     /* first argument is always the window */
-    es->args[0].p = s;
+    es->args[0].s = s;
     es->args_type[0] = CMD_ARG_WINDOW;
     es->nb_args++;
     es->ptype = argdesc;
@@ -3439,10 +3426,10 @@
         get_arg = 0;
         switch (type) {
         case CMD_ARG_INTVAL:
-            es->args[es->nb_args].n = (int)(intptr_t)d->val;
+            es->args[es->nb_args].n = d->val;
             break;
         case CMD_ARG_STRINGVAL:
-            es->args[es->nb_args].p = d->val;
+            es->args[es->nb_args].p = prompt;
             break;
         case CMD_ARG_INT:
             if (use_argval && es->argval != NO_ARG) {
@@ -3479,7 +3466,7 @@
             } else
             if (!strcmp(completion_name, "buffer")) {
                 EditBuffer *b;
-                if (d->action.func == (void *)do_switch_to_buffer)
+                if (d->action.ESs == do_switch_to_buffer)
                     b = predict_switch_to_buffer(s);
                 else
                     b = s->b;
@@ -3510,10 +3497,10 @@
 
     do {
         /* special case for hex mode */
-        if (d->action.func != (void *)do_char) {
+        if (d->action.ESii != do_char) {
             s->hex_nibble = 0;
             /* special case for character composing */
-            if (d->action.func != (void *)do_backspace)
+            if (d->action.ESi != do_backspace)
                 s->compose_len = 0;
         }
 #ifndef CONFIG_TINY
@@ -3521,7 +3508,7 @@
 #endif
         /* CG: Should save and restore ec context */
         qs->ec.function = d->name;
-        call_func(d->action.func, es->nb_args, es->args, es->args_type);
+        call_func(d->sig, d->action, es->nb_args, es->args, es->args_type);
         /* CG: This doesn't work if the function needs input */
         /* CG: Should test for abort condition */
         /* CG: Should follow qs->active_window ? */
@@ -3763,20 +3750,18 @@
 {
     CmdDef *def;
     int size;
-    char *macro_name, *p;
+    char *buf;
 
-    size = strlen(name) + 1;
-    macro_name = qe_malloc_array(char, size + 2);
-    memcpy(macro_name, name, size);
-    p = macro_name + size;
-    *p++ = 'S';
-    *p++ = '\0';
+    size = strlen(name) + 1 + 2 + strlen(keys) + 2;
+    buf = qe_malloc_array(char, size);
+    snprintf(buf, size, "%s%cS{%s}", name, 0, keys);
 
     def = qe_mallocz_array(CmdDef, 2);
     def->key = def->alt_key = KEY_NONE;
-    def->name = macro_name;
-    def->action.func = do_execute_macro_keys;
-    def->val = qe_strdup(keys);
+    def->name = buf;
+    def->sig = CMD_ESs;
+    def->val = 0;
+    def->action.ESs = do_execute_macro_keys;
 
     qe_register_cmd_table(def, NULL);
     do_global_set_key(s, key_bind, name);
@@ -3937,7 +3922,7 @@
                 if (kd) {
                     /* horrible kludge to pass key as intrinsic argument */
                     /* CG: should have an argument type for key */
-                    kd->cmd->val = (void *)key;
+                    kd->cmd->val = key;
                     goto exec_cmd;
                 }
             }
@@ -3956,8 +3941,7 @@
     if (c->nb_keys == kd->nb_keys) {
     exec_cmd:
         d = kd->cmd;
-        if (d->action.func == (void *)do_universal_argument && 
-            !c->describe_key) {
+        if (d->action.ES == do_universal_argument && !c->describe_key) {
             /* special handling for universal argument */
             c->is_universal_arg = 1;
             if (key == KEY_META('-')) {
@@ -5025,7 +5009,7 @@
 
     /* create new buffer */
     b = eb_new("", BF_SAVELOG);
-    set_filename(b, filename);
+    eb_set_filename(b, filename);
 
     /* switch to the newly created buffer */
     switch_to_buffer(s, b);
@@ -5118,7 +5102,7 @@
 }
 #endif
 
-void do_load(EditState *s, const char *filename)
+void do_find_file(EditState *s, const char *filename)
 {
     do_load1(s, filename, 0, 0);
 }
@@ -5139,7 +5123,7 @@
 
     f = fopen(filename, "r");
     if (!f) {
-        put_status(s, "Could not insert file '%s'", filename);
+        put_status(s, "Could not open file '%s'", filename);
         return;
     }
     raw_load_buffer1(s->b, f, s->offset);
@@ -5156,7 +5140,7 @@
         if (rename(s->b->filename, path))
             put_status(s, "Cannot rename file to %s", path);
     }
-    set_filename(s->b, path);
+    eb_set_filename(s->b, path);
 }
 
 static void put_save_message(EditState *s, const char *filename, int nb)
@@ -6654,7 +6638,7 @@
     QErrorContext ec = qs->ec;
     FILE *f;
     char line[1024], str[1024];
-    char cmd[128], *q, *strp;
+    char prompt[64], cmd[128], *q, *strp;
     const char *p, *r;
     int err, line_num;
     CmdDef *d;
@@ -6751,7 +6735,8 @@
             unsigned char arg_type;
             int ret;
 
-            ret = parse_arg(&r, &arg_type, NULL, 0, NULL, 0, NULL, 0);
+            ret = parse_arg(&r, &arg_type, prompt, sizeof(prompt),
+                            NULL, 0, NULL, 0);
             if (ret < 0)
                 goto badcmd;
             if (ret == 0)
@@ -6775,13 +6760,14 @@
             /* pseudo arguments: skip them */
             switch (args_type[i]) {
             case CMD_ARG_WINDOW:
-                args[i].p = s;
+                args[i].s = s;
                 continue;
             case CMD_ARG_INTVAL:
                 args[i].n = (int)(intptr_t)d->val;
                 continue;
             case CMD_ARG_STRINGVAL:
-                args[i].p = d->val;
+                /* CG: kludge for xxx-mode functions and named kbd macros */
+                args[i].p = prompt;
                 continue;
             }
             
@@ -6851,7 +6837,7 @@
 
         qs->this_cmd_func = d->action.func;
         qs->ec.function = d->name;
-        call_func(d->action.func, nb_args, args, args_type);
+        call_func(d->sig, d->action, nb_args, args, args_type);
         qs->last_cmd_func = qs->this_cmd_func;
         if (qs->active_window)
             s = qs->active_window;
@@ -7457,7 +7443,7 @@
 
     /* load file(s) */
     for (i = _optind; i < argc; i++) {
-        do_load(s, argv[i]);
+        do_find_file(s, argv[i]);
         /* CG: handle +linenumber */
     }
     

Index: qe.h
===================================================================
RCS file: /cvsroot/qemacs/qemacs/qe.h,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -b -r1.51 -r1.52
--- qe.h        26 Dec 2007 11:09:34 -0000      1.51
+++ qe.h        27 Dec 2007 10:04:10 -0000      1.52
@@ -729,7 +729,7 @@
 /* the log buffer is used for the undo operation */
 /* header of log operation */
 typedef struct LogBuffer {
-    //u8 pad1, pad2;    /* for Log buffer readability */
+    u8 pad1, pad2;    /* for Log buffer readability */
     u8 op;
     u8 was_modified;
     int offset;
@@ -772,9 +772,10 @@
 int mmap_buffer(EditBuffer *b, const char *filename);
 int eb_write_buffer(EditBuffer *b, int start, int end, const char *filename);
 int eb_save_buffer(EditBuffer *b);
-// should rename to eb_set_buffername and eb_set_filename
-void set_buffer_name(EditBuffer *b, const char *name1);
-void set_filename(EditBuffer *b, const char *filename);
+
+void eb_set_buffer_name(EditBuffer *b, const char *name1);
+void eb_set_filename(EditBuffer *b, const char *filename);
+
 int eb_add_callback(EditBuffer *b, EditBufferCallback cb, void *opaque);
 void eb_free_callback(EditBuffer *b, EditBufferCallback cb, void *opaque);
 void eb_offset_callback(EditBuffer *b,
@@ -1176,36 +1177,61 @@
     CMD_ARG_USE_ARGVAL = 0x80,
 };
 
+typedef enum CmdSig {
+    CMD_void = 0,
+    CMD_ES,     /* ES, no other arguments */
+    CMD_ESi,    /* ES + integer */
+    CMD_ESs,    /* ES + string */
+    CMD_ESii,   /* ES + integer + integer */
+    CMD_ESsi,   /* ES + string + integer */
+    CMD_ESss,   /* ES + string + string */
+    CMD_ESssi,  /* ES + string + string + integer */
+    CMD_ESsss,  /* ES + string + string + string */
+} CmdSig;
+
 #define MAX_CMD_ARGS 5
 
 typedef union CmdArg {
-    void *p;
+    EditState *s;
+    const char *p;
     int n;
 } CmdArg;
 
-// should have enum for supported signatures
+typedef union CmdProto {
+    void *func;
+    void (*ES)(EditState *);
+    void (*ESi)(EditState *, int);
+    void (*ESs)(EditState *, const char *);
+    void (*ESii)(EditState *, int, int);
+    void (*ESsi)(EditState *, const char *, int);
+    void (*ESss)(EditState *, const char *, const char *);
+    void (*ESssi)(EditState *, const char *, const char *, int);
+    void (*ESsss)(EditState *, const char *, const char *, const char *);
+    struct CmdDef *next;
+} CmdProto;
 
 typedef struct CmdDef {
     unsigned short key;       /* normal key */
     unsigned short alt_key;   /* alternate key */
     const char *name;
-    union {
-        // should have union members for all supported signatures
-        void *func;
-        struct CmdDef *next;
-    } action;
-    // should be CmdArg arg;
-    void *val;
+    CmdProto action;
+    CmdSig sig : 8;
+    int val : 24;
 } CmdDef;
 
 /* new command macros */
-#define CMD_(key, key_alt, name, func, args) { key, key_alt, name "\0" args, { 
(void *)(func) }, NULL },
-#define CMDV(key, key_alt, name, func, val, args) { key, key_alt, name "\0" 
args, { (void *)(func) }, (void *)(val) },
+#define CMD_(key, key_alt, name, func, sig, args) \
+    { key, key_alt, name "\0" args, { .sig = func }, CMD_ ## sig, 0 },
+#define CMDV(key, key_alt, name, func, sig, val, args) \
+    { key, key_alt, name "\0" args, { .sig = func }, CMD_ ## sig, val },
 
 /* old macros for compatibility */
-#define CMD0(key, key_alt, name, func) { key, key_alt, name "\0", { (void 
*)(func) }, NULL },
-#define CMD1(key, key_alt, name, func, val) { key, key_alt, name "\0v", { 
(void *)(func) }, (void*)(val) },
-#define CMD_DEF_END { 0, 0, NULL, { NULL }, NULL }
+#define CMD0(key, key_alt, name, func) \
+    { key, key_alt, name "\0", { .ES = func }, CMD_ES, 0 },
+#define CMD1(key, key_alt, name, func, val) \
+    { key, key_alt, name "\0v", { .ESi = func }, CMD_ESi, val },
+#define CMD_DEF_END \
+    { 0, 0, NULL, { NULL }, CMD_void, 0 }
 
 void qe_register_mode(ModeDef *m);
 void mode_completion(StringArray *cs, const char *input);
@@ -1433,7 +1459,7 @@
 
 /* loading files */
 void do_exit_qemacs(EditState *s, int argval);
-void do_load(EditState *s, const char *filename);
+void do_find_file(EditState *s, const char *filename);
 void do_load_from_path(EditState *s, const char *filename);
 void do_switch_to_buffer(EditState *s, const char *bufname);
 void do_break(EditState *s);
@@ -1555,7 +1581,8 @@
 void do_toggle_mode_line(EditState *s);
 void do_set_system_font(EditState *s, const char *qe_font_name, 
                         const char *system_fonts);
-void call_func(void *func, int nb_args, CmdArg *args, unsigned char 
*args_type);
+void call_func(CmdSig sig, CmdProto func, int nb_args, CmdArg *args,
+               unsigned char *args_type);
 void exec_command(EditState *s, CmdDef *d, int argval);
 void do_execute_command(EditState *s, const char *cmd, int argval);
 void window_display(EditState *s);

Index: qeconfig.h
===================================================================
RCS file: /cvsroot/qemacs/qemacs/qeconfig.h,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- qeconfig.h  26 Dec 2007 10:20:09 -0000      1.23
+++ qeconfig.h  27 Dec 2007 10:04:10 -0000      1.24
@@ -26,8 +26,10 @@
 
     /*---------------- Simple commands ----------------*/
 
-    CMDV( KEY_DEFAULT, KEY_NONE, "self-insert-command", do_char, ' ', "*vui")
-    CMD_( KEY_META('#'), KEY_NONE, "insert-char", do_char, "*i{Insert char: 
}ui")
+    CMDV( KEY_DEFAULT, KEY_NONE, "self-insert-command", do_char, ESii, ' ',
+          "*" "v" "ui")
+    CMD_( KEY_META('#'), KEY_NONE, "insert-char", do_char, ESii,
+          "*" "i{Insert char: }" "ui")
     CMD1( KEY_CTRL('p'), KEY_UP, "previous-line", do_up_down, -1 )
     CMD1( KEY_CTRL('n'), KEY_DOWN, "next-line", do_up_down, 1 )
     CMD1( KEY_CTRL('b'), KEY_LEFT, "backward-char", do_left_right, -1 )
@@ -43,16 +45,16 @@
     CMD0( KEY_INSERT, KEY_NONE, "overwrite-mode", do_insert)
     /* deletion commands should be allowed in read only buffers,
      * they should merely copy the data to the kill ring */
-    CMD_( KEY_CTRL('d'), KEY_DELETE, "delete-char", do_delete_char, "*ui")
-    CMD_( 127, KEY_NONE, "backward-delete-char", do_backspace, "*ui")
+    CMD_( KEY_CTRL('d'), KEY_DELETE, "delete-char", do_delete_char, ESi, "*ui")
+    CMD_( 127, KEY_NONE, "backward-delete-char", do_backspace, ESi, "*ui")
     CMD0( KEY_META('<'), KEY_CTRL_HOME, "beginning-of-buffer", do_bof )
     CMD0( KEY_META('>'), KEY_CTRL_END, "end-of-buffer", do_eof )
     /* do_tab will not change read only buffer */
-    CMD_( KEY_CTRL('i'), KEY_NONE, "tabulate", do_tab, "ui")
+    CMD_( KEY_CTRL('i'), KEY_NONE, "tabulate", do_tab, ESi, "ui")
     //CMD_( KEY_SPC, KEY_NONE, "space", do_space, "*ui")
-    CMD_( KEY_CTRL('q'), KEY_NONE, "quoted-insert", do_quote, "*ui")
-    CMD_( KEY_CTRL('j'), KEY_RET, "newline", do_return, "*")
-    CMD_( KEY_CTRL('o'), KEY_NONE, "open-line", do_open_line, "*")
+    CMD_( KEY_CTRL('q'), KEY_NONE, "quoted-insert", do_quote, ESi, "*ui")
+    CMD_( KEY_CTRL('j'), KEY_RET, "newline", do_return, ES, "*")
+    CMD_( KEY_CTRL('o'), KEY_NONE, "open-line", do_open_line, ES, "*")
 
     /*---------------- Region handling / Kill commands ----------------*/
 
@@ -62,77 +64,77 @@
     CMD0( KEY_CTRLX('h'), KEY_NONE, "mark-whole-buffer", do_mark_whole_buffer)
     CMD0( KEY_META(KEY_CTRL('w')) , KEY_NONE,
          "append-next-kill", do_append_next_kill)
-    CMDV( KEY_CTRL('k'), KEY_NONE, "kill-line", do_kill_line, 1, "*v" )
+    CMDV( KEY_CTRL('k'), KEY_NONE, "kill-line", do_kill_line, ESi, 1, "*v" )
     CMDV( KEY_NONE, KEY_NONE,
-         "kill-beginning-of-line", do_kill_line, -1, "*v" )
+         "kill-beginning-of-line", do_kill_line, ESi, -1, "*v" )
     CMDV( KEY_META(KEY_DEL) , KEY_META(KEY_BS), 
-          "backward-kill-word", do_kill_word, -1, "*v" )
-    CMDV( KEY_META('d') , KEY_NONE, "kill-word", do_kill_word, 1, "*v" )
-    CMDV( KEY_CTRL('w'), KEY_NONE, "kill-region", do_kill_region, 1, "*v" )
+          "backward-kill-word", do_kill_word, ESi, -1, "*v" )
+    CMDV( KEY_META('d') , KEY_NONE, "kill-word", do_kill_word, ESi, 1, "*v" )
+    CMDV( KEY_CTRL('w'), KEY_NONE, "kill-region", do_kill_region, ESi, 1, "*v" 
)
     CMD1( KEY_META('w'), KEY_NONE, "copy-region", do_kill_region, 0 )
-    CMD_( KEY_CTRL('y'), KEY_NONE, "yank", do_yank, "*")
-    CMD_( KEY_META('y'), KEY_NONE, "yank-pop", do_yank_pop, "*")
+    CMD_( KEY_CTRL('y'), KEY_NONE, "yank", do_yank, ES, "*")
+    CMD_( KEY_META('y'), KEY_NONE, "yank-pop", do_yank_pop, ES, "*")
 
     /*---------------- Buffer and file handling ----------------*/
 
-    CMD_( KEY_CTRLX(KEY_CTRL('f')), KEY_NONE, "find-file", do_load,
+    CMD_( KEY_CTRLX(KEY_CTRL('f')), KEY_NONE, "find-file", do_find_file, ESs,
           "s{Find file: }[file]|file|") /* u? */
     CMD_( KEY_CTRLX(KEY_CTRL('v')), KEY_NONE, "find-alternate-file", 
-          do_find_alternate_file,
+          do_find_alternate_file, ESs,
           "s{Find alternate file: }[file]|file|") /* u? */
-    CMD_( KEY_CTRLX('i'), KEY_NONE, "insert-file", do_insert_file,
+    CMD_( KEY_CTRLX('i'), KEY_NONE, "insert-file", do_insert_file, ESs,
           "*s{Insert file: }[file]|file|") /* u? */
     CMD0( KEY_CTRLX(KEY_CTRL('s')), KEY_NONE, "save-buffer", do_save_buffer) 
/* u? */
-    CMD_( KEY_CTRLX(KEY_CTRL('w')), KEY_NONE, "write-file", do_write_file,
+    CMD_( KEY_CTRLX(KEY_CTRL('w')), KEY_NONE, "write-file", do_write_file, ESs,
           "s{Write file: }[file]|file|") /* u? */
-    CMD_( KEY_CTRLX('w'), KEY_NONE, "write-region", do_write_region,
+    CMD_( KEY_CTRLX('w'), KEY_NONE, "write-region", do_write_region, ESs,
           "s{Write region to file: }[file]|file|") /* u? */
-    CMD_( KEY_CTRLX('b'), KEY_NONE, "switch-to-buffer", do_switch_to_buffer,
+    CMD_( KEY_CTRLX('b'), KEY_NONE, "switch-to-buffer", do_switch_to_buffer, 
ESs,
           "s{Switch to buffer: }[buffer]|buffer|")
-    CMD_( KEY_CTRLX('k'), KEY_NONE, "kill-buffer", do_kill_buffer,
+    CMD_( KEY_CTRLX('k'), KEY_NONE, "kill-buffer", do_kill_buffer, ESs,
           "s{Kill buffer: }[buffer]|buffer|")
     CMD0( KEY_CTRLX(KEY_CTRL('q')), KEY_NONE, "toggle-read-only", 
           do_toggle_read_only)
-    CMD_( KEY_META('~'), KEY_NONE, "not-modified", do_not_modified, "ui")
+    CMD_( KEY_META('~'), KEY_NONE, "not-modified", do_not_modified, ESi, "ui")
     CMD_( KEY_NONE, KEY_NONE, "set-visited-file-name",
-          do_set_visited_file_name,
+          do_set_visited_file_name, ESss,
           "s{Set visited file name: }[file]|file|s{Rename file? }")
 
     /*---------------- Search and replace ----------------*/
 
-    CMDV( KEY_META('S'), KEY_NONE, "search-forward", do_search_string, 1,
+    CMDV( KEY_META('S'), KEY_NONE, "search-forward", do_search_string, ESsi, 1,
           "s{Search forward: }|search|v")
-    CMDV( KEY_META('R'), KEY_NONE, "search-backward", do_search_string, -1,
+    CMDV( KEY_META('R'), KEY_NONE, "search-backward", do_search_string, ESsi, 
-1,
           "s{Search backward: }|search|v")
     /* passing argument should switch to regex incremental search */
     CMD1( KEY_CTRL('r'), KEY_NONE, "isearch-backward", do_isearch, -1 )
     CMD1( KEY_CTRL('s'), KEY_NONE, "isearch-forward", do_isearch, 1 )
-    CMD_( KEY_META('%'), KEY_NONE, "query-replace", do_query_replace,
+    CMD_( KEY_META('%'), KEY_NONE, "query-replace", do_query_replace, ESss,
           "*s{Query replace: }|search|s{With: }|replace|")
     /* passing argument restricts replace to word matches */
-    CMD_( KEY_META('r'), KEY_NONE, "replace-string", do_replace_string,
+    CMD_( KEY_META('r'), KEY_NONE, "replace-string", do_replace_string, ESssi,
           "*s{Replace String: }|search|s{With: }|replace|ui")
 
     /*---------------- Paragraph / case handling ----------------*/
 
     CMD0( KEY_META('{'), KEY_NONE, "backward-paragraph", do_backward_paragraph)
     CMD0( KEY_META('}'), KEY_NONE, "forward-paragraph", do_forward_paragraph)
-    CMD_( KEY_META('q'), KEY_NONE, "fill-paragraph", do_fill_paragraph, "*")
-    CMDV( KEY_NONE, KEY_NONE, "kill-paragraph", do_kill_paragraph, 1, "*v")
+    CMD_( KEY_META('q'), KEY_NONE, "fill-paragraph", do_fill_paragraph, ES, 
"*")
+    CMDV( KEY_NONE, KEY_NONE, "kill-paragraph", do_kill_paragraph, ESi, 1, 
"*v")
 
-    CMDV( KEY_META('c'), KEY_NONE, "capitalize-word", do_changecase_word, 2, 
"*v")
-    CMDV( KEY_META('l'), KEY_NONE, "downcase-word", do_changecase_word, -1, 
"*v")
-    CMDV( KEY_META('u'), KEY_NONE, "upcase-word", do_changecase_word, 1, "*v")
+    CMDV( KEY_META('c'), KEY_NONE, "capitalize-word", do_changecase_word, ESi, 
2, "*v")
+    CMDV( KEY_META('l'), KEY_NONE, "downcase-word", do_changecase_word, ESi, 
-1, "*v")
+    CMDV( KEY_META('u'), KEY_NONE, "upcase-word", do_changecase_word, ESi, 1, 
"*v")
     CMDV( KEY_META(KEY_CTRL('c')), KEY_NONE,
-          "capitalize-region", do_changecase_region, 2, "*v")
+          "capitalize-region", do_changecase_region, ESi, 2, "*v")
     CMDV( KEY_CTRLX(KEY_CTRL('l')), KEY_NONE,
-          "downcase-region", do_changecase_region, -1, "*v")
+          "downcase-region", do_changecase_region, ESi, -1, "*v")
     CMDV( KEY_CTRLX(KEY_CTRL('u')), KEY_NONE,
-          "upcase-region", do_changecase_region, 1, "*v")
+          "upcase-region", do_changecase_region, ESi, 1, "*v")
 
     /*---------------- Command handling ----------------*/
 
-    CMD_( KEY_META('x'), KEY_NONE, "execute-command", do_execute_command,
+    CMD_( KEY_META('x'), KEY_NONE, "execute-command", do_execute_command, ESsi,
           "s{Command: }[command]|command|ui")
     /* M-0 thru M-9 should start universal argument */
     CMD0( KEY_CTRL('u'), KEY_META('-'), "universal-argument",
@@ -141,10 +143,10 @@
     CMD0( KEY_CTRLX('('), KEY_NONE, "start-kbd-macro", do_start_macro)
     CMD0( KEY_CTRLX(')'), KEY_NONE, "end-kbd-macro", do_end_macro)
     CMD0( KEY_CTRLX('e'), KEY_CTRL('\\'), "call-last-kbd-macro", do_call_macro)
-    CMD_( KEY_NONE, KEY_NONE, "define-kbd-macro", do_define_kbd_macro,
+    CMD_( KEY_NONE, KEY_NONE, "define-kbd-macro", do_define_kbd_macro, ESsss,
           "s{Macro name: }[command]s{Macro keys: }s{Bind to key: }[key]")
     /* global/local?, set/unset key? */
-    CMD_( KEY_NONE, KEY_NONE, "global-set-key", do_global_set_key,
+    CMD_( KEY_NONE, KEY_NONE, "global-set-key", do_global_set_key, ESss,
           "s{Set key globally: }[key]s{command: }[command]|command|")
 
     /*---------------- Window handling ----------------*/
@@ -185,38 +187,39 @@
     /*---------------- International ----------------*/
 
     CMD_( KEY_CTRLXRET('f'), KEY_NONE, "set-buffer-file-coding-system",
-          do_set_buffer_file_coding_system,
+          do_set_buffer_file_coding_system, ESs,
           "s{Charset: }[charset]")
     CMD_( KEY_NONE, KEY_NONE, "convert-buffer-file-coding-system",
-          do_convert_buffer_file_coding_system,
+          do_convert_buffer_file_coding_system, ESs,
           "*s{Charset: }[charset]")
     CMD0( KEY_CTRLXRET('b'), KEY_NONE, "toggle-bidir", do_toggle_bidir)
     CMD_( KEY_CTRLXRET(KEY_CTRL('\\')), KEY_NONE, "set-input-method",
-          do_set_input_method,
+          do_set_input_method, ESs,
           "s{Input method: }[input]")
     CMD0( KEY_CTRLX(KEY_CTRL('\\')), KEY_NONE, 
           "switch-input-method", do_switch_input_method)
 
     /*---------------- Styles & display ----------------*/
-    CMD_( KEY_NONE, KEY_NONE, "define-color", do_define_color,
+    CMD_( KEY_NONE, KEY_NONE, "define-color", do_define_color, ESss,
           "s{Color name: }[color]|color|s{Color value: }[color]|color|")
-    CMD_( KEY_NONE, KEY_NONE, "set-style", do_set_style,
-          "s{Style: }[style]|style|s{CSS Property Name: }"
+    CMD_( KEY_NONE, KEY_NONE, "set-style", do_set_style, ESsss,
+         "s{Style: }[style]|style|"
+         "s{CSS Property Name: }"
           "s{CSS Property Value: }")
-    CMD_( KEY_NONE, KEY_NONE, "set-display-size", do_set_display_size,
+    CMD_( KEY_NONE, KEY_NONE, "set-display-size", do_set_display_size, ESii,
           "i{Width: }i{Height: }")
-    CMD_( KEY_NONE, KEY_NONE, "set-system-font", do_set_system_font,
+    CMD_( KEY_NONE, KEY_NONE, "set-system-font", do_set_system_font, ESss,
           "s{Font family: }s{System fonts: }")
 
     /*---------------- Miscellaneous ----------------*/
 
     CMD_( KEY_CTRLX(KEY_CTRL('c')), KEY_NONE, "exit-qemacs", 
-          do_exit_qemacs, "ui")
+          do_exit_qemacs, ESi, "ui")
     CMD0( KEY_CTRL('l'), KEY_NONE, "refresh", do_refresh_complete)
     CMD0( KEY_NONE, KEY_NONE, "doctor", do_doctor)
     CMD0( KEY_CTRLX('u'), KEY_CTRL('_'), "undo", do_undo)
-    CMDV( KEY_META('g'), KEY_NONE, "goto-line", do_goto, 'l', "us{Goto line: 
}v")
-    CMDV( KEY_CTRLX('g'), KEY_NONE, "goto-char", do_goto, 'c',  "us{Goto char: 
}v")
+    CMDV( KEY_META('g'), KEY_NONE, "goto-line", do_goto, ESsi, 'l', "us{Goto 
line: }v")
+    CMDV( KEY_CTRLX('g'), KEY_NONE, "goto-char", do_goto, ESsi, 'c',  "us{Goto 
char: }v")
     CMD0( KEY_CTRLX('l'), KEY_NONE, "count-lines", do_count_lines)
     CMD0( KEY_CTRLX('='), KEY_NONE, "what-cursor-position",
           do_what_cursor_position)
@@ -228,28 +231,28 @@
           do_toggle_truncate_lines)
     CMD0( KEY_CTRLXRET('w'), KEY_NONE, "word-wrap", do_word_wrap)
     CMD1( KEY_NONE, KEY_NONE, "toggle-control-h", do_toggle_control_h, 0)
-    CMD_( KEY_NONE, KEY_NONE, "set-emulation", do_set_emulation,
+    CMD_( KEY_NONE, KEY_NONE, "set-emulation", do_set_emulation, ESs,
           "s{Emulation mode: }")
     CMD0( KEY_NONE, KEY_NONE, "set-trace", do_set_trace)
-    CMD_( KEY_NONE, KEY_NONE, "cd", do_cd,
+    CMD_( KEY_NONE, KEY_NONE, "cd", do_cd, ESs,
           "s{Change default directory: }[file]|file|")
-    CMD_( KEY_NONE, KEY_NONE, "set-mode", do_cmd_set_mode,
+    CMD_( KEY_NONE, KEY_NONE, "set-mode", do_cmd_set_mode, ESs,
           "s{Set mode: }[mode]")
     
     /* tab & indent */
-    CMD_( KEY_NONE, KEY_NONE, "set-tab-width", do_set_tab_width,
+    CMD_( KEY_NONE, KEY_NONE, "set-tab-width", do_set_tab_width, ESi,
           "ui{Tab width: }")
-    CMD_( KEY_NONE, KEY_NONE, "set-indent-width", do_set_indent_width,
+    CMD_( KEY_NONE, KEY_NONE, "set-indent-width", do_set_indent_width, ESi,
           "ui{Indent width: }")
-    CMD_( KEY_NONE, KEY_NONE, "set-indent-tabs-mode", do_set_indent_tabs_mode,
+    CMD_( KEY_NONE, KEY_NONE, "set-indent-tabs-mode", do_set_indent_tabs_mode, 
ESi,
           "ui{Indent tabs mode (0 or 1): }")
 
     /* other stuff */
-    CMD_( KEY_NONE, KEY_NONE, "load-file-from-path", do_load_file_from_path,
+    CMD_( KEY_NONE, KEY_NONE, "load-file-from-path", do_load_file_from_path, 
ESs,
           "s{Load file from path: }|file|")
-    CMD_( KEY_NONE, KEY_NONE, "load-config-file", do_load_config_file,
+    CMD_( KEY_NONE, KEY_NONE, "load-config-file", do_load_config_file, ESs,
           "s{Configuration file: }[file]|file|")
-    CMD_( KEY_NONE, KEY_NONE, "load-qerc", do_load_qerc,
+    CMD_( KEY_NONE, KEY_NONE, "load-qerc", do_load_qerc, ESs,
           "s{path: }[file]|file|")
     
     CMD_DEF_END,

Index: shell.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/shell.c,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- shell.c     25 Dec 2007 07:54:00 -0000      1.34
+++ shell.c     27 Dec 2007 10:04:10 -0000      1.35
@@ -1077,7 +1077,7 @@
         b = eb_new("", BF_SAVELOG);
     if (!b)
         return NULL;
-    set_buffer_name(b, name); /* ensure that the name is unique */
+    eb_set_buffer_name(b, name); /* ensure that the name is unique */
     eb_set_charset(b, &charset_vt100);
 
     s = qe_mallocz(ShellState);
@@ -1398,7 +1398,7 @@
     /* CG: Should remove popups, sidepanes, helppanes... */
 
     /* go to the error */
-    do_load(s, filename);
+    do_find_file(s, filename);
     do_goto_line(s, line_num);
 }
 
@@ -1418,8 +1418,8 @@
 
 /* compilation commands */
 static CmdDef compile_commands[] = {
-    CMD_( KEY_CTRLXRET('\r'), KEY_NONE, "shell", do_shell, "ui")
-    CMD_( KEY_CTRLX(KEY_CTRL('e')), KEY_NONE, "compile", do_compile,
+    CMD_( KEY_CTRLXRET('\r'), KEY_NONE, "shell", do_shell, ESi, "ui")
+    CMD_( KEY_CTRLX(KEY_CTRL('e')), KEY_NONE, "compile", do_compile, ESs,
           "s{Compile command: }|compile|")
     CMD1( KEY_CTRLX(KEY_CTRL('p')), KEY_NONE, "previous-error", 
           do_compile_error, -1) /* u */

Index: plugin-example/my_plugin.c
===================================================================
RCS file: /cvsroot/qemacs/qemacs/plugin-example/my_plugin.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- plugin-example/my_plugin.c  9 May 2005 09:10:38 -0000       1.2
+++ plugin-example/my_plugin.c  27 Dec 2007 10:04:10 -0000      1.3
@@ -15,7 +15,7 @@
 }
 
 static CmdDef my_commands[] = {
-    CMD_( KEY_CTRLX('h'), KEY_NONE, "insert-hello", insert_hello, "*")
+    CMD_( KEY_CTRLX('h'), KEY_NONE, "insert-hello", insert_hello, ES, "*")
     CMD_DEF_END,
 };
 




reply via email to

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