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


29

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

背景:

Ctrl+C将所选文本复制到CLIPBOARD,而将鼠标选择复制到PRIMARY。从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

Answers:


30

您提到的所有应用程序都是gtk+应用程序,因此很容易回答“ 为什么 ...”,因为在所有 gtk+应用程序中(一个除外),都从CLIPBOARD中粘贴Shift+ Insert,即等价于Ctrl+ V。快捷方式在gtkentry.c(第2022行)和gtktextview.c(第1506 行)中进行了硬编码:

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(请参阅参考资料中KDEQt键绑定QTextEdit Class)和Windows OS 1保持一致
唯一的例外gnome-terminal。经过长时间的讨论,开发人员决定(为了与其他终端保持一致),在中gnome-terminalShift+ 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针对gtk+2个应用程序)。我没有亲自尝试过,但反馈是肯定的。

理想情况下,您将修补源文件并定义"paste-selection"信号,然后将Shift+ 绑定Insert"paste-selection"而不是"paste-clipboard"。Andy的代码(附在上面的错误报告中)可以作为操作方法的指南。即使那样,它也只会影响gtk+应用程序(我不是一个KDE/Qt家伙,所以我不知道如何更改Qt应用程序的行为)。


1 :(更不用说IBM的CUA)


2
感谢您的解释。遗憾的是没有更好的解决方案,我错过了很多PRIMARY的一致键盘快捷键。鼠标仿真的解决方法没有多大帮助,因为快捷方式的重点是避免不得不使用鼠标。
didi_X8

1

抱歉:由于声誉我无法写评论,所以我写为答案。这不是直接的解决方案,但可以帮助我...

您可以使用以下信息组合:

  1. 编辑gtk主题,并根据需要允许键绑定

  2. 在theme的CSS中创建gtk 3.0键盘绑定的示例

  3. 覆盖gtk键绑定和unbind的示例

  4. gnome终端的修改键绑定示例

  5. 使用默认选项自动启动自动剪切机,以将CLIPBOARD同步到CUTBUFFER(这是可选的)。该链接仅用于有关问题的信息。

  6. 使用clipman来gui访问多个缓冲区(PRIMARY和CLIPBOARD),而无需选择自动同步(双向自动同步会出错)。

因此,我只选择gtk主题,然后将主题CSS修改为复制剪贴板(Ctrl + Insert)和粘贴剪贴板(Shift + Insert)信号所需的键绑定。


1
如果您获取这些链接的内容并合并信息,则这可能是一个不错的答案的开始。就目前而言,它只是链接的集合,这使其有被删除的风险。请填写信息,以便直接在答案中,我相信您会获得投票(从而为您提供足够的声誉以发表评论)。谢谢!
Toby Speight
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.