在MacOS上自动运行Emacs服务器
随着我攒的Emacs配置越来越多,Emacs在我的Mac笔记本上启动也越来越慢了。我希望Emacs能像nano那样,在我需要查看或编辑文件的时候瞬间启动,但又不想失去攒了很久的配置和主题,怎么办呢?
有一个办法是将Emacs启动成服务器模式,在需要编辑器的时候只需要启动一个Emacs客户端即可。这个办法既能达到快速启动编辑器的目的,又能提供一个带全部配置和主题的Emacs。在Linux上这是个常见的用法,但在Mac笔记本上如何实现?
创建plist文件
首先在LaunchAgents目录下给Emacs服务器创建一个plist文件:
~/Library/LaunchAgents/emacs.daemon.plist
假设Emacs二进制文件在/Applications/Emacs.app/Contents/MacOS/Emacs,内容示例如下:
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>emacs.daemon</string>
<key>ProgramArguments</key>
<array>
<string>/Applications/Emacs.app/Contents/MacOS/Emacs</string>
<string>--daemon</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>Emacs Daemon</string>
</dict>
</plist>
加入自动启动
将创建好的plist文件加载到自动启动:
launchctl load -w ~/Library/LaunchAgents/emacs.daemon.plist
手动启动或停止Emacs服务器:
launchctl start emacs.daemon
launchctl stop emacs.daemon
如果需要将plist从自动启动中移除:
launchctl unload ~/Library/LaunchAgents/emacs.daemon.plist
如果Emacs服务器启动成功,用ps命令应该能找到相应的进程:
ps aux|grep "[Ee]macs"
Emacs客户端
有了Emacs服务器,接下来就可以随时调用Emacs客户端了:
emacsclient ~/.bash_profile
要注意的坑
如果系统里有多个Emacs版本(例如MacOS可能会自带一个旧版本的Emacs,而你又安装了新版的Emacs),这时候就必须保证你使用的Emacs客户端和服务器版本一致。
例如,假设Emacs服务器是在这里:
/Applications/Emacs.app/Contents/MacOS/Emacs
那么Emacs客户端程序也需要是同一个版本:
/Applications/Emacs.app/Contents/MacOS/bin/emacsclient
如果和服务器版本不一致,Emacs客户端就不能正常启动。
另外一个要注意的是图形界面:Emacs客户端默认情况下是启动成终端模式(文本模式),如果需要图形界面,要加上"--c"参数:
emacsclient --c