From a74c0ecf4619291e1d02ba5090e3ef0b7fbbf69c Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Wed, 30 Jul 2025 19:16:27 +0200 Subject: [PATCH] feat: add indent_mode detection (auto mode) --- src/tui/editor.zig | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/tui/editor.zig b/src/tui/editor.zig index 5ae958e..f9e84d9 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -594,15 +594,19 @@ pub const Editor = struct { self.logger.print("syntax highlighting disabled", .{}); self.syntax_no_render = true; } + + var content = std.ArrayListUnmanaged(u8).empty; + defer content.deinit(std.heap.c_allocator); + { + const frame_ = tracy.initZone(@src(), .{ .name = "store" }); + defer frame_.deinit(); + try new_buf.root.store(content.writer(std.heap.c_allocator), new_buf.file_eol_mode); + } + if (self.indent_mode == .auto) + self.detect_indent_mode(content.items); + self.syntax = syntax: { const lang_override = file_type orelse tp.env.get().str("language"); - var content = std.ArrayListUnmanaged(u8).empty; - defer content.deinit(std.heap.c_allocator); - { - const frame_ = tracy.initZone(@src(), .{ .name = "store" }); - defer frame_.deinit(); - try new_buf.root.store(content.writer(std.heap.c_allocator), new_buf.file_eol_mode); - } self.file_type = blk: { const frame_ = tracy.initZone(@src(), .{ .name = "guess" }); @@ -674,6 +678,19 @@ pub const Editor = struct { self.enable_auto_save = true; } + fn detect_indent_mode(self: *Self, content: []const u8) void { + var it = std.mem.splitScalar(u8, content, '\n'); + while (it.next()) |line| { + if (line.len == 0) continue; + if (line[0] == '\t') { + self.indent_mode = .tabs; + return; + } + } + self.indent_mode = .spaces; + return; + } + fn close(self: *Self) !void { var meta = std.ArrayListUnmanaged(u8).empty; defer meta.deinit(self.allocator);