如何使用键盘快捷键从主要选择(例如鼠标选择的文本)进行粘贴?Shift+Insert
从 PRIMARY 或 CLIPBOARD 粘贴不一致,具体取决于应用程序。
背景:
Ctrl+C
将所选文本复制到剪贴板,同时将鼠标选择复制到主文本。从 CLIPBOARD 粘贴Ctrl+V
,从 PRIMARY 粘贴mouse-middle-click
。
在终端模拟器 (gnome-terminal) 中,从 CLIPBOARD 粘贴Ctrl+Shift+V
. (从 PRIMARY 粘贴到mouse-middle-click
静止状态。)
我想使用键盘快捷键从 PRIMARY 粘贴。在 gnome-terminal 中,这是Shift+Insert
,但在 gedit 和 Firefox 中,Shift+Insert
是从 CLIPBOARD 粘贴。我想要一个始终从 CLIPBOARD 粘贴的快捷方式和一个始终从 PRIMARY 粘贴的不同快捷方式。
我正在使用 xmonad 和 Firefox 34.0 运行 Ubuntu 14.04
答案1
您提到的所有应用程序都是gtk+
应用程序,因此很容易回答为什么...因为在全部 gtk+
应用 (除了一个), Shift+Insert从剪贴板粘贴 - 即它相当于Ctrl+ V。该快捷方式被硬编码在gtkentry.c
(第 2022 行)和gtktextview.c
(第 1819 行):
gtk_binding_entry_add_signal (binding_set, GDK_KEY_Insert, GDK_SHIFT_MASK,
"paste-clipboard", 0);
它也记录在GTK+ 3 参考手册在下面GtkEntry
:
The “paste-clipboard” signal
void
user_function (GtkEntry *entry,
gpointer user_data)
The ::paste-clipboard signal is a keybinding signal which gets emitted
to paste the contents of the clipboard into the text view.
The default bindings for this signal are Ctrl-v and Shift-Insert.
据我所知,这样做是为了与其他 DE 保持一致(KDE
请Qt
参阅QTextEdit Class
) 和 Windows 操作系统1 .
这唯一的例外是gnome-terminal
。经过长时间的争论,开发人员决定(为了与其他终端保持一致),在 中gnome-terminal
,Shift+Insert应该从 PRIMARY 粘贴,Ctrl++Shift应该V从 CLIPBOARD 粘贴(尽管您可以选择自定义一些快捷方式)。
至于如何您是否使用键盘快捷键粘贴选择...没有简单的方法。
最简单的方法是为运行的脚本分配快捷方式xdotool click 2
(模拟单击鼠标中键)。虽然这有效(并且它应该适用于所有或大多数 DE 和工具包),但只有当鼠标光标实际上位于文本输入框上方时它才有效,否则它将失败。
另一种相对简单的方法是通过 Gnome Accessibility(如果您的系统可用)。它还需要有数字键盘。转到Universal Access
>>Pointing & Clicking
并启用Mouse Keys
。确保NumLock
已关闭。然后,您可以使用数字键盘移动光标并单击。要模拟鼠标中键单击,请按下(然后释放)*(星号),然后按下5(这是一个简短的指导)。这个解决方案似乎总是在某个gtk+
环境中有效。缺点是它需要Gnome Accessibility
一个数字键盘。此外,您无法自定义快捷方式。
提出了一个有趣的解决方案gnome-bugzilla(错误 643391)。 (2018 年更新:问题现已转移这里.)它需要修补一些源文件并在~/.config/gtk-3.0/gtk.css
(或~/.gtkrc-2.0
2gtk+
个应用程序)中设置配置选项。我个人没有尝试过,但反馈是积极的。
理想情况下,您可以修补源文件并定义一个"paste-selection"
信号,然后将Shift+绑定Insert到"paste-selection"
而不是"paste-clipboard"
.安迪的代码(附在上面链接的错误报告中)可以作为如何做到这一点的指南。即使如此,它也只会影响gtk+
应用程序(我不是一个KDE/Qt
人,所以我不知道如何改变Qt
应用程序的行为)。
1:(更不用说IBM的CUA了)
答案2
抱歉:由于声誉问题,我无法写评论,所以我写为答案。这不是直接的解决方案,但它帮助我......
您可以使用信息组合:
自动启动 autocutsel,并使用默认选项将 CLIPBOARD 同步到 CUTBUFFER(这是可选的)。此链接仅提供有关问题的信息。
使用clipman gui访问多个缓冲区(主和剪贴板),没有自动同步选择(双向自动同步会出错)。
因此,我只需选择 gtk 主题,并将主题 CSS 修改为复制剪贴板 (Ctrl+Insert) 和粘贴剪贴板 (Shift+Insert) 信号所需的键绑定。