diff --git a/src/tui/mode/mini/find.zig b/src/tui/mode/mini/find.zig index 6c95698..9061ceb 100644 --- a/src/tui/mode/mini/find.zig +++ b/src/tui/mode/mini/find.zig @@ -62,6 +62,7 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool { var keypress: u32 = undefined; var egc: u32 = undefined; var modifiers: u32 = undefined; + var text: []const u8 = undefined; defer { if (tui.current().mini_mode) |*mini_mode| { @@ -74,6 +75,8 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool { try self.mapEvent(evtype, keypress, egc, modifiers); } else if (try m.match(.{"F"})) { self.flush_input() catch |e| return e; + } else if (try m.match(.{ "system_clipboard", tp.extract(&text) })) { + try self.insert_bytes(text); } return false; } diff --git a/src/tui/mode/mini/find_in_files.zig b/src/tui/mode/mini/find_in_files.zig index d0c23f4..4853238 100644 --- a/src/tui/mode/mini/find_in_files.zig +++ b/src/tui/mode/mini/find_in_files.zig @@ -61,6 +61,7 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool { var keypress: u32 = undefined; var egc: u32 = undefined; var modifiers: u32 = undefined; + var text: []const u8 = undefined; defer { if (tui.current().mini_mode) |*mini_mode| { @@ -73,6 +74,8 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool { try self.mapEvent(evtype, keypress, egc, modifiers); } else if (try m.match(.{"F"})) { self.flush_input() catch |e| return e; + } else if (try m.match(.{ "system_clipboard", tp.extract(&text) })) { + try self.insert_bytes(text); } return false; } diff --git a/src/tui/mode/overlay/open_recent.zig b/src/tui/mode/overlay/open_recent.zig index a68fa76..5136c82 100644 --- a/src/tui/mode/overlay/open_recent.zig +++ b/src/tui/mode/overlay/open_recent.zig @@ -191,9 +191,12 @@ pub fn receive(self: *Self, _: tp.pid_ref, m: tp.message) error{Exit}!bool { var keypress: u32 = undefined; var egc: u32 = undefined; var modifiers: u32 = undefined; + var text: []const u8 = undefined; if (try m.match(.{ "I", tp.extract(&evtype), tp.extract(&keypress), tp.extract(&egc), tp.string, tp.extract(&modifiers) })) { try self.mapEvent(evtype, keypress, egc, modifiers); + } else if (try m.match(.{ "system_clipboard", tp.extract(&text) })) { + try self.insert_bytes(text); } return false; } @@ -217,6 +220,7 @@ fn mapPress(self: *Self, keypress: u32, egc: u32, modifiers: u32) tp.result { 'E' => self.cmd("open_recent_menu_down", .{}), 'P' => self.cmd("open_recent_menu_up", .{}), 'N' => self.cmd("open_recent_menu_down", .{}), + 'V' => self.cmd("system_paste", .{}), 'C' => self.cmd("exit_overlay_mode", .{}), 'G' => self.cmd("exit_overlay_mode", .{}), nc.key.ESC => self.cmd("exit_overlay_mode", .{}), @@ -308,6 +312,12 @@ fn insert_code_point(self: *Self, c: u32) tp.result { return self.start_query(); } +fn insert_bytes(self: *Self, bytes: []const u8) tp.result { + self.inputbox.text.appendSlice(bytes) catch |e| return tp.exit_error(e); + self.inputbox.cursor = self.inputbox.text.items.len; + return self.start_query(); +} + fn cmd(_: *Self, name_: []const u8, ctx: command.Context) tp.result { try command.executeName(name_, ctx); }