如何使用emacsclient指定用户的emacs初始化文件加载?

4

问题

如何指定一个用户的emacs init文件以在emacsclient中加载?

emacsclient不理解“-u 用户”选项,“-a ALTERNATE-EDITOR”也不能使用引号来提供“-u 用户”选项。

例如,运行:

/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 和 Emacs 客户端版本 23.1。

Emacs 自身支持“-u 用户名”来加载指定用户的初始化文件。

我在别名文件中使用以下 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文件(~<username>/.emacs):(

这个问题一直困扰着我。

2个回答

4

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

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

1
服务器/客户端模型的重点在于您拥有一个已经存在的Emacs及其自己的配置集,然后通过一个或多个客户端连接。
如果服务器已经配置为显示菜单栏(全局设置),而客户端说不要显示它,那么客户端应该怎么做?如果另一个客户端附加并说要显示它呢?
如果您想为Emacs使用不同的设置,请使用不同的emacs会话。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接