From 16c54711268ecb6898b26d0a1405f9b80b2d9545 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 25 Oct 2024 22:39:04 +0200 Subject: [PATCH] refactor: move command and EventHandler out of the tui module --- build.zig | 17 +++++++++++++++++ src/{tui => }/EventHandler.zig | 19 +++++++++++++++++++ src/{tui => }/command.zig | 4 ++-- src/tui/Button.zig | 3 ++- src/tui/Menu.zig | 2 +- src/tui/ModalBackground.zig | 2 +- src/tui/Widget.zig | 2 +- src/tui/editor.zig | 4 ++-- src/tui/editor_gutter.zig | 4 ++-- src/tui/filelist_view.zig | 4 ++-- src/tui/home.zig | 3 ++- src/tui/inputview.zig | 2 +- src/tui/inspector_view.zig | 4 ++-- src/tui/mainview.zig | 4 ++-- src/tui/mode/input/flow.zig | 4 ++-- src/tui/mode/input/helix/insert.zig | 4 ++-- src/tui/mode/input/helix/normal.zig | 4 ++-- src/tui/mode/input/helix/select.zig | 4 ++-- src/tui/mode/input/home.zig | 4 ++-- src/tui/mode/input/vim/insert.zig | 4 ++-- src/tui/mode/input/vim/normal.zig | 4 ++-- src/tui/mode/input/vim/visual.zig | 4 ++-- src/tui/mode/mini/file_browser.zig | 4 ++-- src/tui/mode/mini/find.zig | 4 ++-- src/tui/mode/mini/find_in_files.zig | 4 ++-- src/tui/mode/mini/move_to_char.zig | 4 ++-- src/tui/mode/mini/open_file.zig | 2 +- src/tui/mode/mini/save_as.zig | 2 +- src/tui/mode/overlay/command_palette.zig | 3 +-- src/tui/mode/overlay/open_recent.zig | 4 ++-- src/tui/mode/overlay/palette.zig | 4 ++-- src/tui/scrollbar_v.zig | 2 +- src/tui/status/bar.zig | 3 ++- src/tui/status/blank.zig | 5 +++-- src/tui/status/clock.zig | 5 +++-- src/tui/status/diagstate.zig | 5 +++-- src/tui/status/filestate.zig | 5 +++-- src/tui/status/keystate.zig | 6 +++--- src/tui/status/linenumstate.zig | 5 +++-- src/tui/status/minilog.zig | 6 +++--- src/tui/status/modestate.zig | 5 +++-- src/tui/status/modstate.zig | 6 +++--- src/tui/status/selectionstate.zig | 6 +++--- src/tui/status/widget.zig | 8 +++++--- src/tui/tui.zig | 9 +++++++-- 45 files changed, 132 insertions(+), 81 deletions(-) rename src/{tui => }/EventHandler.zig (91%) rename src/{tui => }/command.zig (98%) diff --git a/build.zig b/build.zig index eca093d..6a793bb 100644 --- a/build.zig +++ b/build.zig @@ -118,6 +118,21 @@ pub fn build(b: *std.Build) void { }, }); + const command_mod = b.createModule(.{ + .root_source_file = b.path("src/command.zig"), + .imports = &.{ + .{ .name = "thespian", .module = thespian_mod }, + .{ .name = "log", .module = log_mod }, + }, + }); + + const EventHandler_mod = b.createModule(.{ + .root_source_file = b.path("src/EventHandler.zig"), + .imports = &.{ + .{ .name = "thespian", .module = thespian_mod }, + }, + }); + const color_mod = b.createModule(.{ .root_source_file = b.path("src/color.zig"), }); @@ -196,6 +211,8 @@ pub fn build(b: *std.Build) void { .{ .name = "cbor", .module = cbor_mod }, .{ .name = "config", .module = config_mod }, .{ .name = "log", .module = log_mod }, + .{ .name = "command", .module = command_mod }, + .{ .name = "EventHandler", .module = EventHandler_mod }, .{ .name = "location_history", .module = location_history_mod }, .{ .name = "project_manager", .module = project_manager_mod }, .{ .name = "syntax", .module = syntax_mod }, diff --git a/src/tui/EventHandler.zig b/src/EventHandler.zig similarity index 91% rename from src/tui/EventHandler.zig rename to src/EventHandler.zig index 79c5ce5..37b6bf1 100644 --- a/src/tui/EventHandler.zig +++ b/src/EventHandler.zig @@ -35,6 +35,25 @@ pub fn to_owned(pimpl: anytype) Self { }; } +pub fn static(T: type) Self { + return .{ + .ptr = &none, + .vtable = comptime &.{ + .type_name = @typeName(T), + .deinit = struct { + pub fn deinit(_: *anyopaque) void {} + }.deinit, + .send = struct { + pub fn receive(_: *anyopaque, from_: tp.pid_ref, m: tp.message) tp.result { + _ = try T.receive(from_, m); + } + }.receive, + }, + }; +} + +var none = {}; + pub fn to_unowned(pimpl: anytype) Self { const impl = @typeInfo(@TypeOf(pimpl)); const child: type = impl.Pointer.child; diff --git a/src/tui/command.zig b/src/command.zig similarity index 98% rename from src/tui/command.zig rename to src/command.zig index 0722914..179c4ef 100644 --- a/src/tui/command.zig +++ b/src/command.zig @@ -2,7 +2,7 @@ const std = @import("std"); const tp = @import("thespian"); const log = @import("log"); -const tui = @import("tui.zig"); +pub var context_check: ?*const fn() void = null; pub const ID = usize; pub const ID_unknown = std.math.maxInt(ID); @@ -98,7 +98,7 @@ pub fn removeCommand(id: ID) void { } pub fn execute(id: ID, ctx: Context) tp.result { - _ = tui.current(); // assert we are in tui thread scope + if(context_check) |check| check(); if (id >= commands.items.len) return tp.exit_fmt("CommandNotFound: {d}", .{id}); const cmd = commands.items[id]; diff --git a/src/tui/Button.zig b/src/tui/Button.zig index 23e9b21..6f297ed 100644 --- a/src/tui/Button.zig +++ b/src/tui/Button.zig @@ -1,6 +1,7 @@ const std = @import("std"); const tp = @import("thespian"); +const EventHandler = @import("EventHandler"); const Plane = @import("renderer").Plane; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; @@ -22,7 +23,7 @@ pub fn Options(context: type) type { on_render: *const fn (ctx: *context, button: *State(Context), theme: *const Widget.Theme) bool = on_render_default, on_layout: *const fn (ctx: *context, button: *State(Context)) Widget.Layout = on_layout_default, on_receive: *const fn (ctx: *context, button: *State(Context), from: tp.pid_ref, m: tp.message) error{Exit}!bool = on_receive_default, - on_event: ?Widget.EventHandler = null, + on_event: ?EventHandler = null, pub const Context = context; pub fn do_nothing(_: *context, _: *State(Context)) void {} diff --git a/src/tui/Menu.zig b/src/tui/Menu.zig index 01b6384..a5ab5ef 100644 --- a/src/tui/Menu.zig +++ b/src/tui/Menu.zig @@ -1,8 +1,8 @@ const std = @import("std"); +const EventHandler = @import("EventHandler"); const Widget = @import("Widget.zig"); const WidgetList = @import("WidgetList.zig"); -const EventHandler = @import("EventHandler.zig"); const Button = @import("Button.zig"); const scrollbar_v = @import("scrollbar_v.zig"); diff --git a/src/tui/ModalBackground.zig b/src/tui/ModalBackground.zig index b7ef4b1..31f9cfb 100644 --- a/src/tui/ModalBackground.zig +++ b/src/tui/ModalBackground.zig @@ -1,9 +1,9 @@ const std = @import("std"); const tp = @import("thespian"); +const EventHandler = @import("EventHandler"); const tui = @import("tui.zig"); const Widget = @import("Widget.zig"); -const EventHandler = @import("EventHandler.zig"); const Plane = @import("renderer").Plane; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; diff --git a/src/tui/Widget.zig b/src/tui/Widget.zig index d923d88..1ffc42b 100644 --- a/src/tui/Widget.zig +++ b/src/tui/Widget.zig @@ -3,10 +3,10 @@ const Allocator = std.mem.Allocator; const tp = @import("thespian"); const Plane = @import("renderer").Plane; +const EventHandler = @import("EventHandler"); const tui = @import("tui.zig"); pub const Box = @import("Box.zig"); -pub const EventHandler = @import("EventHandler.zig"); pub const Theme = @import("theme"); pub const themes = @import("themes").themes; pub const scopes = @import("themes").scopes; diff --git a/src/tui/editor.zig b/src/tui/editor.zig index c1722b9..4db3d9b 100644 --- a/src/tui/editor.zig +++ b/src/tui/editor.zig @@ -16,13 +16,13 @@ const Plane = @import("renderer").Plane; const Cell = @import("renderer").Cell; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const scrollbar_v = @import("scrollbar_v.zig"); const editor_gutter = @import("editor_gutter.zig"); -const EventHandler = @import("EventHandler.zig"); const Widget = @import("Widget.zig"); const WidgetList = @import("WidgetList.zig"); -const command = @import("command.zig"); const tui = @import("tui.zig"); pub const Cursor = Buffer.Cursor; diff --git a/src/tui/editor_gutter.zig b/src/tui/editor_gutter.zig index 6cb6462..c061530 100644 --- a/src/tui/editor_gutter.zig +++ b/src/tui/editor_gutter.zig @@ -10,12 +10,12 @@ const Plane = @import("renderer").Plane; const style = @import("renderer").style; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("Widget.zig"); -const EventHandler = @import("EventHandler.zig"); const MessageFilter = @import("MessageFilter.zig"); const tui = @import("tui.zig"); -const command = @import("command.zig"); const ed = @import("editor.zig"); allocator: Allocator, diff --git a/src/tui/filelist_view.zig b/src/tui/filelist_view.zig index 4bb45f4..880aa4e 100644 --- a/src/tui/filelist_view.zig +++ b/src/tui/filelist_view.zig @@ -6,12 +6,12 @@ const Plane = @import("renderer").Plane; const tp = @import("thespian"); const log = @import("log"); const root = @import("root"); +const command = @import("command"); +const EventHandler = @import("EventHandler"); -const command = @import("command.zig"); const tui = @import("tui.zig"); const Widget = @import("Widget.zig"); const Menu = @import("Menu.zig"); -const EventHandler = @import("EventHandler.zig"); const Button = @import("Button.zig"); const scrollbar_v = @import("scrollbar_v.zig"); const editor = @import("editor.zig"); diff --git a/src/tui/home.zig b/src/tui/home.zig index 874c2b1..0d02753 100644 --- a/src/tui/home.zig +++ b/src/tui/home.zig @@ -8,7 +8,8 @@ const Widget = @import("Widget.zig"); const Button = @import("Button.zig"); const Menu = @import("Menu.zig"); const tui = @import("tui.zig"); -const command = @import("command.zig"); +const command = @import("command"); + const fonts = @import("fonts.zig"); allocator: std.mem.Allocator, diff --git a/src/tui/inputview.zig b/src/tui/inputview.zig index f5f0b94..3d00be3 100644 --- a/src/tui/inputview.zig +++ b/src/tui/inputview.zig @@ -6,10 +6,10 @@ const ArrayList = @import("std").ArrayList; const tp = @import("thespian"); const Plane = @import("renderer").Plane; +const EventHandler = @import("EventHandler"); const tui = @import("tui.zig"); const Widget = @import("Widget.zig"); -const EventHandler = @import("EventHandler.zig"); pub const name = "inputview"; diff --git a/src/tui/inspector_view.zig b/src/tui/inspector_view.zig index 720056a..86390be 100644 --- a/src/tui/inspector_view.zig +++ b/src/tui/inspector_view.zig @@ -7,10 +7,10 @@ const syntax = @import("syntax"); const Plane = @import("renderer").Plane; const style = @import("renderer").style; +const EventHandler = @import("EventHandler"); const tui = @import("tui.zig"); const Widget = @import("Widget.zig"); -const EventHandler = @import("EventHandler.zig"); const mainview = @import("mainview.zig"); const ed = @import("editor.zig"); @@ -74,7 +74,7 @@ fn clear(self: *Self) void { fn inspect_location(self: *Self, row: usize, col: usize) void { const syn = self.editor.syntax orelse return; const root = (self.editor.buffer orelse return).root; - const col_pos = root.get_line_width_to_pos(row, col,self.editor.metrics) catch return; + const col_pos = root.get_line_width_to_pos(row, col, self.editor.metrics) catch return; syn.highlights_at_point(self, dump_highlight, .{ .row = @intCast(row), .column = @intCast(col_pos) }); } diff --git a/src/tui/mainview.zig b/src/tui/mainview.zig index 41b58dd..2712d52 100644 --- a/src/tui/mainview.zig +++ b/src/tui/mainview.zig @@ -11,11 +11,11 @@ const log = @import("log"); const Plane = @import("renderer").Plane; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; +const command = @import("command"); const tui = @import("tui.zig"); -const command = @import("command.zig"); const Box = @import("Box.zig"); -const EventHandler = @import("EventHandler.zig"); +const EventHandler = @import("EventHandler"); const Widget = @import("Widget.zig"); const WidgetList = @import("WidgetList.zig"); const WidgetStack = @import("WidgetStack.zig"); diff --git a/src/tui/mode/input/flow.zig b/src/tui/mode/input/flow.zig index a1c0e0d..45cb7fd 100644 --- a/src/tui/mode/input/flow.zig +++ b/src/tui/mode/input/flow.zig @@ -5,10 +5,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/helix/insert.zig b/src/tui/mode/input/helix/insert.zig index 136cf8d..d8250d6 100644 --- a/src/tui/mode/input/helix/insert.zig +++ b/src/tui/mode/input/helix/insert.zig @@ -4,10 +4,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/helix/normal.zig b/src/tui/mode/input/helix/normal.zig index 7ca179a..39ff407 100644 --- a/src/tui/mode/input/helix/normal.zig +++ b/src/tui/mode/input/helix/normal.zig @@ -4,10 +4,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/helix/select.zig b/src/tui/mode/input/helix/select.zig index 1cb30aa..fc8d052 100644 --- a/src/tui/mode/input/helix/select.zig +++ b/src/tui/mode/input/helix/select.zig @@ -4,10 +4,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/home.zig b/src/tui/mode/input/home.zig index 0926064..bacab8d 100644 --- a/src/tui/mode/input/home.zig +++ b/src/tui/mode/input/home.zig @@ -5,10 +5,10 @@ const root = @import("root"); const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; const mod = @import("renderer").input.modifier; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const Self = @This(); diff --git a/src/tui/mode/input/vim/insert.zig b/src/tui/mode/input/vim/insert.zig index 5460625..14830a6 100644 --- a/src/tui/mode/input/vim/insert.zig +++ b/src/tui/mode/input/vim/insert.zig @@ -5,10 +5,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/vim/normal.zig b/src/tui/mode/input/vim/normal.zig index ad86c28..fbab0f8 100644 --- a/src/tui/mode/input/vim/normal.zig +++ b/src/tui/mode/input/vim/normal.zig @@ -4,10 +4,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/input/vim/visual.zig b/src/tui/mode/input/vim/visual.zig index 878c82a..e03e0cd 100644 --- a/src/tui/mode/input/vim/visual.zig +++ b/src/tui/mode/input/vim/visual.zig @@ -4,10 +4,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../../tui.zig"); -const command = @import("../../../command.zig"); -const EventHandler = @import("../../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const ArrayList = @import("std").ArrayList; diff --git a/src/tui/mode/mini/file_browser.zig b/src/tui/mode/mini/file_browser.zig index 79818f4..85037c9 100644 --- a/src/tui/mode/mini/file_browser.zig +++ b/src/tui/mode/mini/file_browser.zig @@ -9,10 +9,10 @@ const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; const project_manager = @import("project_manager"); +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const MessageFilter = @import("../../MessageFilter.zig"); const max_complete_paths = 1024; diff --git a/src/tui/mode/mini/find.zig b/src/tui/mode/mini/find.zig index f867862..a382a47 100644 --- a/src/tui/mode/mini/find.zig +++ b/src/tui/mode/mini/find.zig @@ -4,11 +4,11 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); const mainview = @import("../../mainview.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const ed = @import("../../editor.zig"); const Allocator = @import("std").mem.Allocator; diff --git a/src/tui/mode/mini/find_in_files.zig b/src/tui/mode/mini/find_in_files.zig index 8ab14ad..dca629f 100644 --- a/src/tui/mode/mini/find_in_files.zig +++ b/src/tui/mode/mini/find_in_files.zig @@ -4,11 +4,11 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); const mainview = @import("../../mainview.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; const eql = @import("std").mem.eql; diff --git a/src/tui/mode/mini/move_to_char.zig b/src/tui/mode/mini/move_to_char.zig index da4561a..7d9e2aa 100644 --- a/src/tui/mode/mini/move_to_char.zig +++ b/src/tui/mode/mini/move_to_char.zig @@ -4,11 +4,11 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); const mainview = @import("../../mainview.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const Allocator = @import("std").mem.Allocator; diff --git a/src/tui/mode/mini/open_file.zig b/src/tui/mode/mini/open_file.zig index f5da436..955cde7 100644 --- a/src/tui/mode/mini/open_file.zig +++ b/src/tui/mode/mini/open_file.zig @@ -1,10 +1,10 @@ const std = @import("std"); const tp = @import("thespian"); const root = @import("root"); +const command = @import("command"); const tui = @import("../../tui.zig"); const mainview = @import("../../mainview.zig"); -const command = @import("../../command.zig"); pub const Type = @import("file_browser.zig").Create(@This()); diff --git a/src/tui/mode/mini/save_as.zig b/src/tui/mode/mini/save_as.zig index 39fc9a8..0650f09 100644 --- a/src/tui/mode/mini/save_as.zig +++ b/src/tui/mode/mini/save_as.zig @@ -1,10 +1,10 @@ const std = @import("std"); const tp = @import("thespian"); const root = @import("root"); +const command = @import("command"); const tui = @import("../../tui.zig"); const mainview = @import("../../mainview.zig"); -const command = @import("../../command.zig"); pub const Type = @import("file_browser.zig").Create(@This()); diff --git a/src/tui/mode/overlay/command_palette.zig b/src/tui/mode/overlay/command_palette.zig index c2a9aa7..76f89dd 100644 --- a/src/tui/mode/overlay/command_palette.zig +++ b/src/tui/mode/overlay/command_palette.zig @@ -2,8 +2,7 @@ const std = @import("std"); const cbor = @import("cbor"); const tp = @import("thespian"); const root = @import("root"); - -const command = @import("../../command.zig"); +const command = @import("command"); pub const Type = @import("palette.zig").Create(@This()); diff --git a/src/tui/mode/overlay/open_recent.zig b/src/tui/mode/overlay/open_recent.zig index dd70334..71e410b 100644 --- a/src/tui/mode/overlay/open_recent.zig +++ b/src/tui/mode/overlay/open_recent.zig @@ -10,10 +10,10 @@ const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; const project_manager = @import("project_manager"); +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const MessageFilter = @import("../../MessageFilter.zig"); const Button = @import("../../Button.zig"); const InputBox = @import("../../InputBox.zig"); diff --git a/src/tui/mode/overlay/palette.zig b/src/tui/mode/overlay/palette.zig index 0716c3d..f4614ed 100644 --- a/src/tui/mode/overlay/palette.zig +++ b/src/tui/mode/overlay/palette.zig @@ -9,10 +9,10 @@ const key = @import("renderer").input.key; const mod = @import("renderer").input.modifier; const event_type = @import("renderer").input.event_type; const ucs32_to_utf8 = @import("renderer").ucs32_to_utf8; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const tui = @import("../../tui.zig"); -const command = @import("../../command.zig"); -const EventHandler = @import("../../EventHandler.zig"); const Button = @import("../../Button.zig"); const InputBox = @import("../../InputBox.zig"); const Widget = @import("../../Widget.zig"); diff --git a/src/tui/scrollbar_v.zig b/src/tui/scrollbar_v.zig index 2b0ac5d..1f7fba3 100644 --- a/src/tui/scrollbar_v.zig +++ b/src/tui/scrollbar_v.zig @@ -5,9 +5,9 @@ const tracy = @import("tracy"); const Plane = @import("renderer").Plane; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; +const EventHandler = @import("EventHandler"); const Widget = @import("Widget.zig"); -const EventHandler = @import("EventHandler.zig"); plane: Plane, pos_scrn: u32 = 0, diff --git a/src/tui/status/bar.zig b/src/tui/status/bar.zig index 9f83120..841b6e1 100644 --- a/src/tui/status/bar.zig +++ b/src/tui/status/bar.zig @@ -1,4 +1,5 @@ const std = @import("std"); +const EventHandler = @import("EventHandler"); const status_widget = @import("widget.zig"); const Widget = @import("../Widget.zig"); @@ -6,7 +7,7 @@ const WidgetList = @import("../WidgetList.zig"); pub const Style = enum { none, grip }; -pub fn create(allocator: std.mem.Allocator, parent: Widget, config: []const u8, style: Style, event_handler: ?Widget.EventHandler) !Widget { +pub fn create(allocator: std.mem.Allocator, parent: Widget, config: []const u8, style: Style, event_handler: ?EventHandler) !Widget { var w = try WidgetList.createH(allocator, parent, "statusbar", .{ .static = 1 }); if (style == .grip) w.after_render = render_grip; w.ctx = w; diff --git a/src/tui/status/blank.zig b/src/tui/status/blank.zig index e1fee8a..1ab62da 100644 --- a/src/tui/status/blank.zig +++ b/src/tui/status/blank.zig @@ -1,18 +1,19 @@ const std = @import("std"); const tp = @import("thespian"); const Plane = @import("renderer").Plane; +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); plane: Plane, layout: Widget.Layout, -on_event: ?Widget.EventHandler, +on_event: ?EventHandler, const Self = @This(); pub fn Create(comptime layout_: Widget.Layout) @import("widget.zig").CreateFunction { return struct { - fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { + fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { const self: *Self = try allocator.create(Self); self.* = .{ .plane = try Plane.init(&(Widget.Box{}).opts(@typeName(Self)), parent), diff --git a/src/tui/status/clock.zig b/src/tui/status/clock.zig index d59e1ad..18cc76d 100644 --- a/src/tui/status/clock.zig +++ b/src/tui/status/clock.zig @@ -3,6 +3,7 @@ const tp = @import("thespian"); const cbor = @import("cbor"); const zeit = @import("zeit"); +const EventHandler = @import("EventHandler"); const Plane = @import("renderer").Plane; const Widget = @import("../Widget.zig"); @@ -12,12 +13,12 @@ const tui = @import("../tui.zig"); allocator: std.mem.Allocator, plane: Plane, tick_timer: ?tp.Cancellable = null, -on_event: ?Widget.EventHandler, +on_event: ?EventHandler, tz: zeit.timezone.TimeZone, const Self = @This(); -pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { var env = std.process.getEnvMap(allocator) catch |e| return tp.exit_error(e, @errorReturnTrace()); defer env.deinit(); const self: *Self = try allocator.create(Self); diff --git a/src/tui/status/diagstate.zig b/src/tui/status/diagstate.zig index d745b27..9cf8dd1 100644 --- a/src/tui/status/diagstate.zig +++ b/src/tui/status/diagstate.zig @@ -3,10 +3,11 @@ const Allocator = std.mem.Allocator; const tp = @import("thespian"); const Plane = @import("renderer").Plane; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); const Button = @import("../Button.zig"); -const command = @import("../command.zig"); errors: usize = 0, warnings: usize = 0, @@ -17,7 +18,7 @@ rendered: [:0]const u8 = "", const Self = @This(); -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { return Button.create_widget(Self, allocator, parent, .{ .ctx = .{}, .label = "", diff --git a/src/tui/status/filestate.zig b/src/tui/status/filestate.zig index 3def46a..0a8cc16 100644 --- a/src/tui/status/filestate.zig +++ b/src/tui/status/filestate.zig @@ -7,10 +7,11 @@ const root = @import("root"); const Plane = @import("renderer").Plane; const style = @import("renderer").style; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); const Button = @import("../Button.zig"); -const command = @import("../command.zig"); const tui = @import("../tui.zig"); allocator: Allocator, @@ -35,7 +36,7 @@ eol_mode: Buffer.EolMode = .lf, const project_icon = ""; const Self = @This(); -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { const btn = try Button.create(Self, allocator, parent, .{ .ctx = .{ .allocator = allocator, diff --git a/src/tui/status/keystate.zig b/src/tui/status/keystate.zig index d306862..b2b3edc 100644 --- a/src/tui/status/keystate.zig +++ b/src/tui/status/keystate.zig @@ -7,11 +7,11 @@ const Plane = @import("renderer").Plane; const utils = @import("renderer").input.utils; const key_ = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); -const command = @import("../command.zig"); const tui = @import("../tui.zig"); -const EventHandler = @import("../EventHandler.zig"); const history = 8; @@ -31,7 +31,7 @@ const Self = @This(); const idle_msg = "🐶"; pub const width = idle_msg.len + 20; -pub fn create(allocator: Allocator, parent: Plane, _: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, _: ?EventHandler) @import("widget.zig").CreateError!Widget { const frame_rate = tp.env.get().num("frame-rate"); const self: *Self = try allocator.create(Self); self.* = .{ diff --git a/src/tui/status/linenumstate.zig b/src/tui/status/linenumstate.zig index 64085b2..21b5eb1 100644 --- a/src/tui/status/linenumstate.zig +++ b/src/tui/status/linenumstate.zig @@ -4,10 +4,11 @@ const tp = @import("thespian"); const Buffer = @import("Buffer"); const Plane = @import("renderer").Plane; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); const Button = @import("../Button.zig"); -const command = @import("../command.zig"); line: usize = 0, lines: usize = 0, @@ -18,7 +19,7 @@ eol_mode: Buffer.EolMode = .lf, const Self = @This(); -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { return Button.create_widget(Self, allocator, parent, .{ .ctx = .{}, .label = "", diff --git a/src/tui/status/minilog.zig b/src/tui/status/minilog.zig index 4290947..d11ce98 100644 --- a/src/tui/status/minilog.zig +++ b/src/tui/status/minilog.zig @@ -2,7 +2,7 @@ const std = @import("std"); const tp = @import("thespian"); const cbor = @import("cbor"); const log = @import("log"); - +const EventHandler = @import("EventHandler"); const Plane = @import("renderer").Plane; const Widget = @import("../Widget.zig"); @@ -15,7 +15,7 @@ msg: std.ArrayList(u8), msg_counter: usize = 0, clear_timer: ?tp.Cancellable = null, level: Level = .info, -on_event: ?Widget.EventHandler, +on_event: ?EventHandler, const message_display_time_seconds = 2; const error_display_time_seconds = 4; @@ -26,7 +26,7 @@ const Level = enum { err, }; -pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { const self: *Self = try allocator.create(Self); self.* = .{ .plane = try Plane.init(&(Widget.Box{}).opts(@typeName(Self)), parent), diff --git a/src/tui/status/modestate.zig b/src/tui/status/modestate.zig index 2616526..201603c 100644 --- a/src/tui/status/modestate.zig +++ b/src/tui/status/modestate.zig @@ -3,14 +3,15 @@ const Allocator = std.mem.Allocator; const Plane = @import("renderer").Plane; const style = @import("renderer").style; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); const Button = @import("../Button.zig"); -const command = @import("../command.zig"); const tui = @import("../tui.zig"); const CreateError = @import("widget.zig").CreateError; -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?Widget.EventHandler) CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!Widget { return Button.create_widget(void, allocator, parent, .{ .ctx = {}, .label = tui.get_mode(), diff --git a/src/tui/status/modstate.zig b/src/tui/status/modstate.zig index ed73f58..d3c63e0 100644 --- a/src/tui/status/modstate.zig +++ b/src/tui/status/modstate.zig @@ -7,11 +7,11 @@ const Plane = @import("renderer").Plane; const key = @import("renderer").input.key; const event_type = @import("renderer").input.event_type; const utils = @import("renderer").input.utils; +const command = @import("command"); +const EventHandler = @import("EventHandler"); const Widget = @import("../Widget.zig"); -const command = @import("../command.zig"); const tui = @import("../tui.zig"); -const EventHandler = @import("../EventHandler.zig"); plane: Plane, ctrl: bool = false, @@ -23,7 +23,7 @@ const Self = @This(); pub const width = 5; -pub fn create(allocator: Allocator, parent: Plane, _: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, _: ?EventHandler) @import("widget.zig").CreateError!Widget { const self: *Self = try allocator.create(Self); self.* = .{ .plane = try Plane.init(&(Widget.Box{}).opts(@typeName(Self)), parent), diff --git a/src/tui/status/selectionstate.zig b/src/tui/status/selectionstate.zig index 5e56d1a..28bc180 100644 --- a/src/tui/status/selectionstate.zig +++ b/src/tui/status/selectionstate.zig @@ -2,7 +2,7 @@ const std = @import("std"); const Allocator = std.mem.Allocator; const tp = @import("thespian"); const tracy = @import("tracy"); - +const EventHandler = @import("EventHandler"); const Plane = @import("renderer").Plane; const Widget = @import("../Widget.zig"); @@ -14,11 +14,11 @@ cursels: usize = 0, selection: ?ed.Selection = null, buf: [256]u8 = undefined, rendered: [:0]const u8 = "", -on_event: ?Widget.EventHandler, +on_event: ?EventHandler, const Self = @This(); -pub fn create(allocator: Allocator, parent: Plane, event_handler: ?Widget.EventHandler) @import("widget.zig").CreateError!Widget { +pub fn create(allocator: Allocator, parent: Plane, event_handler: ?EventHandler) @import("widget.zig").CreateError!Widget { const self: *Self = try allocator.create(Self); self.* = .{ .plane = try Plane.init(&(Widget.Box{}).opts(@typeName(Self)), parent), diff --git a/src/tui/status/widget.zig b/src/tui/status/widget.zig index 5e7ada7..4c7fbd5 100644 --- a/src/tui/status/widget.zig +++ b/src/tui/status/widget.zig @@ -1,7 +1,9 @@ const std = @import("std"); -const Widget = @import("../Widget.zig"); +const EventHandler = @import("EventHandler"); const Plane = @import("renderer").Plane; +const Widget = @import("../Widget.zig"); + const widgets = std.static_string_map.StaticStringMap(CreateFunction).initComptime(.{ .{ "mode", @import("modestate.zig").create }, .{ "file", @import("filestate.zig").create }, @@ -16,9 +18,9 @@ const widgets = std.static_string_map.StaticStringMap(CreateFunction).initCompti .{ "clock", @import("clock.zig").create }, }); pub const CreateError = error{ OutOfMemory, Exit }; -pub const CreateFunction = *const fn (allocator: std.mem.Allocator, parent: Plane, event_handler: ?Widget.EventHandler) CreateError!Widget; +pub const CreateFunction = *const fn (allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!Widget; -pub fn create(name: []const u8, allocator: std.mem.Allocator, parent: Plane, event_handler: ?Widget.EventHandler) CreateError!?Widget { +pub fn create(name: []const u8, allocator: std.mem.Allocator, parent: Plane, event_handler: ?EventHandler) CreateError!?Widget { const create_ = widgets.get(name) orelse return null; return try create_(allocator, parent, event_handler); } diff --git a/src/tui/tui.zig b/src/tui/tui.zig index bcf7a70..5bec5b2 100644 --- a/src/tui/tui.zig +++ b/src/tui/tui.zig @@ -8,11 +8,11 @@ const tracy = @import("tracy"); const builtin = @import("builtin"); pub const renderer = @import("renderer"); +const command = @import("command"); +const EventHandler = @import("EventHandler"); -const command = @import("command.zig"); const Widget = @import("Widget.zig"); const MessageFilter = @import("MessageFilter.zig"); -const EventHandler = @import("EventHandler.zig"); const mainview = @import("mainview.zig"); const Allocator = std.mem.Allocator; @@ -67,6 +67,7 @@ pub fn spawn(allocator: Allocator, ctx: *tp.context, eh: anytype, env: ?*const t } fn start(args: StartArgs) tp.result { + command.context_check = &context_check; _ = tp.set_trap(true); var self = init(args.allocator) catch |e| return tp.exit_error(e, @errorReturnTrace()); errdefer self.deinit(); @@ -781,6 +782,10 @@ pub fn current() *Self { return instance_ orelse @panic("tui call out of context"); } +fn context_check() void { + if (instance_ == null) @panic("tui call out of context"); +} + pub fn get_mode() []const u8 { return if (current().input_mode) |m| m.name else "INI"; }