summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSadrul Habib Chowdhury <sadrul@users.sourceforge.net>2009-12-11 17:29:48 -0500
committerSadrul Habib Chowdhury <sadrul@users.sourceforge.net>2009-12-11 17:29:48 -0500
commit0dc3a24b7bd949dc2c1709416b580828baea5b5f (patch)
treef906448cc365f1a44879171de1be2624c97df148
parent8284ab11992952b215f191990ea1da84a7f70e7c (diff)
downloadscreen-0dc3a24b7bd949dc2c1709416b580828baea5b5f.tar.gz
New 'dump' subcommand for 'layout'.
This command will write a series of screen commands that can later be used to recreate the current layout. I think this will be pretty useful. Users like to create a layout interactively, and use it again for the next session etc.
-rw-r--r--src/ChangeLog1
-rw-r--r--src/layout.c33
-rw-r--r--src/process.c9
3 files changed, 43 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 5b7aeb7..80d400b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -16,6 +16,7 @@ Version 4.1.0 (??/??/20??):
- 'attach'
- 'show'
- 'remove'
+ - 'dump'
* 'group' for moving window(s) into a group.
* 'defmousetrack' and 'mousetrack', to turn on/off mouse-tracking for
displays. It's turned off by default. With mouse-tracking turned on, it's
diff --git a/src/layout.c b/src/layout.c
index 2aed7d0..6100b5d 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -332,3 +332,36 @@ struct win *wi;
}
+static void
+dump_canvas(cv, file)
+struct canvas *cv;
+FILE *file;
+{
+ struct canvas *c;
+ for (c = cv->c_slperp; c && c->c_slnext; c = c->c_slnext)
+ {
+ fprintf(file, "split%s\n", c->c_slorient == SLICE_HORI ? " -v" : "");
+ }
+
+ for (c = cv->c_slperp; c; c = c->c_slnext)
+ {
+ if (c->c_slperp)
+ dump_canvas(c, file);
+ else
+ fprintf(file, "focus\n");
+ }
+}
+
+int
+LayoutDumpCanvas(cv, filename)
+struct canvas *cv;
+char *filename;
+{
+ FILE *file = secfopen(filename, "a");
+ if (!file)
+ return 0;
+ dump_canvas(cv, file);
+ fclose(file);
+ return 1;
+}
+
diff --git a/src/process.c b/src/process.c
index 8788ea8..2874e7e 100644
--- a/src/process.c
+++ b/src/process.c
@@ -4367,6 +4367,15 @@ int key;
if (lay)
RemoveLayout(lay);
}
+ else if (!strcmp(args[0], "dump"))
+ {
+ if (!display)
+ Msg(0, "Must have a display for 'layout dump'.");
+ else if (!LayoutDumpCanvas(&D_canvas, args[1] ? args[1] : "layout-dump"))
+ Msg(errno, "Error dumping layout.");
+ else
+ Msg(0, "Layout dumped to \"%s\"", args[1] ? args[1] : "layout-dump");
+ }
else
Msg(0, "unknown layout subcommand");
break;