summaryrefslogtreecommitdiff
path: root/src/layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/layout.c')
-rw-r--r--src/layout.c57
1 files changed, 48 insertions, 9 deletions
diff --git a/src/layout.c b/src/layout.c
index 6100b5d..584abbd 100644
--- a/src/layout.c
+++ b/src/layout.c
@@ -64,7 +64,7 @@ CreateLayout(title, startat)
char *title;
int startat;
{
- struct layout *lay;
+ struct layout *lay, **pl;
int i;
if (startat >= MAXLAY || startat < 0)
@@ -86,8 +86,12 @@ int startat;
lay->lay_autosave = 1;
lay->lay_number = i;
laytab[i] = lay;
- lay->lay_next = layouts;
- layouts = lay;
+ lay->lay_next = 0;
+
+ pl = &layouts;
+ while (*pl)
+ pl = &(*pl)->lay_next;
+ *pl = lay;
return lay;
}
@@ -164,6 +168,8 @@ struct canvas *cv;
FreeCanvas(D_canvas.c_slperp);
D_cvlist = 0;
D_forecv = lay->lay_forecv;
+ if (!D_forecv)
+ MakeDefaultCanvas();
DupLayoutCv(&lay->lay_canvas, &D_canvas, 0);
D_canvas.c_ye = D_height - 1 - ((D_canvas.c_slperp && D_canvas.c_slperp->c_slnext) || captionalways) - (D_has_hstatus == HSTATUS_LASTLINE);
ResizeCanvas(&D_canvas);
@@ -185,12 +191,20 @@ int startat;
lay = CreateLayout(title, startat);
if (!lay)
return;
- LoadLayout(0, &D_canvas);
- fcv = D_forecv;
- DupLayoutCv(&D_canvas, &lay->lay_canvas, 1);
- lay->lay_forecv = D_forecv;
- D_forecv = fcv;
- D_layout = lay;
+
+ if (display)
+ {
+ LoadLayout(0, &D_canvas);
+ fcv = D_forecv;
+ DupLayoutCv(&D_canvas, &lay->lay_canvas, 1);
+ lay->lay_forecv = D_forecv;
+ D_forecv = fcv;
+ D_layout = lay;
+ }
+ else
+ {
+ layout_attach = lay;
+ }
lay->lay_autosave = 1;
}
@@ -365,3 +379,28 @@ char *filename;
return 1;
}
+void RenameLayout(layout, name)
+struct layout *layout;
+const char *name;
+{
+ free(layout->lay_title);
+ layout->lay_title = SaveStr(name);
+}
+
+int RenumberLayout(layout, number)
+struct layout *layout;
+int number;
+{
+ int old;
+ struct layout *lay;
+ old = layout->lay_number;
+ if (number < 0 || number >= MAXLAY)
+ return 0;
+ lay = laytab[number];
+ laytab[number] = layout;
+ layout->lay_number = number;
+ laytab[old] = lay;
+ if (lay)
+ lay->lay_number = old;
+ return 1;
+}