summaryrefslogtreecommitdiff
path: root/src/pardes.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/pardes.zig')
-rw-r--r--src/pardes.zig41
1 files changed, 29 insertions, 12 deletions
diff --git a/src/pardes.zig b/src/pardes.zig
index aa2ec398..ad530319 100644
--- a/src/pardes.zig
+++ b/src/pardes.zig
@@ -553,8 +553,12 @@ test "PdfTint cycles pane-local state and exposes it in the live PDF tag" {
const full_tag = try p.tagText(p.scratch.allocator(), pane);
try std.testing.expect(std.mem.indexOf(u8, full_tag, "full PdfTint") != null);
- // The launch companion is a terminal. Running the same pane-scoped word
- // there cannot mutate the PDF next to it.
+ // Running the same pane-scoped word in a terminal cannot mutate the PDF
+ // next to it. A FILE boot is one pane now, so that terminal is asked for
+ // here rather than inherited from init.
+ _ = try p.newPane(1);
+ p.layoutAppendColumn(1);
+ p.sync(); // rects for the new column, exactly as the two-pane boot did
try std.testing.expect(!hasPdf(p.panes[1].?));
p.runBuiltin(tint_builtin, 1, "", null);
try std.testing.expectEqual(PdfTintMode.full, pv.tint);
@@ -773,6 +777,11 @@ test "PDF pane geometry change preserves its page-relative position" {
.rows = 24,
});
defer p.deinit();
+ // A FILE boot is one pane now and a lone column always fills the window,
+ // so the divider drag below needs a second column to take the width from.
+ _ = try p.newPane(1);
+ p.layoutAppendColumn(1);
+ p.sync(); // rects for the new column, exactly as the two-pane boot did
const pane = p.panes[0].?;
const pv = &pane.pdf.?;
p.native_images = true;
@@ -1345,6 +1354,14 @@ test "PdfSections output, Look, and n/N share exact cached outline destinations"
const p = try Pardes.init(gpa, .{ .file = path, .cols = 80, .rows = 28 });
defer p.deinit();
+ // A FILE boot is one pane now, so the launch shell this leans on twice has
+ // to be asked for: an empty slot 1 would satisfy the inertness check below
+ // for the wrong reason (runBuiltin drops a null pane before any builtin
+ // runs) AND would then be handed to the +PdfSections output, which is the
+ // one pane the look at the end must NOT come from.
+ _ = try p.newPane(1);
+ p.layoutAppendColumn(1);
+ p.sync(); // rects for the new column, exactly as the two-pane boot did
while (p.nextEffect()) |_| {}
const pdf_pane = p.panes[0].?;
const sections = std.meta.stringToEnum(Builtin, "PdfSections") orelse
@@ -3741,10 +3758,12 @@ pub const Rect = struct { x: u16, y: u16, w: u16, h: u16 };
pub const Options = struct {
tty_only: bool = false,
- /// initial shell panes: 1 (default) or 3 for the classic two-column boot
+ /// initial shell panes: 1 (default) or 3 for the classic two-column boot.
+ /// A `file` outranks this — see there.
shells: u8 = 1,
- /// argv FILE (resolved absolute): boot with it focused as a doc pane in
- /// the left column, a terminal on the launch directory in the right
+ /// argv FILE (resolved absolute): boot with it as the ONLY pane, focused
+ /// and filling the window. It names the whole boot layout, so `shells` is
+ /// not consulted at all (it never was — the file arm always won).
file: ?[]const u8 = null,
file_line: usize = 0,
tty_toggle: u21 = config.tty_toggle_default,
@@ -3932,8 +3951,10 @@ pub const Pardes = struct {
const p = try gpa.create(Pardes);
p.* = .{ .gpa = gpa, .opts = opts, .screen_w = opts.cols, .screen_h = opts.rows, .scratch = .init(gpa) };
if (opts.file) |path| {
- // FILE argv boot: the doc focused in the left column, a terminal
- // on the launch directory in the right (files left, shells right)
+ // FILE argv boot: the doc alone, filling the window. Naming a file
+ // is asking to READ it, not to be handed a shell you did not ask
+ // for and have to close — and the launch directory is one Newcol
+ // away when it is wanted. Doc, PDF and image all boot the same way.
_ = initial_doc: {
if (comptime pdf_enabled) if (look.isPdfPath(path))
break :initial_doc try p.openPdfView(0, path, opts.file_line);
@@ -3941,13 +3962,9 @@ pub const Pardes = struct {
break :initial_doc try p.openImageView(0, path);
break :initial_doc try file_pane.open(p, 0, path, opts.file_line);
};
- const sh = try p.newPane(1);
- sh.greet = true;
- p.ncol = 2;
+ p.ncol = 1;
p.col_n[0] = 1;
p.col_terms[0][0] = 0;
- p.col_n[1] = 1;
- p.col_terms[1][0] = 1;
} else if (opts.tty_only) {
_ = try p.newPane(0);
p.panes[0].?.mode = .tty;