如何指定用emacsclient加载的用户的emacs init文件?

时间:2011-04-12 19:18:39

标签: bash emacs dot-emacs emacsclient

问题

如何指定用emacsclient加载的用户的emacs init文件?

emacsclient不理解'-u user'和'-a ALTERNATE-EDITOR'不允许我引用它并提供'-u user'。

例如,运行:

/usr/bin/emacsclient -n -a '/usr/bin/emacs -u <username>' ~<username>/notes.txt

返回

/usr/bin/emacsclient: error executing alternate editor "/usr/bin/emacs -u <username>"

背景

我正在使用emacs版本23.1.1和emacsclient版本23.1。

emacs本身支持'-u user'来加载指定用户的init文件。

我在别名文件中使用以下bash函数来调用emacs

# a wrapper is needed to sandwich multiple command line arguments in bash
# 2>/dev/null hides
#   "emacsclient: can't find socket; have you started the server?"
emacs_wrapper () {
  if [ 0 -eq $# ]
  then
    /usr/bin/emacsclient -n -a /usr/bin/emacs ~<username>/notes.txt 2>/dev/null &
  else
    /usr/bin/emacsclient -n -a /usr/bin/emacs $* 2>/dev/null &
  fi
}
alias x='emacs_wrapper'

键入x后跟文件列表:

  • 如果正在运行,则连接到现有的emacs服务器,否则启动新服务器
  • 执行后台流程
  • 如果没有提供文件,则打开文件列表或我的备注文件

当我以自己的身份登录时,此功能非常有用。但是,许多生产箱要求我以生产用户身份登录。我已经将别名分成了一个bash脚本,因此我只需运行即可获得别名和bash函数。

. ~<username>/alias.sh

不幸的是,这不会让我使用我的.emacs文件(〜&lt; username&gt; /。emacs):(

这个问题一直让我发疯。

2 个答案:

答案 0 :(得分:3)

如果您不能在备用编辑器规范中包含命令行参数,那么只需编写一个shell脚本为您执行此操作,并将其作为备用编辑器参数提供。

#!/bin/sh
emacs -u (username) "$@"

答案 1 :(得分:1)

服务器/客户端模型的要点是您有一个现有的Emacs,它有自己的一组配置,然后您通过一个或多个客户端进行连接。

如果服务器已经配置为显示菜单栏(全局设置),并且客户端说不显示它,客户应该怎么做?如果另一个客户说要显示它会怎么样?

如果您想为Emacs使用不同的设置,请使用不同的emacs会话。