diff --git a/src/tui/editor_gutter.zig b/src/tui/editor_gutter.zig index 51c9da5..177a16f 100644 --- a/src/tui/editor_gutter.zig +++ b/src/tui/editor_gutter.zig @@ -120,7 +120,7 @@ pub fn render(self: *Self, theme: *const Widget.Theme) bool { tui.set_base_style(&self.plane, " ", theme.editor_gutter); self.plane.erase(); if (self.linenum) { - const relative = self.relative or std.mem.eql(u8, tui.get_mode(), root.application_logo ++ "NOR"); // TODO: move to mode + const relative = self.relative or if (tui.current().input_mode) |mode| mode.line_numbers == .relative else false; if (relative) self.render_relative(theme) else @@ -158,7 +158,9 @@ pub fn render_relative(self: *Self, theme: *const Widget.Theme) void { const line: isize = @intCast(self.line + 1); var pos: usize = 0; var linenum: isize = row - line; + var abs_linenum = self.row + 1; var rows = self.rows; + var diff_symbols = self.diff_symbols.items; var buf: [31:0]u8 = undefined; while (rows > 0) : (rows -= 1) { if (pos > self.lines - row) return; @@ -168,8 +170,10 @@ pub fn render_relative(self: *Self, theme: *const Widget.Theme) void { _ = self.plane.putstr_aligned(@intCast(pos), nc.Align.right, if (fmt.len > 6) "==> " else fmt) catch {}; if (self.highlight and linenum == 0) self.render_line_highlight(pos, theme); + self.render_diff_symbols(&diff_symbols, pos, abs_linenum, theme); pos += 1; linenum += 1; + abs_linenum += 1; } } diff --git a/src/tui/mode/input/vim/normal.zig b/src/tui/mode/input/vim/normal.zig index 2032cc7..a870bc2 100644 --- a/src/tui/mode/input/vim/normal.zig +++ b/src/tui/mode/input/vim/normal.zig @@ -31,6 +31,7 @@ pub fn create(a: Allocator) !tui.Mode { return .{ .handler = EventHandler.to_owned(self), .name = root.application_logo ++ "NORMAL", + .line_numbers = .relative, }; } diff --git a/src/tui/tui.zig b/src/tui/tui.zig index 70a3e35..e35704d 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -759,6 +759,7 @@ const cmds = struct { pub const Mode = struct { handler: EventHandler, name: []const u8, + line_numbers: enum { absolute, relative } = .absolute, fn deinit(self: *Mode) void { self.handler.deinit();