假设Emacs服务器正在运行,我希望emacsclient <file>
在没有现有帧时创建新帧(如-c
),或者在有帧时重用现有帧。换句话说,只有在没有现有框架时才需要-c
。这可能吗?
答案 0 :(得分:1)
我用一组shell脚本解决了我的问题。
my_emacs
#!/bin/sh
emacs24-x $@ 1> /dev/null 2> /dev/null &
您可能需要将emacs24-x更改为指向X11 emacs的内容。
my_emacsclient
#!/bin/sh
emacsclient $@ 1> /dev/null 2> /dev/null || my_emacs
通过〜/ bin等将两个文件添加到PATH。
在我的.emacs中,我还添加了以下行
(load "server")
(unless (server-running-p) (server-start))
同时更改一些环境变量并选择添加别名
export ALTERNATE_EDITOR="my_emacs"
export EDITOR="my_emacsclient -n"
export SUDO_EDITOR="my_emacsclient"
...
alias e="$EDITOR"
在shell中运行e
时,它应该创建或重新使用现有的GUI框架。此外,运行e <filename>
会在框架中打开该文件;您还可以将-n
等其他标记传递给e
。
对于其他应用程序(比如文件管理器)中的相同行为,您还应该更改Emacs .desktop文件(对于我/usr/share/applications/emacs24.desktop
来说)以运行my_emacs
。
在基于Debian的(?)发行版中通过替代系统将emacs
更改为my_emacsclient
可能也是一个好主意。
答案 1 :(得分:0)
emacsclient <file>
做你想做的事。
如果您只是想在不指定文件的情况下打开框架,则需要使用-c
。
答案 2 :(得分:0)
如果还没有GUI框架,你可能想尝试`emacsclient --display“$ DISPLAY”“来强制创建一个GUI框架。
答案 3 :(得分:0)
这是我的解决方案:
在您的emacs启动文件中(例如:〜/ .emacs / init.el),请确保您拥有以下行:
;; start emacs server, if it's not already running:
(require 'server)
(unless (server-running-p) (server-start))
然后,将以下内容添加到〜/ .bashrc文件中:
function e()
{
emacsclient "$@" -a "emacs"
}
要建立基线,请确保退出所有emacs实例并在当前运行时终止emacs守护程序。
然后,从命令行'source'到〜/ .bashrc文件:
source ~/.bashrc
最后,使用'e'编辑文件:
e Foobar.java &
e notes.txt &