diff options
author | Amadeusz Sławiński (amade) <amade@asmblr.net> | 2011-03-04 22:18:55 +0100 |
---|---|---|
committer | Amadeusz Sławiński <amade@asmblr.net> | 2014-07-24 11:50:46 +0200 |
commit | 120b6d87ddbdd5ca875b708fd3a0e4561680f2ff (patch) | |
tree | c694c5b494c416834db5c14e853124e0a5a5ca15 | |
parent | 690131f5691a8d4692f0c3ffc035dc88230c1ea7 (diff) | |
download | screen-120b6d87ddbdd5ca875b708fd3a0e4561680f2ff.tar.gz |
Implement sort command
Based on http://lists.gnu.org/archive/html/screen-users/2011-03/msg00004.html
-rw-r--r-- | src/comm.c | 1 | ||||
-rw-r--r-- | src/list_window.c | 4 | ||||
-rw-r--r-- | src/process.c | 31 | ||||
-rw-r--r-- | src/window.c | 2 | ||||
-rw-r--r-- | src/window.h | 2 |
5 files changed, 32 insertions, 8 deletions
@@ -194,6 +194,7 @@ struct comm comms[RC_LAST + 1] = { "sleep", ARGS_1, {NULL} }, { "slowpaste", NEED_FORE|ARGS_01, {NULL} }, { "sorendition", ARGS_012, {NULL} }, + { "sort", ARGS_0, {NULL} }, { "source", ARGS_1, {NULL} }, { "split", NEED_DISPLAY|ARGS_01, {NULL} }, { "startup_message", ARGS_1, {NULL} }, diff --git a/src/list_window.c b/src/list_window.c index 7fe2e81..6b2edbd 100644 --- a/src/list_window.c +++ b/src/list_window.c @@ -373,7 +373,7 @@ gl_Window_input(struct ListData *ldata, char **inp, int *len) * with NULL window. So that causes a redraw of the entire list. So reset the * 'selected' after that. */ wdata->fore = win; - WindowChangeNumber(win->w_number, pw->w_number); + SwapWindows(win->w_number, pw->w_number); } break; @@ -385,7 +385,7 @@ gl_Window_input(struct ListData *ldata, char **inp, int *len) break; /* Do not allow switching with the parent group */ wdata->fore = win; - WindowChangeNumber(win->w_number, nw->w_number); + SwapWindows(win->w_number, nw->w_number); } break; diff --git a/src/process.c b/src/process.c index 05e57dc..b3765ad 100644 --- a/src/process.c +++ b/src/process.c @@ -3905,11 +3905,11 @@ DoAction(struct action *act, int key) break; case RC_BUMPRIGHT: if (fore->w_number < NextWindow()) - WindowChangeNumber(fore->w_number, NextWindow()); + SwapWindows(fore->w_number, NextWindow()); break; case RC_BUMPLEFT: if (fore->w_number > PreviousWindow()) - WindowChangeNumber(fore->w_number, PreviousWindow()); + SwapWindows(fore->w_number, PreviousWindow()); break; case RC_COLLAPSE: CollapseWindowlist(); @@ -3936,7 +3936,7 @@ DoAction(struct action *act, int key) n += old; else if (rel < 0) n = old - n; - if (!WindowChangeNumber(old, n)) + if (!SwapWindows(old, n)) { /* Window number could not be changed. */ queryflag = -1; @@ -3944,6 +3944,29 @@ DoAction(struct action *act, int key) } } break; + case RC_SORT: + i = 0; + if (!wtab[i] || !wtab[i+1]) + { + Msg(0, "Less than two windows, sorting makes no sense.\n"); + break; + } + for (i = 0; wtab[i+1] != NULL; i++) + { + for (n = i, nr = i; wtab[n+1] != NULL; n++) + { + if (strcmp(wtab[nr]->w_title,wtab[n+1]->w_title) > 0) + { + nr = n+1; + } + } + if (nr != i) + { + SwapWindows(nr, i); + } + } + WindowChanged((struct win *)0, 0); + break; case RC_SILENCE: n = fore->w_silence != 0; i = fore->w_silencewait; @@ -5397,7 +5420,7 @@ CollapseWindowlist() for (; moveto < pos; moveto++) if (!wtab[moveto]) { - WindowChangeNumber(pos, moveto); + SwapWindows(pos, moveto); break; } } diff --git a/src/window.c b/src/window.c index 2672bab..15be6aa 100644 --- a/src/window.c +++ b/src/window.c @@ -2057,7 +2057,7 @@ zmodem_abort(struct win *p, struct display *d) int -WindowChangeNumber(int old, int dest) +SwapWindows(int old, int dest) { struct win *p, *win_old; diff --git a/src/window.h b/src/window.h index e07f5bd..23b0811 100644 --- a/src/window.h +++ b/src/window.h @@ -307,7 +307,7 @@ struct win #define Layer2Window(l) ((struct win *)(l)->l_bottom->l_data) -int WindowChangeNumber (int, int); +int SwapWindows (int, int); #endif /* SCREEN_WINDOW_H */ |