为emacsclient定义带参数的备用编辑器

时间:2014-03-07 15:10:11

标签: bash emacs emacsclient

我正在尝试使用emacsclient的替代编辑器运行emacs --eval "(setq server-name '\"server1\")"。我没有运气。

这就是我的尝试:

lispExp="(setq server-name '\"server1\")"
emacsclient -c  --alternate-editor="emacs --eval $lispExp"

那么如何为emacsclient定义带参数的备用编辑器。

背景: 我正在尝试创建一个bash命令(edit),当我使用它来编辑文件时,它将连接到本地emacs服务器,或创建一个新的。为每个虚拟桌面使用不同的服务器。如果我能够完成上述工作,那么我可以用server1替换相应的服务器名称。

我的原始别名(对于一个服务器)在此处定义:

alias edit='emacsclient --alternate-editor="" --no-wait $*'

1 个答案:

答案 0 :(得分:2)

我做了一个工作:

emacsclient -s "${server}" $*
if test  "z$PIPESTATUS" != "z0"
then
    lispExp="(setq server-name '\"${server}\")"
    emacs --daemon --eval "$lispExp"
    emacsclient  -s "${server}" $*
fi

我的问题的完整代码 - 为KDE(可能还有Gnome)中的每个虚拟桌面运行不同的emacs服务器 - 在这里:

unalias edit #this line only needed if you have an alias, you could just remove the alias.
function edit {
    #this method gives a differant emacs server to each X11 virtual desktop
    desktop=$(xprop -id $WINDOWID | sed -rn -e  's/_NET_WM_DESKTOP\(CARDINAL\) = ([^)]+)/\1/pg')
    if test "z${desktop}" != "z"
    then
        server="desktop${desktop}"
    else
        server="server" #use this server if can't find virtual desktop
    fi

    emacsclient -s "${server}" $*
    if test  "z$PIPESTATUS" != "z0"
    then
        lispExp="(setq server-name '\"${server}\")"
        emacs --daemon --eval "$lispExp"
        emacsclient  -s "${server}" $*
    fi
}