diff options
author | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2009-12-11 17:29:48 -0500 |
---|---|---|
committer | Sadrul Habib Chowdhury <sadrul@users.sourceforge.net> | 2009-12-11 17:29:48 -0500 |
commit | 0dc3a24b7bd949dc2c1709416b580828baea5b5f (patch) | |
tree | f906448cc365f1a44879171de1be2624c97df148 | |
parent | 8284ab11992952b215f191990ea1da84a7f70e7c (diff) | |
download | screen-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/ChangeLog | 1 | ||||
-rw-r--r-- | src/layout.c | 33 | ||||
-rw-r--r-- | src/process.c | 9 |
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; |