OS X上的Emacs 23 - 使用多个实例还是emacsclient?

时间:2009-08-12 00:57:42

标签: macos emacs emacs23

我想知道是否有人对OS X上设置emacs 23有任何建议。我已经使用Linux / Windows一段时间了,我只打开了很多emacs实例,它们是自包含的 - 例如,我可以在不同的框架中有两个单独的文件,每个文件都有自己的R,Python和/或shell运行。我认为这是不赞成的(?) - 但它保持每个脚本文件的工作目录分开,我喜欢。

我知道在我的.emacs文件中设置(server-start)有一些优点,而调用'emacsclient'而不是'Emacs'现在是首选的方式(?)。我发现这个线程通过Applescript促进了这一点: Emacs 23, OS X, multi-tty and emacsclient

但我想知道这是否是唯一可行的方法 - 当我在OS X上打开两个emacs实例时,它会给我错误:

** CFMessagePort: bootstrap_register(): failed 1100 (0x44c) 'Permission denied', port = 0x3803, name = 'org.gnu.Emacs.ServiceProvider'

但打开一个新框架可以让我编辑文件。据我所知,对于OS X上的vim,有一个名为'mvim'的东西允许启动多个vim实例,但是对于emacs有类似的东西吗?很抱歉这个冗长的问题 - 总之,我想这些是我想征求你的专业知识的问题:

(1)'emacsclient'是专家的方式吗? (2)如果不一定,是否有办法在OS X上运行多个emacs 23实例(不仅仅是帧)?

谢谢!

6 个答案:

答案 0 :(得分:7)

如果您想要多个实例(而不是帧)的emacs,请在终端提示符下使用以下内容:

/Applications/Emacs.app/Contents/MacOS/Emacs &

(Generic form for any app) /Path_To_Application.app/Contents/MacOS/Application &

答案 1 :(得分:6)

让我间接回答你的问题。

如您所知,emacsclient提供了一项服务,允许用户在现有 Emacs中从外部Emacs打开文档。这是专家的“方式”吗?取决于专家。我是Emacs的重度用户,但从不使用emacsclient。为什么?因为我从来没有离开 Emacs。我运行的所有shell都在Emacs中(使用自制的screen包),我在Emacs中读过邮件等等。我从来没有理由在命令行输入emacsclient

您的使用模式似乎是您希望运行多个Emacsen,从而更容易跟踪哪些进程和文件一起使用。这是有道理的。如果您愿意,可以在一个 Emacs中完成所有操作,但可能需要对您的使用模型进行一些更改,或者根据您的喜好帮助管理多个解释器/ shell /。

因此,如果你想运行多个Emacs实例,那么请继续这样做。

关于第二个问题,似乎你的.emacs中有(server-start)导致问题 - 可能是因为与两个Emacsen试图使用相同端口发生冲突。查看documentation以启动服务器,或者从.emacs中删除该行,然后使用--daemon命令行选项启动服务器一次。

然后,在命令行中,您可以选择是否要启动新的emacs(通过键入emacs)或连接到您启动的服务器(通过键入emacsclient)。< / p>

答案 2 :(得分:4)

这是一个简单的shell脚本,它将启动一个单独的实例,引发Emacs窗口并为其提供焦点:

#!/bin/bash

/Applications/Emacs.app/Contents/MacOS/Emacs \
    --eval '(select-frame-set-input-focus (nth 0 (frame-list)))' \
    "$@"

注意:

  • 这个脚本使得emacs的行为就像我以前在Linux上的emacs一样。
  • 可能有比'(第n 0(帧列表))更好的方法 识别要激活的帧,但上面的脚本是正确的 对我而言。
  • 我的.emacs文件中没有'(server-start)'。

答案 3 :(得分:1)

我在 .emacs 中使用类似的东西,只在服务器尚未运行时才调用server-start:

(if (file-exists-p
 (concat (getenv "TMPDIR") "emacs"
         (number-to-string
          (user-real-uid)) "/server"))
nil (server-start))

然后对我的 .zshrc 进行了一些更改,以便我可以盲目地从shell中运行ec作为我的编辑器命令:

# I use the Emacs package from emacsformacosx.com
alias emacs='open -a emacs'
alias emacsclient='/Applications/Emacs.app/Contents/MacOS/bin/emacsclient'
alias ec='emacsclient -a /Applications/Emacs.app/Contents/MacOS/Emacs'
export EDITOR='ec'

答案 4 :(得分:1)

我创建了这个shell script,它允许您同时打开多个emacs实例。

要安装,只需将emacs-ide脚本复制到/usr/local/bin/$PATH上的任意目录。

您可以使用多个文件或目录运行多个Emacs实例,如下所示:

emacs-ide ~/Projects/project-1
emacs-ide ~/Projects/project-2

该脚本还设置窗口的名称以匹配正在编辑的目录(项目)或文件。

答案 5 :(得分:0)

使用

open -a -n /Applications/Emacs.app
弹出窗口“Emacs意外退出”,对我失败了。 (OS X Yosemite 10.10.3,Emacs 24.3.1 x86_64-apple-darwin)

作为一种解决方法,我安装了Aquamacs以及Emacs,所以至少我可以运行两个副本。