用 NSPasteboard 中的第二个最新项目替换最新项目

Replacing latest item with second-latest item in NSPasteboard

有没有办法从粘贴板中全局删除当前项目(在任何应用程序中按 Command+V 时将显示的项目)并使其按下Command+V 粘贴最后复制的项目?

假设我复制 foo 然后 bar,我在我的应用程序中按下一个按钮,从粘贴板中删除 bar,现在如果我按下 Command+ V 在任何地方(在任何应用程序中)我看到 foo 已粘贴并且 bar 无处可见,它已从用户的机器上完全消失。

不,你不能这样做。系统粘贴板没有任何 "recent pasteboard items" 机制。

事实上,复制的数据甚至不一定在粘贴板上。应用程序可以 "promise" 通过在可用类型列表中放置一个类型来粘贴板数据,但不在其中放置任何数据。对象被注册为该类型的 "owner"。如果某些其他应用程序请求该类型的数据,则要求所有者在那时提供它。这特别适用于粘贴板数据的生成、从源应用程序传输到粘贴板服务器和存储的成本很高的情况。

因此,仅仅因为您在应用程序中复制了 "foo",并不意味着 "foo" 曾出现在粘贴板上。因此,无法回到粘贴板上的 "foo"。

此外,当其他东西清除粘贴板以在其上放置新数据时,所有承诺数据的所有者都会收到通知,以便他们可以清理他们可能已记录的任何状态以履行该承诺。因此,一旦 "bar" 被放到粘贴板上,即使源应用程序也无法提供 "foo"。