这是我遇到过的几次场景:
我从其他程序中复制了一些文本。在我粘贴/拖动文本之前,转到Emacs并进行一些编辑。C-y猛拉一下,瞧...不是我想要粘贴的文本。然后我意识到,当我移动东西的时候,我使用了kill-line和ring kill-word这样的命令,这些被删除的行和单词现在占据了kill-ring。但是键入M-y不会带回原始复制的文本,因此我需要返回到原始程序再次复制文本。更糟糕的是,如果原始程序被关闭,那么我将完全丢失复制的文本。
Kill-line等都是这样的基本命令(就像按delete键一样),虽然我不介意使用这些命令使kill-ring变得有点混乱,但我希望我的原始文本会留在kill-ring中的某个地方,这样我就可以通过多次键入M-y来最终找到它。在覆盖剪贴板内容之前,如何让Emacs自动将当前剪贴板内容保留到kill-ring中?
发布于 2009-05-11 20:32:06
每当您在Emacs中执行kill操作时,此代码都会自动将选定内容(从Emacs外部)放到kill-ring上。它已经在Linux上进行了测试,但不应仅限于Linux。
(defadvice kill-new (before kill-new-push-xselection-on-kill-ring activate)
"Before putting new kill onto the kill-ring, add the clipboard/external selection to the kill ring"
(let ((have-paste (and interprogram-paste-function
(funcall interprogram-paste-function))))
(when have-paste (push have-paste kill-ring))))如果您发现自己经常这样做,那么查看一下browse-kill-ring包可能会很有用,它可以让您很好地查看杀手环(而不是重复输入M-y)。
发布于 2009-09-10 07:48:18
请注意,最新的Emacs CVS版本具有变量save-interprogram-paste-before-kill,它执行的正是etc/NEWS文件中的cf::
** When
save-interprogram-paste-before-kill' is non-nil, emacs will not clobber the the interprogram paste when something is killed in it by saving the former in thekill-ring‘在后者之前。
发布于 2009-05-11 16:40:34
我认为问题在于,当您从emacs外的剪贴板上拉出时,您并没有保存到删除环。
您需要的是使用函数clipboard-yank插入区域,然后以某种方式选择它并将其保存到删除环,就像函数kill- ring -save所做的那样。
或者更好的做法是编写一个函数clipboard-save- to - kill - ring - and -yank,它将剪贴板保存到kill ring,然后将其拖出。
编辑:稍微跟踪一下代码,这会做你想做的事情;你可以把它挂在一个键上。它将windows剪贴板的内容保存到删除环中。
(defun clipboard-to-kill-ring()
"save the external clipboard contents to the kill ring"
(interactive)
(let ((clip (funcall interprogram-paste-function)))
(when clip
(kill-new clip)))
(defadvice yank (before maybe-copy-windows-clipboard (arg))
(clipboard-to-kill-ring))
(ad-activate 'yank)https://stackoverflow.com/questions/848936
复制相似问题