From 27bb0927b5f904c960dd3d87a1fca02f6b53b1a9 Mon Sep 17 00:00:00 2001 From: Alexandre Antonio Juca Date: Mon, 6 Jan 2025 13:02:41 +0100 Subject: [PATCH] feat: implement copy_url_to_clipboard keybinding action functionality --- src/Surface.zig | 21 +++++++++++++++++++++ src/input/Binding.zig | 3 +++ 2 files changed, 24 insertions(+) diff --git a/src/Surface.zig b/src/Surface.zig index 1dc10fb27..069340566 100644 --- a/src/Surface.zig +++ b/src/Surface.zig @@ -3932,6 +3932,27 @@ pub fn performBindingAction(self: *Surface, action: input.Binding.Action) !bool return false; }, + .copy_url_to_clipboard => { + const pos = try self.rt_surface.getCursorPos(); + + if (!self.mouse.over_link) { + return false; + } + + if (try self.linkAtPos(pos)) |link| { + const str = try self.io.terminal.screen.selectionString(self.alloc, .{ + .sel = link[1], + .trim = false, + }); + defer self.alloc.free(str); + + try self.rt_surface.setClipboardString(str, .standard, false); + return true; + } + + return false; + }, + .paste_from_clipboard => try self.startClipboardRequest( .standard, .{ .paste = {} }, diff --git a/src/input/Binding.zig b/src/input/Binding.zig index e0ad6c571..51c80726e 100644 --- a/src/input/Binding.zig +++ b/src/input/Binding.zig @@ -256,6 +256,8 @@ pub const Action = union(enum) { /// Copy and paste. copy_to_clipboard: void, + /// Copy the URL under cursor to the clipboard. + copy_url_to_clipboard: void, paste_from_clipboard: void, paste_from_selection: void, @@ -707,6 +709,7 @@ pub const Action = union(enum) { .cursor_key, .reset, .copy_to_clipboard, + .copy_url_to_clipboard, .paste_from_clipboard, .paste_from_selection, .increase_font_size,