[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemacs-commit] qemacs extras.c qe.h qe.c qeconfig.h,
Charlie Gordon <=