qemacs-commit
[Top][All Lists]
Advanced

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

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


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs qe.c qe.h shell.c
Date: Mon, 10 Aug 2015 18:35:14 +0000

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        15/08/10 18:35:14

Modified files:
        .              : qe.c qe.h shell.c 

Log message:
        shell: accept more error message formats, handle column number

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.190&r2=1.191
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.188&r2=1.189
http://cvs.savannah.gnu.org/viewcvs/qemacs/shell.c?cvsroot=qemacs&r1=1.94&r2=1.95

Patches:
Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.190
retrieving revision 1.191
diff -u -b -r1.190 -r1.191
--- qe.c        7 Aug 2015 20:56:48 -0000       1.190
+++ qe.c        10 Aug 2015 18:35:13 -0000      1.191
@@ -2135,10 +2135,10 @@
     put_status(s, "Invalid position: %s", str);
 }
 
-void do_goto_line(EditState *s, int line)
+void do_goto_line(EditState *s, int line, int column)
 {
     if (line >= 1)
-        s->offset = eb_goto_pos(s->b, line - 1, 0);
+        s->offset = eb_goto_pos(s->b, line - 1, column > 0 ? column - 1 : 0);
 }
 
 void do_count_lines(EditState *s)
@@ -8152,7 +8152,7 @@
         }
         do_find_file(s, argv[i]);
         if (line_num)
-            do_goto_line(qs->active_window, line_num);
+            do_goto_line(qs->active_window, line_num, 1);
     }
 
 #if !defined(CONFIG_TINY) && !defined(CONFIG_WIN32)

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.188
retrieving revision 1.189
diff -u -b -r1.188 -r1.189
--- qe.h        7 Aug 2015 16:45:11 -0000       1.188
+++ qe.h        10 Aug 2015 18:35:13 -0000      1.189
@@ -1825,7 +1825,7 @@
 void word_right(EditState *s, int w);
 void word_left(EditState *s, int w);
 void do_goto(EditState *s, const char *str, int unit);
-void do_goto_line(EditState *s, int line);
+void do_goto_line(EditState *s, int line, int column);
 void do_up_down(EditState *s, int dir);
 void do_left_right(EditState *s, int dir);
 void text_mouse_goto(EditState *s, int x, int y);

Index: shell.c
===================================================================
RCS file: /sources/qemacs/qemacs/shell.c,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -b -r1.94 -r1.95
--- shell.c     9 Aug 2014 17:42:15 -0000       1.94
+++ shell.c     10 Aug 2015 18:35:13 -0000      1.95
@@ -1796,8 +1796,9 @@
     EditState *e;
     EditBuffer *b;
     int offset, found_offset;
-    char filename[MAX_FILENAME_SIZE], *q;
-    int line_num, c;
+    char filename[MAX_FILENAME_SIZE];
+    buf_t fnamebuf, *fname;
+    int c, line_num, col_num;
     char error_message[128];
 
     /* CG: should have a buffer flag for error source.
@@ -1836,27 +1837,42 @@
         }
         found_offset = offset;
         /* parse filename:linenum:message */
+        /* and:  filename(linenum[, col]) ...: ... */
+
         /* extract filename */
-        for (q = filename;;) {
+        fname = buf_init(&fnamebuf, filename, countof(filename));
+        for (;;) {
             c = eb_nextc(b, offset, &offset);
             if (c == '\n' || c == '\t' || c == ' ')
                 goto next_line;
-            if (c == ':')
+            if (c == ':' || c == '(')
                 break;
-            /* CG: utf8 issue */
-            if ((q - filename) < ssizeof(filename) - 1)
-                *q++ = c;
+            buf_putc_utf8(fname, c);
         }
-        *q = '\0';
+
         /* extract line number */
-        for (line_num = 0;;) {
+        for (line_num = col_num = 0;;) {
             c = eb_nextc(b, offset, &offset);
-            if (c == ':')
+            if (c == ':' || c == ',' || c == ')')
                 break;
             if (!qe_isdigit(c))
                 goto next_line;
             line_num = line_num * 10 + c - '0';
         }
+        if (c == ',') {
+            for (;;) {
+                c = eb_nextc(b, offset, &offset);
+                if (c == ' ') continue;
+                if (!qe_isdigit(c))
+                    break;
+                col_num = col_num * 10 + c - '0';
+            }
+        }
+        while (c != ':') {
+            if (c == '\n')
+                goto next_line;
+            c = eb_nextc(b, offset, &offset);
+        }
         eb_get_strline(b, error_message, sizeof(error_message), &offset);
         if (line_num >= 1) {
             if (line_num != error_line_num ||
@@ -1881,7 +1897,7 @@
 
     /* go to the error */
     do_find_file(s, filename);
-    do_goto_line(qs->active_window, line_num);
+    do_goto_line(qs->active_window, line_num, col_num);
 
     put_status(s, "=> %s", error_message);
 }



reply via email to

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