feat: add interactive and non-interactive commands to set the current buffer's tab_width

This commit is contained in:
CJ van den Berg 2025-08-11 14:29:23 +02:00
parent 1632061144
commit 3e0e75c9c8
Signed by: neurocyte
GPG key ID: 8EB1E1BB660E3FB9
3 changed files with 39 additions and 0 deletions

View file

@ -432,6 +432,7 @@ pub const Editor = struct {
tp.extract_cbor(&cursels_cbor),
}))
return error.RestoreStateMatch;
self.refresh_tab_width();
if (op == .open_file)
try self.open(file_path);
self.clipboard = if (clipboard.len > 0) try self.allocator.dupe(u8, clipboard) else null;
@ -702,6 +703,23 @@ pub const Editor = struct {
return;
}
fn refresh_tab_width(self: *Self) void {
self.metrics = self.plane.metrics(self.tab_width);
switch (self.indent_mode) {
.spaces, .auto => {},
.tabs => self.indent_size = self.tab_width,
}
}
pub fn set_tab_width(self: *Self, ctx: Context) Result {
var tab_width: usize = 0;
if (!try ctx.args.match(.{tp.extract(&tab_width)}))
return error.InvalidSetTabWidthArgument;
self.tab_width = tab_width;
self.refresh_tab_width();
}
pub const set_tab_width_meta: Meta = .{ .arguments = &.{.integer} };
fn close(self: *Self) !void {
var meta = std.ArrayListUnmanaged(u8).empty;
defer meta.deinit(self.allocator);

View file

@ -0,0 +1,16 @@
const command = @import("command");
pub const Type = @import("numeric_input.zig").Create(@This());
pub const create = Type.create;
pub fn name(_: *Type) []const u8 {
return " tab size";
}
pub const preview = goto;
pub const apply = goto;
pub const cancel = goto;
fn goto(self: *Type) void {
command.executeName("set_tab_width", command.fmt(.{self.input orelse self.start})) catch {};
}

View file

@ -744,6 +744,11 @@ const cmds = struct {
}
pub const force_terminate_meta: Meta = .{ .description = "Force quit without saving" };
pub fn tab_width(self: *Self, ctx: Ctx) Result {
return enter_mini_mode(self, @import("mode/mini/tab_width.zig"), ctx);
}
pub const tab_width_meta: Meta = .{ .description = "Set tab width" };
pub fn set_theme(self: *Self, ctx: Ctx) Result {
var name: []const u8 = undefined;
if (!try ctx.args.match(.{tp.extract(&name)}))