【问题标题】:How to combine Emacs primary/clipboard copy and paste behavior on MS Windows?如何在 MS Windows 上结合 Emacs 主/剪贴板复制和粘贴行为?
【发布时间】:2012-10-13 17:19:58
【问题描述】:

Emacs 24 改变了复制/粘贴行为的工作方式以符合现代 X 应用程序(请参阅“选择更改”下的 this article)。他们明确地将主要选择和鼠标中键粘贴与剪贴板复制/粘贴分开。

对我来说不幸的是,在 MS Windows 下使用本机(不是 cygwin!)Emacs 24.2.1,这搞乱了我想要的工作方式。

这就是我想要的:

  1. 在 Emacs 中突出显示(选择)文本会自动将其复制到 Windows 剪贴板。如果我将它(Ctrl-V)粘贴到另一个 Windows 应用程序中,它会粘贴。如果我在 Emacs 中键入 C-y (yank),它会粘贴。如果我在 Emacs 中单击鼠标中键,它就会粘贴。
  2. 在 Emacs (C-w) 中杀死会将数据复制到剪贴板。如果我将它(Ctrl-V)粘贴到另一个 Windows 应用程序中,它会粘贴。如果我在 Emacs 中键入 C-y (yank),它会粘贴。如果我在 Emacs 中单击鼠标中键,它会粘贴剪贴板内容,而不是最后选择的文本
  3. 我从另一个 Windows 应用程序(例如,通过 Ctrl-C)复制到剪贴板的任何内容,都可以通过键入 Cy (yank) 或中键单击(现在,单击中键)粘贴到 Emacs粘贴最后选择的文本,而不是剪贴板内容)。

总而言之,我认为这意味着消除 Emacs 中主要选择和剪贴板之间的区别。我希望所有内容都在剪贴板上起作用!

【问题讨论】:

  • FWIW 我得到了这个确切的行为——至少#1——在 cygwin 上使用 24.2.1
  • 我正在使用gnu.org/software/emacs/windows/faq.html 中描述的本机 Emacs 24.2.1(不是 cygwin!),可在此处获得:ftp.gnu.org/gnu/emacs/windows。我猜 cygwin 层负责主要选择(在 MS Windows 上不存在)和剪贴板之间的转换。

标签: emacs copy-paste


【解决方案1】:
  • 据我所知,第 2 点和第 3 点已经“开箱即用”了?
  • 另外,我认为您对历史不感兴趣(例如 杀戒)可用吗?
  • 您的意思是突出显示“选择它”(在 emacs 中称为 区域),或者实际上突出显示它(给它一个颜色,比如说, 黄色)?

如果您的意思是选择它,我认为问题在于 Emacs 不知道您的选择何时结束,因此必须将其复制到剪贴板?这就是为什么你会使用 Meta-W (Alt-Shift-w) 将它复制到 kill-ring,在 Emacs 之外可以访问。

(我在此处发布此内容是因为我认为 cmets 令人困惑,但稍后我将删除或更改此答案)

我想你会在mouse.el找到你需要的所有信息:

要到达那里,请尝试:C-hk任何鼠标按钮,然后单击 mouse.el 以找出它的定义位置。如果您在文件中查找更多“global-set-key”,您可能会找到您正在寻找的内容(我仍然不能 100% 确定)

【讨论】:

  • 是的,第 2 点似乎开箱即用(我以为我遇到了麻烦)。第 3 点不适用于中间点击。不,我不关心历史(kill-ring)......我从未使用过这个功能。是的,当我说突出显示时,我的意思是“选择它”。
  • 关于你的观点“当你的选择结束时 Emacs 不会知道”,我应该指出 Emacs 23 一切都很好。它按照我预期的方式完成了一切。只有在 Emacs 24 中,我对“选择复制”等的期望被打破了。
  • 还有,鼠标中键是复制还是粘贴的想法?
  • 哦,我实际上认为它可能绑定到鼠标右键?
  • 也许可以尝试双击鼠标中键或鼠标右键,看看是否有任何功能可以实现您想要的功能?
【解决方案2】:

似乎拖动鼠标对剪贴板没有任何作用。以下添加了这一点,但我不知道指向和标记的作用:

(defadvice mouse-drag-region (after copy-to-clipboard activate)
  (clipboard-kill-ring-save (region-beginning) (region-end))
  (goto-char st) (push-mark nd nil t)
  )

【讨论】:

    【解决方案3】:

    来自 NEWS 的以下条目似乎相关:

    • mouse-drag-copy-region 现在默认为零。

    • mouse-2 现在绑定到mouse-yank-primary

    这会从主要选择中粘贴,忽略杀戮环。 以前,mouse-2 绑定到mouse-yank-at-click

    • 要返回之前的行为,请执行以下操作:

      • select-active-regions 更改为 nil。
      • mouse-drag-copy-region 更改为 t。
      • x-select-enable-primary 更改为 t(仅在 X 上)。
      • x-select-enable-clipboard 更改为 nil。
      • mouse-yank-at-click 绑定到mouse-2。

    我认为要在 Windows 上获得以前的行为,您需要将 x-select-enable-primaryx-select-enable-clipboard 都保留为当前值,并且可能 select-active-regions 与您在这里抱怨的行为变化无关。


    以下是要放入 .emacs 文件的确切行:

    (setq select-active-regions nil)
    (setq mouse-drag-copy-region t)
    (global-set-key [mouse-2] 'mouse-yank-at-click)
    

    【讨论】:

    • 我根据您所说的在我的 .emacs 中添加了以下几行: (setq select-active-regions nil) (setq mouse-drag-copy-region t) (global-set- key [S-mouse-2] 'mouse-yank-at-click) 这部分有效。如果我在 Emacs 中选择文本,它会将其复制到剪贴板,然后我可以粘贴到另一个 Windows 应用程序中(耶!)。但是鼠标中键不起作用——即使在选择某些内容或复制某些内容之后,鼠标中键单击也会在屏幕底部出现错误:“没有可用的选择”。
    • 你绑定Shift + middle mouse button,是故意的,还是误会? (global-set-key [mouse-2] 'mouse-yank-at-click) 似乎对我有用。
    • 太棒了,[mouse-2] 修复了它!我不是 Emacs lisp 程序员,所以我不得不在 Google 上搜索如何将 mouse-2 绑定到操作。我猜我得到了错误的信息。现在一切都按照我想要的方式进行。
    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 2018-04-14
    • 2018-11-24
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多