it-swarm.cn

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

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

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

有一个更好的方法吗?

86
intuited

在某些默认的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输入系统发送事件。您可以使用它的type方法,例如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)"'
95
Caleb

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

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

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

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

10
Michael Danilov
xdotool click 2

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

7
blueyed

我正在使用Ubuntu 12,在从gterm(和任何其他应用程序)中的xterm粘贴文本时遇到问题。另外,我使用的笔记本电脑像许多人一样没有鼠标中键(对于没有中间按钮的Linux用户,实际上没有剪贴板的怜悯,并且没有:右键单击+ 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
Ryan Woodard