代码之家  ›  专栏  ›  技术社区  ›  polyglot

如何在Windows的Emacs中保留剪贴板内容?

  •  16
  • polyglot  · 技术社区  · 15 年前

    这是我遇到过的几个场景:

    我从其他程序复制一些文本。在粘贴/拉入文本之前,请转到Emacs并进行一些编辑。C-Y到扬克,瞧……不是我要粘贴的文本。然后我意识到,当我在移动东西时,我使用了诸如“杀死线”和“反向杀死词”之类的命令,而那些被杀死的线和词现在占据了“杀死环”。但是输入m-y不会使复制的原始文本返回,因此我需要返回到原始程序以再次复制文本。即使最糟糕的是,如果原始程序关闭了,那么复制的文本也会完全丢失。

    kill line等是这样的基本命令(比如几乎按一下delete键),虽然我不介意使用这些命令会使kill ring变得有点混乱,但我希望原始文本保留在kill ring中的某个位置,这样我最终可以通过键入m-y来找到它。如何使Emacs在覆盖剪贴板内容之前自动将当前剪贴板内容保留到终止环中?

    5 回复  |  直到 15 年前
        1
  •  12
  •   Trey Jackson    15 年前

    当您在Emacs中进行杀戮时,此代码应自动将所选内容(从外部Emacs)放入杀戮环。它已经在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 )

        2
  •  3
  •   Chmouel Boudjnah    15 年前

    注意,最新的emacs cvs版本在kill之前具有save interprogram paste变量,该变量在 etc/NEWS 文件:

    **何时 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 the 先杀戒指,后杀戒指。

        3
  •  2
  •   justinhj    15 年前

    我认为问题在于,当你从Emacs外面的剪贴板上猛拉时,你不会保存到杀死戒指上。

    您需要的是使用函数clipboard yank来插入区域,然后以某种方式选择它并将其保存到kill ring,就像函数kill ring save一样。

    或者更好的方法是写一个功能剪贴板,保存到杀死戒指,然后扬克,这将把剪报保存到杀死戒指,然后扬克它。

    编辑:稍微跟踪一下代码,这就是你想要的;你可以把它挂到一个键上。它将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)
    
        4
  •  0
  •   shapr    15 年前

    我猜你可以破解各种各样的杀戮命令,不把文本放进剪贴板,然后让剪贴板猛拉到另一个键上,不知道这是否可行。

        5
  •  0
  •   Cheeso    15 年前

    当我复制或剪切另一个Windows应用程序后弹出Emacs时,我只是猛拉文本然后重新删除它,以此来解决这个问题。

    一个更好的方法是黑客Emacs,这样当你杀死某个东西时,它会将现有的剪贴板与杀死环中的最上面的条目进行比较,如果不同,它会将剪贴板内容推送到杀死环中,然后再执行你明确要求的杀死操作。