Merge branch 'master' into zig-0.14
This commit is contained in:
commit
c41cd07085
7 changed files with 54 additions and 36 deletions
|
@ -18,6 +18,7 @@ const MessageFilter = @import("MessageFilter.zig");
|
|||
const tui = @import("tui.zig");
|
||||
const ed = @import("editor.zig");
|
||||
const DigitStyle = @import("config").DigitStyle;
|
||||
const LineNumberMode = @import("config").LineNumberMode;
|
||||
|
||||
allocator: Allocator,
|
||||
plane: Plane,
|
||||
|
@ -27,8 +28,7 @@ lines: u32 = 0,
|
|||
view_rows: u32 = 1,
|
||||
view_top: u32 = 1,
|
||||
line: usize = 0,
|
||||
linenum: bool,
|
||||
relative: bool,
|
||||
mode: ?LineNumberMode = null,
|
||||
render_style: DigitStyle,
|
||||
highlight: bool,
|
||||
symbols: bool,
|
||||
|
@ -48,8 +48,7 @@ pub fn create(allocator: Allocator, parent: Widget, event_source: Widget, editor
|
|||
.allocator = allocator,
|
||||
.plane = try Plane.init(&(Widget.Box{}).opts(@typeName(Self)), parent.plane.*),
|
||||
.parent = parent,
|
||||
.linenum = tui.config().gutter_line_numbers,
|
||||
.relative = tui.config().gutter_line_numbers_relative,
|
||||
.mode = tui.config().gutter_line_numbers_mode,
|
||||
.render_style = tui.config().gutter_line_numbers_style,
|
||||
.highlight = tui.config().highlight_current_line_gutter,
|
||||
.symbols = tui.config().gutter_symbols,
|
||||
|
@ -112,9 +111,9 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool {
|
|||
}
|
||||
|
||||
fn update_width(self: *Self) void {
|
||||
if (!self.linenum) return;
|
||||
if (self.mode == .none) return;
|
||||
const width = int_width(self.lines);
|
||||
self.width = if (self.relative and width > 4) 4 else @max(width, 2);
|
||||
self.width = if (self.mode == .relative and width > 4) 4 else @max(width, 2);
|
||||
self.width += if (self.symbols) 3 else 1;
|
||||
}
|
||||
|
||||
|
@ -123,7 +122,23 @@ pub fn layout(self: *Self) Widget.Layout {
|
|||
}
|
||||
|
||||
inline fn get_width(self: *Self) usize {
|
||||
return if (self.linenum) self.width else if (self.symbols) 3 else 1;
|
||||
return if (self.mode != .none) self.width else if (self.symbols) 3 else 1;
|
||||
}
|
||||
|
||||
fn get_numbering_mode(self: *const Self) LineNumberMode {
|
||||
return self.mode orelse switch (if (tui.input_mode()) |mode| mode.line_numbers else .absolute) {
|
||||
.relative => .relative,
|
||||
.inherit => if (tui.input_mode_outer()) |mode| from_mode_enum(mode.line_numbers) else .absolute,
|
||||
.absolute => .absolute,
|
||||
};
|
||||
}
|
||||
|
||||
fn from_mode_enum(mode: anytype) LineNumberMode {
|
||||
return switch (mode) {
|
||||
.relative => .relative,
|
||||
.inherit => .absolute,
|
||||
.absolute => .absolute,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn render(self: *Self, theme: *const Widget.Theme) bool {
|
||||
|
@ -134,14 +149,10 @@ pub fn render(self: *Self, theme: *const Widget.Theme) bool {
|
|||
self.plane.home();
|
||||
self.plane.set_style(theme.editor_gutter);
|
||||
_ = self.plane.fill(" ");
|
||||
if (self.linenum) {
|
||||
const relative = self.relative or if (tui.input_mode()) |mode| mode.line_numbers == .relative else false;
|
||||
if (relative)
|
||||
self.render_relative(theme)
|
||||
else
|
||||
self.render_linear(theme);
|
||||
} else {
|
||||
self.render_none(theme);
|
||||
switch (self.get_numbering_mode()) {
|
||||
.none => self.render_none(theme),
|
||||
.relative => self.render_relative(theme),
|
||||
.absolute => self.render_linear(theme),
|
||||
}
|
||||
if (self.symbols)
|
||||
self.render_diagnostics(theme);
|
||||
|
|
|
@ -572,25 +572,17 @@ const cmds = struct {
|
|||
|
||||
pub fn gutter_mode_next(self: *Self, _: Ctx) Result {
|
||||
const config = tui.config_mut();
|
||||
var ln = config.gutter_line_numbers;
|
||||
var lnr = config.gutter_line_numbers_relative;
|
||||
if (ln and !lnr) {
|
||||
ln = true;
|
||||
lnr = true;
|
||||
} else if (ln and lnr) {
|
||||
ln = false;
|
||||
lnr = false;
|
||||
} else {
|
||||
ln = true;
|
||||
lnr = false;
|
||||
}
|
||||
config.gutter_line_numbers = ln;
|
||||
config.gutter_line_numbers_relative = lnr;
|
||||
const mode: ?@import("config").LineNumberMode = if (config.gutter_line_numbers_mode) |mode| switch(mode) {
|
||||
.absolute => .relative,
|
||||
.relative => .none,
|
||||
.none => null,
|
||||
} else .relative;
|
||||
|
||||
config.gutter_line_numbers_mode = mode;
|
||||
try tui.save_config();
|
||||
if (self.widgets.get("editor_gutter")) |gutter_widget| {
|
||||
const gutter = gutter_widget.dynamic_cast(@import("editor_gutter.zig")) orelse return;
|
||||
gutter.linenum = ln;
|
||||
gutter.relative = lnr;
|
||||
gutter.mode = mode;
|
||||
}
|
||||
}
|
||||
pub const gutter_mode_next_meta: Meta = .{ .description = "Next gutter mode" };
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue