gpt4 book ai didi

emacs - 永久监视系统剪贴板功能

转载 作者:行者123 更新时间:2023-12-04 16:20:39 25 4
gpt4 key购买 nike

我刚开始学习编程所以我希望这个问题不会太愚蠢。

我想为 Emacs 创建一个功能,它永久监视我的系统(在我的情况下是 Windows 8)的剪贴板,并将每个更改附加到 Emacs 的当前缓冲区。这是我对该功能的想法:

(defun watch-clipboard ()
"Watches Clipboard and appends every change to buffer."
(interactive)
(let ((old-clipboard)
(new-clipboard)) ; two local variables for comparison
(setq old-clipboard (current-kill 0))
(while t ; infinite loop
(setq new-clipboard (current-kill 0))
(if (not (string= old-clipboard new-clipboard)) ; check for change
(progn (insert new-clipboard)
(insert "\n")
(setq old-clipboard new-clipboard))))))

不幸的是这个函数有问题:

结果非常不可靠。有时每次更改都会被拉入缓冲区,但大多数时候只有一半的剪贴板更改或仅识别最后一次更改。

最佳答案

我想你应该调用 interprogram-paste-function直接,而不是通过 current-kill,它在返回 nil 时会做一些奇怪的事情。

此外,我建议 sleep-for避免忙循环:

(defun my-watch-clipboard ()
"Watches Clipboard and appends every change to buffer."
(interactive)
(while t ; infinite loop
(let ((clipboard (funcall interprogram-paste-function)))
(when clipboard
(insert clipboard)
(insert "\n")))
(sleep-for 1))) ; or maybe `sit-for` if you want screen updates

顺便说一句,上面的代码可以简化为awhen (anaphoric macro)。并不是我自己使用它们...

关于emacs - 永久监视系统剪贴板功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com