创建或重用现有的Emacs GUI框架

时间:2012-04-01 22:05:22

标签: emacs

假设Emacs服务器正在运行,我希望emacsclient <file>在没有现有帧时创建新帧(如-c),或者在有帧时重用现有帧。换句话说,只有在没有现有框架时才需要-c。这可能吗?

4 个答案:

答案 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 &