screen-devel
[Top][All Lists]
Advanced

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

[screen-devel] [PATCH] [RESEND] screen: Introduce sort command


From: Thomas Renninger
Subject: [screen-devel] [PATCH] [RESEND] screen: Introduce sort command
Date: Mon, 19 Sep 2011 13:59:09 +0200
User-agent: KMail/1.13.6 (Linux/2.6.37.6-0.7-desktop; KDE/4.6.0; x86_64; ; )

:sort
will sort all active screen windows ordered by title.
Limitations:
  - Will only work in overview window (CTRL-a-")
  - For unknown reasons it does not always work.
    Encountered on a screen session with about 100 active
    windows and several users active, that the sorting
    does not always take place.

Still, this command is very helpful for users who use
screen sessions with a huge amount of active windows.

Might apply with line offset to latest screen sources.
Got tested intensively with our screen over the last
years.

Please apply.

Signed-off-by: Thomas Renninger <address@hidden>

 comm.c       |    1 +
 doc/screen.1 |    5 +++++
 process.c    |   41 +++++++++++++++++++++++++++++++++++++++++
 3 files changed, 47 insertions(+)

Index: screen-4.0.2/comm.c
===================================================================
--- screen-4.0.2.orig/comm.c
+++ screen-4.0.2/comm.c
@@ -283,6 +283,7 @@
   { "sleep",           ARGS_1 },
   { "slowpaste",       NEED_FORE|ARGS_01 },
   { "sorendition",      ARGS_012 },
+  { "sort",            ARGS_0 },
   { "source",          ARGS_1 },
   { "split",           NEED_DISPLAY|ARGS_0 },
   { "startup_message", ARGS_1 },
Index: screen-4.0.2/process.c
===================================================================
--- screen-4.0.2.orig/process.c
+++ screen-4.0.2/process.c
@@ -2794,6 +2794,47 @@
          WindowChanged((struct win *)0, 0);
        }
       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;
Index: screen-4.0.2/doc/screen.1
===================================================================
--- screen-4.0.2.orig/doc/screen.1
+++ screen-4.0.2/doc/screen.1
@@ -2673,6 +2673,11 @@
 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



reply via email to

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