如何在Emacs之外粘贴所选区域?

14
我正在使用Mac OS和emacs -nw(终端模式)。 我不知道如何将东西粘贴到emacs之外(在emacs -nw中由M-w实现)。
我知道emacs -ns可以做到这一点。
通过搜索互联网和命令C-h b,我找到了方法,但它没有奏效。
(setq x-select-enable-clipboard t)

(setq interprogram-cut-function 'x-select-text)

我对程序间剪切功能的参数不太了解。 x-select-text是从哪里来的,它的含义是什么?

3个回答

30
如果您正在使用Ubuntu 12.04或Fedora 21,有几个选项可使其工作。首先,您需要安装xclip。
sudo apt-get install xclip

第一选项:针对 Emacs 24

如果您正在使用 Emacs 24,您可以从软件包列表中安装。

M-x package-list-packages

选择

xclip //mine was version 1.3

在你的 .emacs 文件中添加:

(xclip-mode 1)

第二种选择。适用于 Emacs 版本 24 之前的版本。

安装 xclip.el: 在 Linux 中将 Emacs 与 X11 剪贴板集成

第三种选择。使用 @Nicholas Riley 在答案中展示的代码

要使用答案中的代码,你需要 在 Ubuntu 中安装 pbcopy / pbpaste(命令行剪贴板)


3
所有这些都在这种情况下非常有用,但是提问者提到他正在使用OS X。 - Aaron Miller
5
这个问题与OS X有些无关紧要。问题更普遍地涉及如何让终端emacs的kill ring与剪贴板协同工作,我相当确定其他GNU / Linux用户(除了我自己)也会在这种情况下找到它。因此,在我看来,这是一个有用的答案。(对我来说肯定很有用--谢谢elviejo!) - edam
@edam,这就是重点。把信息留在这里,这样其他通过谷歌搜索答案的人也能受益。 很高兴对你有帮助。 - elviejo79
6
为了使其正常工作,我还需要在我的 .emacs 文件中添加以下两行代码:(add-to-list 'load-path "~/.emacs.d/elpa/xclip-1.3/") 和 (require 'xclip)。 - tflutre
1
谢谢!在emacs -nw中能够ggyG是一种福音。 - Sviatoslav Zalishchuk
显示剩余3条评论

10

x-select-text 只在GUI中运行Emacs时使用。(Emacs将Mac / Windows粘贴板 / 剪贴板API映射到X11模型,因此得名)。您始终可以使用C-h f查找此类函数的更多信息,并查看其定义(如果它是用elisp编写的)。

在Mac上,不存在“CLIPBOARD”与“PRIMARY”选择的概念,因此设置x-select-enable-clipboard没有意义。

运行emacs -nw的整个目的是它不会与窗口系统交互。既然Mac上有许多可用的图形化Emacs,为什么要在终端中使用Emacs?

话虽如此,如果您真的想连接终端Emacs到Mac粘贴板,您可以做类似于以下的事情:

(setq interprogram-cut-function
      (lambda (text &optional push)
    (let* ((process-connection-type nil)
           (pbproxy (start-process "pbcopy" "pbcopy" "/usr/bin/pbcopy")))
      (process-send-string pbproxy text)
      (process-send-eof pbproxy))))

1
如果你想要一种方式将emacs区域的内容仅在某些时候放置到剪贴板上,而不是每次执行emacs yank(这会导致剪贴板内容一直被覆盖),你应该查看与此相关问题的答案。

https://dev59.com/JnVD5IYBdhLWcg3wKoWH#19625063

我发现它比设置xclip模式更好地解决了我的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接