如果我要挂接一个函数或程序,该函数或程序应在系统剪贴板内容更改时执行,那么我必须继续检查哪个文件或触发哪个事件以及如何通过编程语言捕获该事件?或者一个可以将剪贴板内容输出到终端的命令,以便我可以在短暂的间隔后继续运行命令并查看内容是否已更改。
谢谢
答案1
有多个框架支持剪贴板和此类行为。
例如GTK提供 Gdk 事件GtkClipboard 所有者变更当剪贴板中的内容发生变化时,该事件总是会被触发。应用程序可以用支持 GTK 的编程语言编写,例如 C,Python或者瓦拉。
在 Vala 中,以下代码片段可用于在剪贴板内容发生变化时打印到标准输出
namespace ClipboardChanged
{
public static int main (string[] args)
{
Gtk.init (ref args);
Gtk.Clipboard clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD);
clipboard.owner_change.connect(() => {
stdout.printf("Clipboard has changed\n");
});
Gtk.main();
return 0;
}
}
此代码片段可以保存在文本文件中,例如 clipboard-changed.vala,并使用以下命令使用 valac 进行编译
valac --pkg=gtk+-3.0 clipboard-changed.vala
当然,要使此功能正常工作,需要安装 valac
sudo apt-get install valac
但是,它只有一个缺点,那就是它只适用于主剪贴板,而不适用于主要选择(用鼠标选择内容)。
答案2
xclip
是你的朋友。查看手册页了解更多信息,但如果你想要设置剪贴板(而不是选定的文本),你可以使用xclip -sel clip
,然后通过管道传输到其标准输入以设置剪贴板。
有一个-i filename
参数读从文件中。-sel
选择要使用的剪贴板缓冲区。有p
(如果您选择了某个内容,则为主要内容。这是鼠标中键粘贴的内容),clip
它是所有现代桌面环境中与 CTRL-C 和 CTRL-V 一起使用的(QT2 和 Emacs 20 出于某种原因使用主要剪贴板)。
获取剪贴板的内容xclip -sel clip -o
(打印到标准输出)。如果要将其放入文件中,可以使用可选参数 -o 来指定要将其发送到的文件。
我相信手册页中有一些信息等待剪贴板发生变化时。我就是无法破译它。
信息在这里:http://standards.freedesktop.org/clipboards-spec/clipboards-latest.txt