summaryrefslogtreecommitdiff
path: root/src/process.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/process.c')
-rw-r--r--src/process.c100
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");