int*_*ted 94 xorg keyboard-shortcuts copy-paste
我希望能够使用键盘粘贴 X 选择。目前我必须使用鼠标中键来做到这一点。
我认为伪造鼠标中键按下相当容易,但这样的解决方案还需要将鼠标指针移动到文本插入符号的位置。
有一个更好的方法吗?
Cal*_*leb 100
在某些默认的 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
如果这些都不适合您,那么您可以采用两种方法。
有一个应用程序!™ 使用各种剪贴板管理器程序之一为您处理。最流行的似乎是Parcellite和Glippy,但你可以看看这里的其他替代品。另请参阅有关高级剪贴板管理器的问题
自己破解吧。
除了编写自己的代码和利用 X api,用于这项工作的黑客工具是几个小的命令行实用程序,它们为您提供了一个了解 X 思想的窗口。只是一个小窗口提醒您,整个视图太可怕了.
第一个工具是xsel. 这个小工作人员会在任何给定时间吐出 X 的选择缓冲区中的任何内容。
现在你需要把它加入你的程序。对此有两种选择。一种是xdotool允许您模拟向 Xorg 输入系统发送事件。您可以使用它的类型方法xdotool type foo_bar来模拟在光标处键入“foo_bar”。结合起来,你会得到这样的东西:
$ xdotool type $(xsel)
Run Code Online (Sandbox Code Playgroud)
另一种是xvkbd从较低的子系统发送键盘事件。您可以在 STDIN 上将按键输入管道。结合xsel,你会得到这样的东西:
$ xsel | xvkbd -xsendevent -file -
Run Code Online (Sandbox Code Playgroud)
伟大的。现在让键绑定来运行这些东西。如果您运行 Gnome-2,您可以在System -> Preferences -> Keyboard shortcuts 中添加自定义快捷方式。如果您使用不同的 DE 或 WM,则此练习由读者决定。
最后一点是,当将命令绑定到键盘快捷键时,通常只需要一个命令,而不是像我们上面使用的那样通过管道连接两个命令。您可以通过将您的管道命令作为命令字符串 argumetn 调用到新的 shell 来完成此操作,如下所示:
sh -c 'xsel | xvkbd -xsendevent -file -'
sh -c 'xdotool type "$(xsel)"'
Run Code Online (Sandbox Code Playgroud)
小智 10
显然Shift+Insert在某些 GTK 3 安装上可能无法正常工作,至少在 FreeBSD 上是这样。问题描述如下:
Shift-Insert 不粘贴主要选择。相反,它必须粘贴剪贴板(已经使用了 Control-V)。因此,没有仅通过键盘插入主要选择的方法。必须将鼠标拖到那里并单击鼠标中键。这使得终端和 GTK 之间的交互变得不舒服。
最近(在撰写本文时)错误报告和补丁可用:
http://www.freebsd.org/cgi/query-pr.cgi?pr=188264
xdotool click 2
Run Code Online (Sandbox Code Playgroud)
这个模拟鼠标按键直接点击,不需要使用xsel/ xdotool type ...。