使用 emacsclient 打开文件时在 OS X 上使用 GUI Emacs
Posted
技术标签:
【中文标题】使用 emacsclient 打开文件时在 OS X 上使用 GUI Emacs【英文标题】:Use GUI Emacs on OS X when opening files with emacsclient 【发布时间】:2014-07-30 18:47:30 【问题描述】:我正在尝试设置 Emacs(我通过 brew install emacs --cocoa
安装),以便我可以通过以下方式使用它:
emacsclient file.txt
如果还没有,则创建一个新的 GUI 框架
emacsclient file2.txt
替换现有框架的内容,如果有的话
emacsclient
应该总是立即返回,而不是阻塞调用它的 shell
在任何给定时间点,基本上都应该有一个 Emacs 窗口和一个 emacs --daemon
进程
正如我所说,我通过自制软件安装了 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:
/usr/local/Cellar/emacs/HEAD/bin/emacsclient file.txt
这会在我的终端中打开 emacs
/usr/local/Cellar/emacs/HEAD/bin/emacsclient -c file.txt
这打开了一个新的 Emacs GUI 框架(好!),但不知何故它没有相同的字体大小/字体设置。此外,当我关闭该框架并使用 emacsclient -c
打开另一个文件时,Emacs 进程似乎崩溃了。
/usr/local/Cellar/emacs/HEAD/bin/emacsclient -n file.txt
马上退出
我不确定我应该做什么。我找到了很多关于这方面的教程,但很多人不清楚目标是否是让守护进程只为 emacs 等终端使用而工作。
我很想听听您如何在 OS X 上使用 Emacs,尤其是如何设置 Emacs 守护程序以及如何/是否使用 GUI 变体。
【问题讨论】:
【参考方案1】:因为它经常发生,我在写这篇文章时找到了解决方案。将以下内容放入我的init.el
允许我在现有的 GUI 框架中打开文件。
(require 'server)
(unless (server-running-p)
(server-start))
我认为这是可行的,因为服务器进程绑定到 Emacs 的 GUI 实例,但我仍然非常愿意接受其他人对此的启发。
【讨论】:
【参考方案2】:就 2019 年而言,这个答案确实对我有用。这是我在带有emacs-mac v.26.2的macos Mojave中使用emacsclient和emacs守护进程的配置:
1) 首先,我将这一行放在我的 init 文件中:
(server-start)
正如EmacsWiki 和 Martin 解释的那样,这一行对于将 GUI Emacs 链接到它创建的服务器是必需的。
2) 然后,我将 Emacs GUI 设置为在我的 mac 会话开始时启动(这里没有魔法,它被设置为任何其他应用程序)。
3) 最后,我使用自动机为这个终端命令创建了一个shortcut:
/usr/local/Cellar/emacs-mac/emacs-26.2-z-mac-7.6/bin/emacsclient -c -a ""
并使用我的 mac 偏好设置的键盘菜单将其绑定到我偏好的任何键绑定(我将我的设置为 shift + super + e)。
在此之后,您就可以出发了。 Emacs GUI 将在会话开始时启动,并且只需一个快速快捷方式,它将快速打开一个 emacsclient 框架。
PD:不要关闭 emacs GUI,保持它运行是必不可少的,因为 emacsclient 需要它来创建一个新的图形框架。请参阅documentation。
【讨论】:
【参考方案3】:通过从其他线程收集信息,我终于想出了一个非常简单的解决方案。
像这样创建一个 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 没有运行,脚本会启动它。如果它正在运行,脚本会要求它处理文件。
【讨论】:
以上是关于使用 emacsclient 打开文件时在 OS X 上使用 GUI Emacs的主要内容,如果未能解决你的问题,请参考以下文章
Mac OS X:如何在emacs客户端的shell中永久更改提示符(PS1的值)?
以其他用户身份在其他机器上使用 Emacs server 和 emacsclient
在 Max OS X 上进行 packageDebug 时在 Android Studio 中启动错误的问题
Go 程序错误(Bettercap 2)取决于我在运行 ble 扫描时在 Ubuntu/Raspberry Pi OS 上使用的蓝牙加密狗