2012-06-11 18:04:07 +02:00
|
|
|
--- ./comm.c.orig 2012-06-08 15:20:17.000000000 +0000
|
|
|
|
+++ ./comm.c 2012-06-08 16:03:10.000000000 +0000
|
|
|
|
@@ -297,6 +297,7 @@ struct comm comms[RC_LAST + 1] =
|
2011-09-19 22:30:01 +02:00
|
|
|
{ "sleep", ARGS_1 },
|
|
|
|
{ "slowpaste", NEED_FORE|ARGS_01 },
|
|
|
|
{ "sorendition", ARGS_012 },
|
|
|
|
+ { "sort", ARGS_0 },
|
|
|
|
{ "source", ARGS_1 },
|
2012-06-11 18:04:07 +02:00
|
|
|
{ "split", NEED_DISPLAY|ARGS_01 },
|
2011-09-19 22:30:01 +02:00
|
|
|
{ "startup_message", ARGS_1 },
|
2012-06-11 18:04:07 +02:00
|
|
|
--- ./doc/screen.1.orig 2012-06-08 16:02:58.000000000 +0000
|
|
|
|
+++ ./doc/screen.1 2012-06-08 16:03:10.000000000 +0000
|
|
|
|
@@ -3015,6 +3015,11 @@ underlying system exposes flow control p
|
|
|
|
text.
|
|
|
|
.sp
|
|
|
|
.ne 3
|
|
|
|
+.B sort
|
|
|
|
+.PP
|
|
|
|
+Sort the windows in alphabetical order of the window tiles.
|
|
|
|
+.sp
|
|
|
|
+.ne 3
|
|
|
|
.BI "source " file
|
|
|
|
.PP
|
|
|
|
Read and execute commands from file \fIfile\fP. Source commands may
|
|
|
|
--- ./process.c.orig 2012-06-08 15:20:18.000000000 +0000
|
|
|
|
+++ ./process.c 2012-06-08 16:03:10.000000000 +0000
|
|
|
|
@@ -3024,6 +3024,47 @@ int key;
|
|
|
|
}
|
2011-09-19 22:30:01 +02:00
|
|
|
}
|
|
|
|
break;
|
|
|
|
+ case RC_SORT:
|
|
|
|
+ if (fore)
|
|
|
|
+ {
|
|
|
|
+ /* Better do not allow this. Not sure what the utmp stuff in number
|
|
|
|
+ command above is for (you get four entries in e.g. /var/log/wtmp
|
|
|
|
+ per number switch). But I don't know enough about this.*/
|
|
|
|
+ Msg(0, "Sorting inside a window is not allowed. Push CTRL-a \" "
|
|
|
|
+ "and try again\n");
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ 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)
|
|
|
|
+ {
|
|
|
|
+ debug2("Exchange window %d and %d.\n", i, nr);
|
|
|
|
+ p = wtab[nr];
|
|
|
|
+ wtab[nr] = wtab[i];
|
|
|
|
+ wtab[i] = p;
|
|
|
|
+ wtab[nr]->w_number = nr;
|
|
|
|
+ wtab[i]->w_number = i;
|
|
|
|
+#ifdef MULTIUSER
|
|
|
|
+ /* exchange the acls for these windows. */
|
|
|
|
+ AclWinSwap(i, nr);
|
|
|
|
+#endif
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ WindowChanged((struct win *)0, 0);
|
|
|
|
+ break;
|
|
|
|
case RC_SILENCE:
|
|
|
|
n = fore->w_silence != 0;
|
|
|
|
i = fore->w_silencewait;
|