qemacs-commit
[Top][All Lists]
Advanced

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

[Qemacs-commit] qemacs extras.c qe.h qe.c qeconfig.h


From: Charlie Gordon
Subject: [Qemacs-commit] qemacs extras.c qe.h qe.c qeconfig.h
Date: Tue, 25 Apr 2017 13:15:04 -0400 (EDT)

CVSROOT:        /sources/qemacs
Module name:    qemacs
Changes by:     Charlie Gordon <chqrlie>        17/04/25 13:15:04

Modified files:
        .              : extras.c qe.h qe.c qeconfig.h 

Log message:
        display: improve window splitting API
        - add EditState *qe_split_window(EditState *s, int prop, int 
side_by_side);
          takes proportion and direction
        - set-trace splits the current window 75/25
        - add start-trace-mode

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/qemacs/extras.c?cvsroot=qemacs&r1=1.70&r2=1.71
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.h?cvsroot=qemacs&r1=1.257&r2=1.258
http://cvs.savannah.gnu.org/viewcvs/qemacs/qe.c?cvsroot=qemacs&r1=1.275&r2=1.276
http://cvs.savannah.gnu.org/viewcvs/qemacs/qeconfig.h?cvsroot=qemacs&r1=1.68&r2=1.69

Patches:
Index: extras.c
===================================================================
RCS file: /sources/qemacs/qemacs/extras.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -u -b -r1.70 -r1.71
--- extras.c    18 Apr 2017 09:14:55 -0000      1.70
+++ extras.c    25 Apr 2017 17:15:03 -0000      1.71
@@ -214,6 +214,7 @@
     char dir[MAX_FILENAME_SIZE];
     int pathlen, parent_pathlen;
     const char *tail;
+    EditState *e;
 
     pathlen = get_basename_offset(filename);
     get_default_path(s->b, s->offset, dir, sizeof(dir));
@@ -252,10 +253,11 @@
 
     do_find_file(s, filename, bflags);
     do_delete_other_windows(s, 0);
-    do_split_window(s, 0);
-    do_previous_window(s);
-    s = s->qe_state->active_window;
-    do_find_file(s, buf, bflags);
+    e = qe_split_window(s, 50, SW_STACKED);
+    if (e) {
+        s->qe_state->active_window = e;
+        do_find_file(e, buf, bflags);
+    }
 }
 
 void do_delete_horizontal_space(EditState *s)
@@ -728,6 +730,7 @@
 
 void do_transpose(EditState *s, int cmd)
 {
+    QEmacsState *qs = s->qe_state;
     int offset0, offset1, offset2, offset3, end_offset;
     int size0, size1, size2;
     EditBuffer *b = s->b;
@@ -752,7 +755,7 @@
             offset0 = eb_prev(b, offset1);
         } else {
             /* XXX: should have specific flag */
-            if (s->qe_state->flag_split_window_change_focus) {
+            if (qs->emulation_flags == 1) {
                 /* keep current position between characters */
                 end_offset = offset0 + offset3 - offset2;
             } else {
@@ -771,7 +774,7 @@
         offset1 = s->offset;
         word_left(s, 0);
         offset0 = s->offset;
-        if (s->qe_state->flag_split_window_change_focus) {
+        if (qs->emulation_flags == 1) {
             /* set position to end of first word */
             end_offset = offset0 + offset3 - offset2;
         } else {
@@ -788,7 +791,7 @@
         s->offset = offset1;
         do_bol(s);
         offset0 = s->offset;
-        if (s->qe_state->flag_split_window_change_focus) {
+        if (qs->emulation_flags == 1) {
             /* set position to start of second line */
             end_offset = offset0 + offset3 - offset1;
         } else {
@@ -1708,7 +1711,7 @@
     CMD2( KEY_META('='), KEY_NONE,
           "compare-windows", do_compare_windows, ESi, "ui" )
     CMD3( KEY_CTRLX(KEY_CTRL('l')), KEY_NONE,
-          "conpare-files", do_compare_files, ESsi, 0,
+          "compare-files", do_compare_files, ESsi, 0,
           "s{Compare file: }[file]|file|"
           "v") /* u? */
     CMD2( KEY_META('\\'), KEY_NONE,

Index: qe.h
===================================================================
RCS file: /sources/qemacs/qemacs/qe.h,v
retrieving revision 1.257
retrieving revision 1.258
diff -u -b -r1.257 -r1.258
--- qe.h        25 Apr 2017 16:46:41 -0000      1.257
+++ qe.h        25 Apr 2017 17:15:03 -0000      1.258
@@ -2040,8 +2040,10 @@
 void do_other_window(EditState *s);
 void do_previous_window(EditState *s);
 void do_delete_window(EditState *s, int force);
-// should take argval
-void do_split_window(EditState *s, int horiz);
+#define SW_STACKED       0
+#define SW_SIDE_BY_SIDE  1
+EditState *qe_split_window(EditState *s, int prop, int side_by_side);
+void do_split_window(EditState *s, int prop, int side_by_side);
 void do_create_window(EditState *s, const char *filename, const char *layout);
 void qe_save_window_layout(EditState *s, EditBuffer *b);
 
@@ -2132,7 +2134,8 @@
 /* misc */
 
 void do_set_emulation(EditState *s, const char *name);
-void do_set_trace(EditState *s, const char *options);
+void do_start_trace_mode(EditState *s);
+void do_set_trace_options(EditState *s, const char *options);
 void do_cd(EditState *s, const char *name);
 int qe_mode_set_key(ModeDef *m, const char *keystr, const char *cmd_name);
 void do_set_key(EditState *s, const char *keystr, const char *cmd_name,

Index: qe.c
===================================================================
RCS file: /sources/qemacs/qemacs/qe.c,v
retrieving revision 1.275
retrieving revision 1.276
diff -u -b -r1.275 -r1.276
--- qe.c        21 Apr 2017 14:44:14 -0000      1.275
+++ qe.c        25 Apr 2017 17:15:03 -0000      1.276
@@ -447,7 +447,12 @@
     }
 }
 
-void do_set_trace(EditState *s, const char *options)
+void do_start_trace_mode(EditState *s)
+{
+    do_set_trace_options(s, "all");
+}
+
+void do_set_trace_options(EditState *s, const char *options)
 {
     char buf[80];
     const char *p = options;
@@ -485,9 +490,10 @@
             qs->trace_buffer = eb_new("*trace*", BF_SYSTEM);
         }
         if (!last_flags) {
-            do_split_window(s, 0);
-            do_switch_to_buffer(s, "*trace*");
-            do_previous_window(s);
+            EditState *e = qe_split_window(s, 75, SW_STACKED);
+            if (e) {
+                do_switch_to_buffer(e, "*trace*");
+            }
         }
         *buf = '\0';
         if (qs->trace_flags & EB_TRACE_TTY) {
@@ -6908,6 +6914,7 @@
  */
 int qe_load_file(EditState *s, const char *filename1, int lflags, int bflags)
 {
+    QEmacsState *qs = s->qe_state;
     u8 buf[4097];
     char filename[MAX_FILENAME_SIZE];
     int st_mode, buf_size, mode_score;
@@ -6936,8 +6943,10 @@
         /* Split window if window large enough and not empty */
         /* XXX: should check s->height units */
         if (s->height > 10 && s->b->total_size > 0) {
-            do_split_window(s, 0);
-            s = s->qe_state->active_window;
+            EditState *e = qe_split_window(s, 50, SW_STACKED);
+            if (e) {
+                qs->active_window = s = e;
+            }
         }
     }
 
@@ -7655,44 +7664,54 @@
 }
 
 /* XXX: add minimum size test and refuse to split if reached */
-void do_split_window(EditState *s, int horiz)
+EditState *qe_split_window(EditState *s, int prop, int side_by_side)
 {
-    QEmacsState *qs = s->qe_state;
     EditState *e;
-    int x, y;
+    int w, h, w1, h1;
 
     /* cannot split minibuf or popup */
     if (s->flags & (WF_POPUP | WF_MINIBUF))
-        return;
+        return NULL;
+
+    if (prop <= 0)
+        return NULL;
 
     /* This will clone mode and mode data to the newly created window */
     generic_save_window_data(s);
-    if (horiz) {
-        x = (s->x2 + s->x1) / 2;
-        e = edit_new(s->b, x, s->y1,
-                     s->x2 - x, s->y2 - s->y1, WF_MODELINE);
+    w = s->x2 - s->x1;
+    h = s->y2 - s->y1;
+    if (side_by_side) {
+        w1 = (w * min(prop, 100) + 50) / 100;
+        e = edit_new(s->b, s->x1 + w1, s->y1,
+                     w - w1, h, WF_MODELINE | (s->flags & WF_RSEPARATOR));
         if (!e)
-            return;
-        s->x2 = x;
+            return NULL;
+        s->x2 = s->x1 + w1;
         s->flags |= WF_RSEPARATOR;
-        s->wrap = e->wrap = WRAP_TRUNCATE;
     } else {
-        y = (s->y2 + s->y1) / 2;
-        e = edit_new(s->b, s->x1, y,
-                     s->x2 - s->x1, s->y2 - y,
-                     WF_MODELINE | (s->flags & WF_RSEPARATOR));
+        h1 = (h * min(prop, 100) + 50) / 100;
+        e = edit_new(s->b, s->x1, s->y1 + h1,
+                     w, h - h1, WF_MODELINE | (s->flags & WF_RSEPARATOR));
         if (!e)
-            return;
-        s->y2 = y;
+            return NULL;
+        s->y2 = s->y1 + h1;
     }
-    /* insert in the window list after current window */
-    edit_attach(e, s->next_window);
+    compute_client_area(s);
 
-    if (qs->flag_split_window_change_focus)
-        qs->active_window = e;
+    /* reposition new window in window list just after s */
+    edit_attach(e, s->next_window);
 
-    compute_client_area(s);
     do_refresh(s);
+    return e;
+}
+
+void do_split_window(EditState *s, int prop, int side_by_side)
+{
+    QEmacsState *qs = s->qe_state;
+    EditState *e = qe_split_window(s, prop == NO_ARG ? 50 : prop, 
side_by_side);
+
+    if (e && qs->flag_split_window_change_focus)
+        qs->active_window = e;
 }
 
 void do_create_window(EditState *s, const char *filename, const char *layout)

Index: qeconfig.h
===================================================================
RCS file: /sources/qemacs/qemacs/qeconfig.h,v
retrieving revision 1.68
retrieving revision 1.69
diff -u -b -r1.68 -r1.69
--- qeconfig.h  21 Apr 2017 14:44:14 -0000      1.68
+++ qeconfig.h  25 Apr 2017 17:15:04 -0000      1.69
@@ -270,10 +270,12 @@
           "hide-window", do_hide_window, 1)
     CMD0( KEY_NONE, KEY_NONE,
           "delete-hidden-windows", do_delete_hidden_windows)
-    CMD1( KEY_CTRLX('2'), KEY_NONE,
-          "split-window-vertically", do_split_window, 0) /* u? */
-    CMD1( KEY_CTRLX('3'), KEY_NONE,
-          "split-window-horizontally", do_split_window, 1) /* u? */
+    CMD3( KEY_CTRLX('2'), KEY_NONE,
+          "split-window-vertically", do_split_window, ESii,
+          SW_STACKED, "uiv")
+    CMD3( KEY_CTRLX('3'), KEY_NONE,
+          "split-window-horizontally", do_split_window, ESii,
+          SW_SIDE_BY_SIDE, "uiv")
     CMD0( KEY_CTRLX('f'), KEY_NONE,
           "toggle-full-screen", do_toggle_full_screen)
     CMD0( KEY_NONE, KEY_NONE,
@@ -285,8 +287,10 @@
 
     /*---------------- Help ----------------*/
 
+    CMD0( KEY_CTRLH('d'), KEY_NONE,
+          "start-trace-mode", do_start_trace_mode)
     CMD2( KEY_CTRLH('t'), KEY_NONE,
-          "set-trace", do_set_trace, ESs,
+          "set-trace-options", do_set_trace_options, ESs,
           "s{Trace options: }|trace|")
     CMD0( KEY_CTRLH('c'), KEY_CTRLH('k'),
           "describe-key-briefly", do_describe_key_briefly)



reply via email to

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