当emacs以守护进程模式启动时,如何通过X11或终端连接时自动加载正确的init设置?

时间:2014-03-30 01:52:38

标签: emacs elisp dot-emacs emacsclient

我最近在启动时开始以守护进程模式运行emacs。通过GUI客户端(Emacs.app)连接似乎正确加载自定义。但是,通过终端中的emacsclient连接不会。

在终端尝试M-x customize-variable后出现了第一个症状,产生了以下信息:

  

无法保存自定义项:初始化文件未完全加载

这可能与emacs --daemon忽略所有与X11相关的选项according to this有关。虽然在我的情况下会出现,而不是忽略与X11相关的选项,但emacsclient无法加载后续选项。

在研究了问题和可能的解决方案之后,我一直无法确定一种防弹方法来解决这个问题。我已经看到了建议创建一个不同的init文件和相应的bash别名的建议,每次想要在终端中打开emacs缓冲区时都将其传递给emacsclient --eval。我已经看到其他人在他们的主init文件中使用if-else语句来处理与X11相关的选项。但在走上一条或另一条道路之前,我想知道是否有一种规范的处理方式,我忽略了(或者我只是在某处犯了错误)。

建议,批评,提示将不胜感激。

编辑添加
* GNU Emacs 24.3.1
* emacsclient 24.3
*都在OS X 10.9上安装了自制程序

这是LaunchAgent:

<?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>emacsdaemon</string>
  <key>ProgramArguments</key>
  <array>
    <string>/opt/boxen/homebrew/bin/emacs</string>
    <string>--daemon</string>
  </array>
  <key>RunAtLoad</key>
  <true/>
  <key>ServiceDescription</key>
  <string>Emacs Daemon</string>
  <key>UserName</key>
  <string>my_name</string>
</dict>
</plist>

以下是dotfile配置:

# relevant lines of .zshrc:
alias emacs="/opt/boxen/homebrew/bin/emacsclient -nw"
# set emacsclient as default editor  
export EDITOR="emacsclient"  
# use only emacscilent  
export ALTERNATE_EDITOR=""  

有时我也想从tmux中启动emacs:

# relevant lines of .tmux.conf:
# open emacs inside of tmux in a new window
# hat tip: http://perlstalker.vuser.org/blog/2012/10/16/emacsclient-and-tmux/
bind-key y   new-window -n "emacs" "/opt/boxen/homebrew/bin/emacsclient -nw"

1 个答案:

答案 0 :(得分:1)

emacsclient不会导致读取init文件的任何部分。即在您的用例中,您需要设置您的init文件,使其涵盖所有用例(文本终端和GUI框架),因为您可以同时拥有多种不同的类型反正。

Cannot save customizations: init file was not fully loaded消息表示在加载~/.emacs时发出了错误信号,因此请检查*Messages*的内容,看看错误是什么,并尝试修复错误。