使用键盘粘贴 X 选择(不是剪贴板内容)

使用键盘粘贴 X 选择(不是剪贴板内容)

我希望能够使用键盘粘贴 X 选择。目前我必须使用鼠标中键来执行此操作。

我认为伪造鼠标中键按下相当容易,但这样的解决方案还需要将鼠标指针移动到文本插入符的位置。

有一个更好的方法吗?

答案1

在某些默认的 Linux 设置上,Shift+Insert将执行X-selection-paste.正如您所指出的,这与命令明显不同X-clipboard-paste,命令的绑定通常因应用程序而异。如果这不起作用,可以尝试其他几个键:

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

不去吗?您的桌面环境或窗口管理器可能没有配置它们,而且这很复杂,因为即使在一个 DE 或 WM 的旗帜下,每个工具包(例如 GTK、Qt 等)也可能有不同的默认绑定。有些程序(例如gvim)甚至有自己的内部复制寄存器,这些寄存器不一定与它们运行的​​图形环境同步。最重要的是,即使程序确实使用 X 剪贴板系统,X 也有多个系统可供选择。两个最基本的是选择缓冲区(它总是包含最后选择的内容(除非没有))和复制缓冲区(通常需要专门将内容复制到其中)。要在后一个系统中进行显式复制,您可以尝试使用以下任何一种方法来确定大小:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


如果这些都不能神奇地为你工作,你可以采用两种方法。

  1. 有一个应用程序可以做到这一点!™ 使用各种剪贴板管理器程序之一来为您处理此问题。最受欢迎的似乎是石块岩格利皮,但你可以查看其他选择在这里。另请参阅此关于高级剪贴板管理器的问题

  2. 自己破解吧。

假设你想破解它。

除了编写自己的代码并利用 X api 之外,用于这项工作的黑客工具是几个小命令行实用程序,它们为您提供了了解 X 思想的窗口。请注意,只是一个小窗口,整个视图太可怕了。

第一个工具是xsel.这个小混蛋会在任何给定时间吐出 X 选择缓冲区中的任何内容。

现在您需要将其添加到您的程序中。有两种选择。其一是xdotool允许您模拟向 Xorg 输入系统发送事件。你可以使用它的类型方法就像xdotool type foo_bar模仿在光标处输入“foo_bar”。结合起来,你会得到这样的东西:

$ xdotool type $(xsel)

另一种是xvkbd从较低的子系统发送键盘事件。您可以通过 STDIN 将击键输入其中。结合xsel,你会得到这样的结果:

$ xsel | xvkbd -xsendevent -file -

伟大的。现在让按键绑定来运行这个东西。如果您运行 Gnome-2,您可以在中添加自定义快捷方式系统 -> 首选项 -> 键盘快捷键。如果您使用不同的 DE 或 WM,则此练习大小由读者决定。

最后要注意的是,当将命令绑定到键盘快捷键时,通常只需要一个命令,而不是像我们上面使用的那样通过管道连接两个命令。您可以通过将管道命令作为命令字符串参数调用到新 shell 来完成此操作,如下所示:

sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'

答案2

显然Shift+Insert可能无法在 GTK 3 的某些安装上正常工作,至少在 FreeBSD 上是这样。该问题描述为:

Shift-Insert 不会粘贴主要选择内容。相反,它必须粘贴剪贴板(已使用 Control-V)。因此,没有仅使用键盘的方式来插入主要选择。必须将鼠标拖动到那里并单击鼠标中键。这使得终端和 GTK 之间的交互变得不舒服。

最近(截至撰写本文时)的错误报告和补丁可用:

http://www.freebsd.org/cgi/query-pr.cgi?pr=188264

答案3

xdotool click 2

这模拟了鼠标直接点击,不需要使用xsel/ xdotool type ...

答案4

在我的 20.04 Alt+ Shift+上Insert粘贴与中键单击相同的内容

相关内容