据我了解,我在 Linux Mint 中使用的两个剪贴板是 X11 和 GTK 剪贴板。
每次我突出显示某些内容时,都会自动复制到 X11 剪贴板。从 X11 剪贴板粘贴只需单击鼠标中键即可。
Ctrl使用+C或Ctrl+复制到 GTK 剪贴板。使用+X粘贴从 GTK 剪贴板。CtrlV
Notepad++ 只能与 GTK 剪贴板一起使用。
我不想合并这些剪贴板,因为这可能会导致问题,例如当我想突出显示并用剪贴板替换时。
有没有办法让 Notepad++ 独立使用这两个剪贴板?
答案1
据我了解,我在 Linux Mint 中使用的两个剪贴板是 X11 和 GTK 剪贴板。
不,不完全是。
中键粘贴使用的缓冲区称为选择– 不是剪贴板。只有一个“剪贴板”,您可以通过 Ctrl+C/Ctrl+V 访问它。
然而,两个都是 X11 的通用功能 - 两者在底层都使用相同的“选择”机制。当您选择某些文本时,它会进入PRIMARY
X11 选择,按 Ctrl+C 会将其放入CLIPBOARD
选择中。也就是说,“PRIMARY”称为“选择”,而“CLIPBOARD”称为“剪贴板”。它们两者并不比另一个更特定于 GTK。
(事实上,当支持后者加入1997 年添加到 GTK,那时它已经被称为“X 剪贴板”,并且在此之前已经存在了好几年 – 例如它可以早在 1993 年就在 Emacs 源代码中找到。)
但与此同时,两个都被 GTK 明确使用 – 它们实际上都不是“在 X11 级别自动执行的”。当您选择文本时,是 GTK – 而不是某些 X11 魔法 – 将其放入“PRIMARY”选择中,当您单击鼠标中键时,GTK 也会将其从“PRIMARY”粘贴,其方式与处理 Ctrl+V 从“CLIPBOARD”粘贴的方式完全相同。(甚至有一个 GTK 设置可以禁用鼠标中键单击粘贴。)这同样适用于 Qt、Motif 或任何其他工具包。
有没有办法让 Notepad++ 独立使用这两个剪贴板?
不。如前所述,必须实现中键单击复制/粘贴的是特定的 UI 工具包,而不是整个 X11。但由于 Notepad++ 仍然是 Windows 应用程序,因此它无法访问 X11 选择 - 它唯一知道的是“这Windows 应用程序使用的“剪贴板”。
它的文本小部件尚未被编程为在单击鼠标中键时粘贴任何内容 - 而且也不可能被编程,因为没有任何 Win32 API 函数可以读取“选择”,只有剪贴板。这意味着 Wine 也无法模拟任何东西;它必须发明全新的功能才能实现这一点。
因此,如果 Notepad++ 可以编写脚本,那么最好让它运行xsel -o
或xclip -o
作为外部程序运行(我思考Wine 程序可以运行原生 Linux 程序?),它将输出“PRIMARY”选择的内容,并让 Notepad++ 将其输出插入到当前文档中。
答案2
“两个剪贴板”实际上都是 X11 的,与 GTK 无关,尽管 GTK GUI 和 API 元素使用它们。
一个称为部分,另一个称为剪贴板。
传统上,可以使用鼠标中键粘贴选择,但有些系统使用鼠标右键来执行此操作。我相信有一个 GTK 选项可以启用此功能。
通常,剪贴板使用 ctrl-c/ctrl-v 或剪切/粘贴菜单选项或其一些变体。