如何仅在未启动的情况下启动emacs服务器?

问题描述:

我想使用emacsclient编辑Mutt中的电子邮件。如何仅在未启动的情况下启动emacs服务器?

我说这的.emacs

(server-start)

而在.muttrc里我加了

set editor="emacsclient -nw %s"

看来他们的工作。 当我启动第二个Emacs时,它抱怨已经有一台服务器在运行,所以它会发出错误。只有在服务器尚未启动的情况下,如何确保(server-start)

由于

Emacs的进程可以自动在一个非常简单的方式来启动。只需添加到您的.bashrc/.zshrc /不管

export ALTERNATE_EDITOR="" 

现在,当你调用emacsclient -t/-c服务器将启动(与emacs --daemon),如果它尚未运行。

我也觉得这个shell别名方便

alias e='emacsclient -t' 

注意,因为Emacs的23,这是在守护进程模式使用Emacs的首选方式。现在大多已弃用(start-server)

+0

这是一个不错的解决方案。 'emacsclient -c'也可以工作,并支持图形客户端。但是,如何在现有的emacs框架中打开文件(例如,在另一个终端中)。目前,我有一个名为'e'的bash脚本,用于检查第一个参数是否为'-o'(对于其他参数),如果存在,则运行'emacsclient'而不带'-c'。有没有更好的方法,使用别名,你可以覆盖'-t'并导致现有的框架打开文件? – edam 2012-10-23 14:18:05

+0

感谢您的好回答:) – nXqd 2014-10-28 18:09:35

+0

@edam不确定您是否找到了答案,但听起来好像您希望-t切换到emacsclient。这有点难以分辨,因为您的评论似乎模糊了终端中的非图形化emacs实例与窗口化图形实例之间的区别。 -t代表前者,-c代表后者。 – Daniel 2015-03-09 17:02:59

经由

emacs --daemon 

在任何壳或终端产品总数避免此问题,以便Emacs的在后台运行。这样emacsclient总是很开心,因为总是有一个Emacs服务器连接到。

这是Emacs,还有一个功能,只在需要时启动服务器,但我现在还不能完全记得它的名字。我自己很高兴地愉快地使用​​选项。

代码启动只有当它没有运行服务器:

(load "server") 
(unless (server-running-p) (server-start)) 
+2

这是自从'emacs --daemon'说'_这个平台不支持-daemon标志的Windows目前唯一可用的选项._ – legends2k 2015-01-06 09:59:18

+0

@ legends2k,在Windows上,您还可以执行'emacs --funcall server-start ',但我同意这样更好,并且可以跨平台工作。 – harpo 2016-09-01 16:13:12

有点迟到的答案,但这里是适合我的解决方案。每当我启动emacsclient时,我都会使用emacsclient -a '' -c-a ''告诉emacsclient尝试连接到现有服务器,如果没有服务器存在,请启动它并连接到它。

+0

'-a'''选项很棒。请注意'-c'总是创建一个新的框架。如果通常要在现有的emacs框架中编辑文件,那么我省略此选项 – 2017-10-22 21:52:18