feat: add pasting support to open recent and find modes

This commit is contained in:
CJ van den Berg 2024-04-17 18:03:09 +02:00
parent b6127b06d4
commit 438d64268e
3 changed files with 16 additions and 0 deletions

View file

@ -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;
}

View file

@ -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;
}

View file

@ -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);
}