2

我正在尝试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 $*'
4

1 回答 1

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
}
于 2014-03-07T16:26:28.677 回答