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


Answers:


93

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

  • Ctrl+V

  • Ctrl+ Shift+V

  • Ctrl+ Shift+Insert

不行吗 您的桌面环境或Window Manager可能没有配置它们,而且很复杂,因为-即使在一个DE或WM的旗帜下-每个工具箱(例如GTK,Qt,Etc。)也可能具有不同的默认绑定。某些程序(例如gvim)甚至具有自己的内部复制寄存器,这些寄存器不一定与运行它们的图形环境同步。最重要的是,即使程序确实使用X剪贴板系统,X也可以选择多个系统。最基本的两个是选择缓冲区(始终具有最后选择的内容(不执行时执行))和复制缓冲区(通常需要将它们专门复制到其中)。要将显式副本复制到后一个系统中,可以尝试以下任何一种尝试:

  • Ctrl+C

  • Shift+ Ctrl+C

  • Ctrl+Insert


如果这些都不是为您神奇地工作,则有两种方法可以走。

  1. 有一个应用程序!™使用各种剪贴板管理器程序之一来为您处理。最流行的似乎是ParcelliteGlippy,但你可以看看这里的其他替代品。另请参阅有关高级剪贴板管理器的问题

  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,则此长度取决于阅读器。

最后要注意的是,将命令绑定到键盘快捷键时,通常仅需要一个命令,而不是像上面使用的那样将两个命令与管道连接。您可以通过如下方式将管道命令作为命令字符串argumetn调用到新的shell中来实现:

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

1
绝对符合“更好”的条件。谢谢!
直觉

在什么应用中?我使用的所有应用程序都不会经常出现这种情况。
Gilles

我正在使用Ubuntu,并且我真的希望Shift-Insert有任何实际用途,但实际上并没有(在Ubuntu中)。我发现的唯一“一致性(+/-)”是X- GTK应用程序中的选择可以Shift-Inserted到中gnome-terminal,但是对于这些相同应用程序的任何其他交叉粘贴组合来说,它都是碰碰运气的...我使用的KDE应用程序很少(包括Konsole),完全交叉粘贴...。甚至在GTK应用程序中,单击中心也可能有效,但Shift + Insert可能不起作用(对于同一应用程序).​​..所以我使用鼠标:(
Peter.O

没有“ X级绑定”之类的东西。可能是您使用的应用程序执行的操作,或者是窗口管理器或桌面环境执行的操作。我怀疑这将特定于发行版。
Gilles

1
我发现一种简单的方法是将键盘快捷键绑定到发送中间点击事件。对我来说就是xdotool click 2
Inductiveload

10

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

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

提供了最新的(截至撰写本文时)错误报告和补丁:

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


8
xdotool click 2

这模拟了鼠标按钮直接单击的过程,不需要使用xsel/ xdotool type ...


1
这需要正确定位鼠标,因此您不妨实际使用鼠标按钮。如果有某种方法可以将鼠标捕捉到光标上,尽管这可能是答案的一部分(我怀疑有)
jberryman

2

我正在使用Ubuntu 12,在从gterm(和任何其他应用程序)中的xterm粘贴文本时遇到问题。另外,我使用的笔记本电脑像许多人一样没有鼠标中键(对于没有中间按钮的Linux用户,实际上没有剪贴板的怜悯,并且没有:right-click + left_click不能替代它)。

虽然我认为“ xsel | xvkbd -xsendevent -file-”方法非常酷。我发现最简单的解决方案是运行预安装的“ gnome-terminal”而不是“ xterminal”。“ gnome-terminal”支持右键单击“复制到剪贴板”命令。然后,我可以将“编辑菜单->粘贴”输入gedit或使用shift-insert。Ubuntu 12预先安装了“ gnome-terminal”。其他debian / gnome安装程序应该能够通过以下方式安装它:

sudo apt-get install gnome-terminal

在Ubuntu中,通过单击启动器栏顶部的“ Dash Home”按钮将其添加到左侧启动器。在出现的搜索框中,键入terminal。您可以将“终端”图标拖到启动器栏。


2
这是一个非常差的解决方案。您不能真正建议人们切换到另一个终端,尤其是那些将依赖于100MB + gnome-shell的终端。这也不能使其与任何其他应用程序一起使用,最糟糕的是,这仍然需要使用鼠标才能工作。
pfrenssen 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.