为什么 Shift+Insert 在某些应用程序中从 CLIPBOARD 粘贴而在其他应用程序中粘贴 PRIMARY?

rea*_*sgt 35 x11 clipboard

如何使用键盘快捷键从 PRIMARY 选择(例如鼠标选择的文本)粘贴?Shift+Insert不一致地从 PRIMARY 或 CLIPBOARD 粘贴,具体取决于应用程序。

背景:

Ctrl+C将选定的文本复制到 CLIPBOARD,而鼠标选择复制到 PRIMARY。从剪贴板Ctrl+V粘贴,从 PRIMARY 粘贴mouse-middle-click

在终端模拟器(gnome-terminal)中,从剪贴板粘贴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

don*_*sti 36

您提到的所有应用程序都是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);
Run Code Online (Sandbox Code Playgroud)

它也记录在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.
Run Code Online (Sandbox Code Playgroud)

据我所知,这样做是为了与其他 DE(请参阅 中KDEQt键绑定QTextEdit Class)和 Windows OS 1 保持一致
唯一的例外gnome-terminal。长时间的辩论后,开发者已经决定(与其他终端的一致性),在gnome-terminalShift+Insert应该从小学粘贴和Ctrl+ Shift+V应该从剪贴板粘贴(尽管你有选择来定制一些捷径)。


至于如何使用键盘快捷键粘贴选择...没有简单的方法。

最简单的方法是为运行的脚本分配一个快捷方式xdotool click 2(模拟单击鼠标中键)。虽然这有效(并且它应该适用于所有或大多数 DE 和工具包),但它仅在鼠标光标实际位于文本输入框上方时才有效,否则会失败。

另一种相对简单的方法是通过 Gnome Accessibility,如果它在您的系统上可用。它还需要有一个数字键盘。转到Universal Access>>Pointing & Clicking并启用Mouse Keys. 确保NumLock关闭。然后您可以使用小键盘键移动光标并单击。要模拟鼠标中键单击,请按下(并松开)*(星号)然后按下5(这里有一个简短的指南)。这个解决方案似乎总是在一个gtk+环境中工作。缺点是它需要Gnome Accessibility一个数字键盘。此外,您无法自定义快捷方式。

gnome-bugzilla (bug 643391)上提出了一个有趣的解决方案。(2018 年更新:问题现已移至此处。)它需要修补一些源文件并在~/.config/gtk-3.0/gtk.css(或~/.gtkrc-2.0gtk+2 个应用程序)设置配置选项。我没有亲自尝试过,但反馈是积极的。

理想情况下,您应该修补源文件并定义一个"paste-selection"信号,然后将Shift+绑定Insert"paste-selection"而不是"paste-clipboard". Andy 的代码(附在上面链接的错误报告中)可以作为如何做到这一点的指南。即便如此,它也只会影响gtk+应用程序(我不是一个KDE/Qt人,所以我不知道如何改变Qt应用程序的行为)。


1:(更不用说IBM的CUA)

  • 谢谢你的解释。遗憾的是没有更好的解决方案,我非常想念 PRIMARY 的一致键盘快捷键。鼠标模拟解决方法没有多大帮助,因为快捷方式的目的是避免必须处理鼠标。 (3认同)

归档时间:

查看次数:

11115 次

最近记录:

4 年,1 月 前