在OS X上使用GUI Emacs打开文件时,如何使用emacsclient?

10
我正在尝试设置Emacs(我是通过brew install emacs --cocoa安装的),使其可以按以下方式使用:
  1. emacsclient file.txt如果没有GUI窗口,就会创建一个新的GUI Frame
  2. emacsclient file2.txt如果存在GUI窗口,则会替换其中的内容
  3. emacsclient应该立即返回,不应该阻塞它所在的shell
  4. 在任何给定的时间点上,基本上应该有一个Emacs窗口和一个emacs --daemon进程
正如我所说,我是通过homebrew安装Emacs的。为了在登录时启动守护进程,我添加了 ~/Library/LaunchAgents/org.gnu.emacs.plist文件,并填写了以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>org.gnu.emacs</string>
    <key>ProgramArguments</key>
    <array>
      <string>/usr/local/Cellar/emacs/HEAD/bin/emacs</string>
      <string>--daemon</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

我确认这启动了进程。到目前为止,我尝试了各种调用emacsclient的变体:
  1. /usr/local/Cellar/emacs/HEAD/bin/emacsclient file.txt 这会在我的终端中打开emacs。
  2. /usr/local/Cellar/emacs/HEAD/bin/emacsclient -c file.txt 这会打开一个新的Emacs GUI框架(不错!),但它似乎没有相同的字体大小/字体设置。而且当我关闭那个框架并使用emacsclient -c打开另一个文件时,Emacs进程似乎会崩溃。
  3. /usr/local/Cellar/emacs/HEAD/bin/emacsclient -n file.txt 立即退出
我不确定应该做什么。我找到了很多关于此的教程,但许多教程没有清楚说明目标是否是为终端使用emacs等工作设置守护程序。
我非常想听听您如何在OS X上使用Emacs,特别是如何设置Emacs守护程序以及您是否使用GUI版本。
3个回答

7
正如经常发生的那样,我在写作时找到了解决方案。将以下内容放入我的init.el中,使我能够在现有的GUI框架中打开文件。
(require 'server)
(unless (server-running-p)
  (server-start))

我认为这个可以工作是因为服务器进程绑定到了Emacs的GUI实例,但我仍然非常乐意接受其他人对此进行解释。

0
就2019年而言,这个答案确实对我有帮助。这是我在macOS Mojave上使用emacsclient和emacs守护程序的配置,使用emacs-mac v.26.2
1)首先,我将以下代码放入我的初始化文件中:
(server-start)

正如EmacsWiki和Martin所解释的那样,这行代码是将GUI Emacs链接到它创建的服务器所必需的。

2) 然后,我设置Emacs GUI在我的Mac会话开始时启动(这里没有什么魔法,它像其他应用程序一样设置)。

3) 最后,我使用自动化程序创建了一个快捷方式来运行这个终端命令:

/usr/local/Cellar/emacs-mac/emacs-26.2-z-mac-7.6/bin/emacsclient -c -a ""

并将其绑定到我喜欢的任何键绑定(我将我的设置为shift + super + e),使用我的Mac首选项中的键盘菜单。

完成后,您就可以开始了。当会话开始时,Emacs GUI将启动,并且只需快速的快捷方式,它就会快速打开一个emacsclient框架。

附注:不要关闭Emacs GUI,保持其运行是必不可少的,因为emacsclient需要它来创建新的图形框架。请参阅文档


0

通过收集其他线程的信息,我最终提出了一个非常简单的解决方案。

创建这样一个Shell脚本:

#!/bin/sh
if ps -e | grep '[E]macs.app' > /dev/null; then
    emacsclient -n "$@"
else
    open -a "Emacs" --args --chdir $PWD "$@"
fi
# The --chdir argument is necessary to pass relative paths to Emacs.

将其命名为emacs并将其放置在您的PATH包含的位置。

然后,您只需键入

$ emacs fileyouwanttoopen

如果GUI Emacs没有运行,脚本会启动它。如果它正在运行,脚本会要求它处理该文件。

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