【问题标题】:Emacs 23 on OS X - use multiple instances or emacsclient?OS X 上的 Emacs 23 - 使用多个实例或 emacsclient?
【发布时间】:2010-11-18 19:45:12
【问题描述】:

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

我知道在我的 .emacs 文件中设置(服务器启动)有一些优势,现在首选方式是调用“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) 如果没有必要,有没有办法让多个 emacs 23 实例(不仅仅是帧)在 OS X 上运行?

谢谢!

【问题讨论】:

    标签: macos emacs emacs23


    【解决方案1】:

    使用

    open -a -n /Applications/Emacs.app
    

    我失败了,弹出“Emacs 意外退出”。 (OS X Yosemite 10.10.3,Emacs 24.3.1 x86_64-apple-darwin)

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

    【讨论】:

      【解决方案2】:

      这是一个简单的 shell 脚本,它将启动一个单独的实例,打开 Emacs 窗口并赋予它焦点:

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

      注意事项:

      • 此脚本使 emacs 的行为类似于我习惯的 Linux 上的 emacs。
      • 可能有比 '(nth 0 (frame-list))' 更好的方法 识别要激活的框架,但上面的脚本是正确的 适合我。
      • 我的 .emacs 文件中没有“(server-start)”。

      【讨论】:

        【解决方案3】:

        我已经创建了这个shell script,它可以让你同时打开多个 emacs 实例。

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

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

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

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

        【讨论】:

          【解决方案4】:

          如果您想要多个 instances(而不是框架)的 emacs,请在终端提示符处使用以下命令:

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

          【讨论】:

          • 这可能会咬你;如果多个实例破坏了彼此的临时文件,我不会感到惊讶。就我而言,我在.emacs.d 中有文件/目录,例如auto-save-listbackupsbookmarksido.lastplacesprojectile.cache
          • 如果您想使用不同的配置目录运行多个实例,请查看此:How to start emacs with a custom user-emacs-directory(在相对较新的 Emacs StackExchange 上,值得一看)。
          【解决方案5】:

          我在我的 .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'
          

          【讨论】:

          • 太棒了!我不知道第一个表达式 - 认为检查服务器是否正在运行会更简单,但这似乎有效。
          • 很可能有更好的方法来判断服务器是否正在运行,但这是我首先想到的 :)
          • server-process 变量可用于此。如果您使用的是--daemon,那么您还需要检查(daemonp),并注意在处理完您的init 文件和任何命令行参数之前,服务器不会启动。查看(command-line) 函数末尾附近的详细信息。
          【解决方案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)。

          【讨论】:

          • 感谢您的回复 - 当我得到 bootstrap_register 失败时,我没有 (server-start),并且在服务器运行时仍然收到警告(无法连接到服务器)并且我开始另一个实例。我认为这是一个 OS X 应用程序:osdir.com/ml/emacs.macintosh.osx/2005-07/msg00036.html,Carbon Emacs 页面预示着打开多个实例时的警告。根据我收集的信息,我的选择是 (1) 忽略警告并继续在第二个/第三个/... 实例中工作,或者 (2) 变得更好地尝试管理多个工作目录。
          • 继续(之前达到 600char 限制) - 感谢您的建议。您的建议确实有效,尽管有警告(我编辑的第一个文件与服务器实例相关联)。
          • 几天前我需要运行 emacsclient 来在家中访问我的工作会话,这样我就可以检查在 shell 中运行的一些命令的输出。我也喜欢将它用于 $EDITOR,这样我就可以有一个很好的环境来编辑 crontab 等。
          • 当我读到“我从不离开 Emacs”时,我真的希望我也可以用它来浏览网页
          猜你喜欢
          • 2010-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多