qemacs-commit
[Top][All Lists]
Advanced

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

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


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs buffer.c qe.c qe.h
Date: Wed, 26 Aug 2015 00:24:15 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        15/08/26 00:24:15

Modified files:
        .              : buffer.c qe.c qe.h 

Log message:
        buffers: improved tracing function
        - add EB_TRACE_COMMAND
        - change the format of the *trace* buffer

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/buffer.c?cvsroot=qemacs&r1=1.90&r2=1.91
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.206&r2=1.207
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.203&r2=1.204

Patches:
Index: buffer.c
===================================================================
RCS file: /sources/qemacs/qemacs/buffer.c,v
retrieving revision 1.90
retrieving revision 1.91
diff -u -b -r1.90 -r1.91
--- buffer.c    25 Aug 2015 16:19:42 -0000      1.90
+++ buffer.c    26 Aug 2015 00:24:14 -0000      1.91
@@ -759,56 +759,84 @@
     QEmacsState *qs = &qe_state;
     EditBuffer *b = qs->trace_buffer;
     EditState *e;
-    int point;
+    const char *str = NULL;
+    const u8 *p0, *endp, *p;
+    int c, line, col, len, point;
+
+    if (!b)
+        return;
 
-    if (b) {
         point = b->total_size;
-        if (qs->trace_buffer_state != state) {
-            const char *str = NULL;
-            switch (qs->trace_buffer_state) {
-            case EB_TRACE_TTY:
-                str = "|\n";
-                break;
-            case EB_TRACE_PTY:
-                str = "|\n";
-                break;
-            case EB_TRACE_SHELL:
-                str = "|\n";
-                break;
-            }
-            if (str) {
-                eb_write(b, b->total_size, str, strlen(str));
+    if (size < 0)
+        size = strlen(buf);
+
+    eb_get_pos(b, &line, &col, point);
+    if (col == 0 || qs->trace_buffer_state != state) {
+        if (col) {
+            eb_insert_uchar(b, b->total_size, '\n');
+            col = 0;
             }
             qs->trace_buffer_state = state;
-            switch (qs->trace_buffer_state) {
+        switch (state) {
             case EB_TRACE_TTY:
-                str = "--|";
+            str = "    tty: ";
                 break;
             case EB_TRACE_PTY:
-                str = ">>|";
+            str = "    pty: ";
                 break;
             case EB_TRACE_SHELL:
-                str = "<<|";
+            str = "  shell: ";
+            break;
+        case EB_TRACE_COMMAND:
+            eb_printf(b, "command: %s\n", buf);
+            size = 0;
                 break;
             }
             if (str) {
-                eb_write(b, b->total_size, str, strlen(str));
+            col += eb_write(b, b->total_size, str, strlen(str));
             }
         }
-#if 0
-        /* CG: could make traces more readable: */
-        if (ch < 32 || ch == 127)
-            fprintf(stderr, "got %d '^%c'\n", ch, ('@' + ch) & 127);
-        else
-            fprintf(stderr, "got %d '%c'\n", ch, ch);
-#endif
-        eb_write(b, b->total_size, buf, size);
+    p0 = buf;
+    endp = p0 + size;
 
+#define MAX_TRACE_WIDTH  1024
+    for (p = p0; p0 < endp; p++) {
+        while (p >= endp || *p < 32 || *p >= 127 || *p == '\\') {
+            if (p0 >= endp)
+                break;
+            if (col >= MAX_TRACE_WIDTH) {
+                eb_write(b, b->total_size, "\n         ", 10);
+                col = 9;
+            }
+            if (p0 < p) {
+                len = min(p - p0, MAX_TRACE_WIDTH - col);
+                eb_write(b, b->total_size, p0, len);
+                p0 += len;
+                col += len;
+                continue;
+            }
+            if (p < endp) {
+                if ((c = 'n', *p == '\n')
+                ||  (c = 'r', *p == '\r')
+                ||  (c = 't', *p == '\t')
+                ||  (c = '\\', *p == '\\')) {
+                    col += eb_printf(b, "\\%c", c);
+                } else
+                if (*p < 32) {
+                    col += eb_printf(b, "\\^%c", (*p + '@') & 127);
+                } else {
+                    col += eb_printf(b, "\\%03o", *p);
+                }
+                p0 = p + 1;
+            }
+            break;
+        }
+    }
         /* If point is visible in window, should keep it so */
+    /* XXX: proper tracking should do this automatically */
         e = eb_find_window(b, NULL);
         if (e && e->offset == point)
             e->offset = b->total_size;
-    }
 }
 
 /************************************************************/

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.206
retrieving revision 1.207
diff -u -b -r1.206 -r1.207
--- qe.c        25 Aug 2015 16:19:43 -0000      1.206
+++ qe.c        26 Aug 2015 00:24:14 -0000      1.207
@@ -4127,6 +4127,9 @@
     ExecCmdState *es;
     const char *argdesc;
 
+    if (qe_state.trace_buffer && qe_state.trace_buffer != s->b)
+        eb_trace_bytes(d->name, -1, EB_TRACE_COMMAND);
+
     argdesc = d->name + strlen(d->name) + 1;
     if (*argdesc == '*') {
         argdesc++;

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.203
retrieving revision 1.204
diff -u -b -r1.203 -r1.204
--- qe.h        25 Aug 2015 16:19:43 -0000      1.203
+++ qe.h        26 Aug 2015 00:24:15 -0000      1.204
@@ -1398,6 +1398,7 @@
 #define EB_TRACE_TTY    1
 #define EB_TRACE_SHELL  2
 #define EB_TRACE_PTY    4
+#define EB_TRACE_COMMAND  8
 
     /* global layout info : DO NOT modify these directly. do_refresh
        does it */



reply via email to

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