我正在为Atom编辑器创建一个包 . 每当用户剪切,复制或粘贴文本时,我都想调用一个函数 . 理想情况下, atom.clipboard 会有三个我可以订阅的事件,但事实并非如此 .

我尝试使用copy事件,如:

atom.views.getView(atom.workspace).addEventListener("copy", console.log);

......但这不起作用 . 该事件从未被解雇 .

我最接近的是重写 atom.clipboard.write 方法:

const clipboard = atom.clipboard;
const write = clipboard.write;
clipboard.write = (text, metadata = {}) => {
  console.log(text);
  write.call(clipboard, text, metadata);
};

此代码基于atom-clipboard-plus包中的一些代码 . 它基本上改变了 clipboard.write ,以便每当用户复制任何内容时它都会运行我的一些代码 . 这有效,但有几个问题:

  • 我可以看到用户写入剪贴板的内容,但我无法看到这是剪辑还是副本 . 我希望能够做出这种区分 .

  • 其他包可能会调用 clipboard.write ,但我只关心用户剪切,复制和粘贴 .

我可以尝试通过订阅文档中的更改来找出剪切与复制问题,但这似乎更复杂且容易出错,而我宁愿不这样做 . 有更好的解决方案吗?