From 99a4fb093654b8609b0b7d7651904d97483eb590 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Igor=20T=C3=A1mara?= Date: Fri, 21 Nov 2025 10:16:46 -0500 Subject: [PATCH 1/3] fix: change len for egc_chunk_width --- src/tui/mode/overlay/symbol_palette.zig | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/tui/mode/overlay/symbol_palette.zig b/src/tui/mode/overlay/symbol_palette.zig index ae08ce4..0117245 100644 --- a/src/tui/mode/overlay/symbol_palette.zig +++ b/src/tui/mode/overlay/symbol_palette.zig @@ -108,10 +108,13 @@ pub fn load_entries(palette: *Type) !usize { var cbor_item: []const u8 = undefined; if (!try cbor.matchValue(&iter, cbor.extract_cbor(&cbor_item))) return error.BadCompletion; const label_, const parent_, const kind, const sel = get_values(cbor_item); - (try palette.entries.addOne(palette.allocator)).* = .{ .cbor = cbor_item, .label = label_[0..@min(columns[0].max_width, label_.len)], .range = sel }; + const label_len_ = tui.egc_chunk_width(label_, 0, 1); + const parent_len = tui.egc_chunk_width(parent_, 0, 1); + (try palette.entries.addOne(palette.allocator)).* = .{ .cbor = cbor_item, .label = label_[0..@min(columns[0].max_width, label_len_)], .range = sel }; - const current_lengths: [3]usize = .{ label_.len, parent_.len, @tagName(kind).len }; - const label_len: u8 = @truncate(if (label_.len > columns[0].max_width) columns[0].max_width else label_.len); + + const current_lengths: [3]usize = .{ label_len_, parent_len, @tagName(kind).len }; + const label_len: u8 = @truncate(if (label_len_ > columns[0].max_width) columns[0].max_width else label_len_); max_cols_len = @max(max_cols_len, label_len, update_max_col_sizes(palette, ¤t_lengths)); max_label_len = @max(max_label_len, label_len); } @@ -128,7 +131,8 @@ pub fn load_entries(palette: *Type) !usize { palette.quick_activate_enabled = false; const total_width = total_row_width(); - return 2 + if (max_cols_len > label.len + 3) total_width - max_label_len else label.len + 1 - max_cols_len; + const outer_label_len = tui.egc_chunk_width(label, 0, 1); + return 2 + if (max_cols_len > outer_label_len + 3) total_width - max_label_len else outer_label_len + 1 - max_cols_len; } pub fn clear_entries(palette: *Type) void { From 99b721febf6e7c7c674ac5bf51aab1c78e26c515 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 12 Dec 2025 14:04:53 +0100 Subject: [PATCH 2/3] fix: don't index into utf-8 based on egc width --- src/tui/mode/overlay/symbol_palette.zig | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/tui/mode/overlay/symbol_palette.zig b/src/tui/mode/overlay/symbol_palette.zig index 0117245..87d748c 100644 --- a/src/tui/mode/overlay/symbol_palette.zig +++ b/src/tui/mode/overlay/symbol_palette.zig @@ -110,8 +110,7 @@ pub fn load_entries(palette: *Type) !usize { const label_, const parent_, const kind, const sel = get_values(cbor_item); const label_len_ = tui.egc_chunk_width(label_, 0, 1); const parent_len = tui.egc_chunk_width(parent_, 0, 1); - (try palette.entries.addOne(palette.allocator)).* = .{ .cbor = cbor_item, .label = label_[0..@min(columns[0].max_width, label_len_)], .range = sel }; - + (try palette.entries.addOne(palette.allocator)).* = .{ .cbor = cbor_item, .label = label_[0..@min(columns[0].max_width, label_.len)], .range = sel }; const current_lengths: [3]usize = .{ label_len_, parent_len, @tagName(kind).len }; const label_len: u8 = @truncate(if (label_len_ > columns[0].max_width) columns[0].max_width else label_len_); From 660449c1c0be58ac39ca548fc63cc533755be01f Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 12 Dec 2025 14:11:28 +0100 Subject: [PATCH 3/3] refactor: use *std.Io.Writer instead of anytype --- src/text_manip.zig | 4 ++-- src/tui/mode/overlay/symbol_palette.zig | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/text_manip.zig b/src/text_manip.zig index 2197315..54307db 100644 --- a/src/text_manip.zig +++ b/src/text_manip.zig @@ -90,11 +90,11 @@ pub fn toggle_prefix_in_text(prefix: []const u8, text: []const u8, allocator: st return result.toOwnedSlice(allocator); } -pub fn write_string(writer: anytype, string: []const u8, pad: ?usize) !void { +pub fn write_string(writer: *std.Io.Writer, string: []const u8, pad: ?usize) !void { try writer.writeAll(string); if (pad) |pad_| try write_padding(writer, string.len, pad_); } -pub fn write_padding(writer: anytype, len: usize, pad_len: usize) !void { +pub fn write_padding(writer: *std.Io.Writer, len: usize, pad_len: usize) !void { for (0..pad_len - len) |_| try writer.writeAll(" "); } diff --git a/src/tui/mode/overlay/symbol_palette.zig b/src/tui/mode/overlay/symbol_palette.zig index 87d748c..67d15e6 100644 --- a/src/tui/mode/overlay/symbol_palette.zig +++ b/src/tui/mode/overlay/symbol_palette.zig @@ -74,7 +74,7 @@ fn update_max_col_sizes(palette: *Type, comp_sizes: []const usize) u8 { return total_length; } -fn write_columns(palette: *Type, writer: anytype, column_info: [][]const u8) void { +fn write_columns(palette: *Type, writer: *std.Io.Writer, column_info: [][]const u8) void { if (palette.value.column_size.len == 0) return; write_string(writer, column_info[0][0..@min(palette.value.column_size[0], column_info[0].len)], columns[0].max_width) catch {};