diff options
Diffstat (limited to 'src/process.c')
-rw-r--r-- | src/process.c | 100 |
1 files changed, 74 insertions, 26 deletions
diff --git a/src/process.c b/src/process.c index cc2b56f..dfa7c82 100644 --- a/src/process.c +++ b/src/process.c @@ -1154,6 +1154,7 @@ int key; char ch; struct display *odisplay = display; struct acluser *user; + struct layout *layout; user = display ? D_user : users; if (nr == RC_ILLEGAL) @@ -1271,22 +1272,27 @@ int key; case RC_HARDCOPY: { int mode = DUMP_HARDCOPY; + char *file = NULL; - if (argc > 1 && !strcmp(*args, "-h")) + if (args[0]) { - mode = DUMP_SCROLLBACK; - args++; - argc--; + if (!strcmp(*args, "-h")) + { + mode = DUMP_SCROLLBACK; + file = args[1]; + } + else if (!strcmp(*args, "--") && args[1]) + file = args[1]; + else + file = args[0]; } - if (*args && args[1]) + + if (args[0] && file == args[0] && args[1]) { OutputMsg(0, "%s: hardcopy: too many arguments", rc_name); break; } - if (fore == 0 && *args == 0) - OutputMsg(0, "%s: hardcopy: window required", rc_name); - else - WriteFile(user, *args, mode); + WriteFile(user, file, mode); } break; case RC_DEFLOG: @@ -4241,8 +4247,22 @@ int key; } break; case RC_LAYOUT: + // A number of the subcommands for "layout" are ignored, or not processed correctly when there + // is no attached display. + if (!strcmp(args[0], "title")) { + if (!display) + { + if (!args[1]) // There is no display, and there is no new title. Ignore. + break; + if (!layout_attach || layout_attach == &layout_last_marker) + layout_attach = CreateLayout(args[1], 0); + else + RenameLayout(layout_attach, args[1]); + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4253,13 +4273,17 @@ int key; OutputMsg(0, "current layout is %d (%s)", D_layout->lay_number, D_layout->lay_title); break; } - free(D_layout->lay_title); - D_layout->lay_title= SaveStr(args[1]); + RenameLayout(D_layout, args[1]); } else if (!strcmp(args[0], "number")) { - int old; - struct layout *lay; + if (!display) + { + if (args[1] && layout_attach && layout_attach != &layout_last_marker) + RenumberLayout(layout_attach, atoi(args[1])); + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4270,20 +4294,23 @@ int key; OutputMsg(0, "This is layout %d (%s).\n", D_layout->lay_number, D_layout->lay_title); break; } - old = D_layout->lay_number; - n = atoi(args[1]); - if (n < 0 || n >= MAXLAY) - break; - lay = laytab[n]; - laytab[n] = D_layout; - D_layout->lay_number = n; - laytab[old] = lay; - if (lay) - lay->lay_number = old; + RenumberLayout(D_layout, atoi(args[1])); break; } else if (!strcmp(args[0], "autosave")) { + if (!display) + { + if (args[1] && layout_attach && layout_attach != &layout_last_marker) + { + if (!strcmp(args[1], "on")) + layout_attach->lay_autosave = 1; + else if (!strcmp(args[1], "off")) + layout_attach->lay_autosave = 0; + } + break; + } + if (!D_layout) { OutputMsg(0, "not on a layout"); @@ -4333,10 +4360,17 @@ int key; OutputMsg(0, "usage: layout save <name>"); break; } - SaveLayout(args[1], &D_canvas); + if (display) + SaveLayout(args[1], &D_canvas); } else if (!strcmp(args[0], "select")) { + if (!display) + { + if (args[1]) + layout_attach = FindLayout(args[1]); + break; + } if (!args[1]) { Input("Switch to layout: ", 20, INP_COOKED, SelectLayoutFin, NULL, 0); @@ -4346,6 +4380,12 @@ int key; } else if (!strcmp(args[0], "next")) { + if (!display) + { + if (layout_attach && layout_attach != &layout_last_marker) + layout_attach = layout_attach->lay_next ? layout_attach->lay_next : layouts;; + break; + } struct layout *lay = D_layout; if (lay) lay = lay->lay_next ? lay->lay_next : layouts; @@ -4363,14 +4403,22 @@ int key; } else if (!strcmp(args[0], "prev")) { - struct layout *lay = D_layout; + struct layout *lay = display ? D_layout : layout_attach; + struct layout *target = lay; if (lay) { - for (lay = layouts; lay->lay_next && lay->lay_next != D_layout; lay = lay->lay_next) + for (lay = layouts; lay->lay_next && lay->lay_next != target; lay = lay->lay_next) ; } else lay = layouts; + + if (!display) + { + layout_attach = lay; + break; + } + if (!lay) { OutputMsg(0, "no layout defined"); |