File sort_command.patch of Package screen

--- ./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] =
   { "sleep",		ARGS_1 },
   { "slowpaste",	NEED_FORE|ARGS_01 },
   { "sorendition",      ARGS_012 },
+  { "sort",		ARGS_0 },
   { "source",		ARGS_1 },
   { "split",		NEED_DISPLAY|ARGS_01 },
   { "startup_message",	ARGS_1 },
--- ./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;
 	    }
 	}
       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;
openSUSE Build Service is sponsored by