feat: add palette_placement config option

This commit is contained in:
CJ van den Berg 2026-04-12 22:22:53 +02:00
parent d296d3cf63
commit 37bbb17da6
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 60 additions and 3 deletions

View file

@ -26,7 +26,17 @@ pub const Placement = enum {
top_center,
top_left,
top_right,
center,
primary_cursor,
fn from_config(conf: @import("config").PalettePlacement) Placement {
return switch (conf) {
.top_center => .top_center,
.top_left => .top_left,
.top_right => .top_right,
.center => .center,
};
}
};
pub const ActivateMode = enum {
@ -110,7 +120,10 @@ pub fn Create(options: type) type {
.mode = try keybind.mode("overlay/palette", allocator, .{
.insert_command = "overlay_insert_bytes",
}),
.placement = if (@hasDecl(options, "placement")) options.placement else .top_center,
.placement = if (@hasDecl(options, "placement"))
options.placement
else
Placement.from_config(tui.config().palette_placement),
};
try self.commands.init(self);
self.mode.event_handler = EventHandler.to_owned(self);
@ -204,6 +217,7 @@ pub fn Create(options: type) type {
.top_center => self.prepare_resize_top_center(screen, w),
.top_left => self.prepare_resize_top_left(screen, w),
.top_right => self.prepare_resize_top_right(screen, w, padding),
.center => self.prepare_resize_center(screen, w),
.primary_cursor => self.prepare_resize_primary_cursor(screen, w, padding),
};
}
@ -248,6 +262,14 @@ pub fn Create(options: type) type {
return self.prepare_resize_at_y_x(screen, w, cursor.row + 1 + padding.top, cursor.col);
}
fn prepare_resize_center(self: *Self, screen: Widget.Box, w: usize) Widget.Box {
const x = if (screen.w > w) (screen.w - w) / 2 else 0;
const h = @min(self.items + self.menu.header_count, self.view_rows + self.menu.header_count);
const y = if (screen.h > h) (screen.h - h) / 2 else 0;
self.view_rows = get_view_rows(screen) -| y;
return .{ .y = y, .x = x, .w = w, .h = h };
}
fn after_resize_menu(self: *Self, _: *Menu.State(*Self), _: Widget.Box) void {
return self.after_resize();
}