7

我想以守护程序模式运行我的 Emacs,然后用于emacsclient实际显示内容。但是,如果我运行emacsclient filename,它会显示在终端中,这不是我想要的;相反,我必须将-c选项传递给它。

但是,该选项总是会创建一个新框架,这不是我想要的——我宁愿只拥有一个框架,如果它已经存在,则在同一框架的新缓冲区中打开它;否则,它应该让我成为一个新框架。但是,我不确定如何执行此操作。

此外,我希望最大化一帧,我通常使用-mm选项来实现我的启动 Emacs;我将如何确保制作的框架emacsclient也最大化?

4

3 回答 3

5

以下脚本执行以下操作:

  • 必要时启动 Emacs 服务器
  • 如果没有打开的框架,则打开一个新的
  • 在当前帧中打开给定的文件
#!/bin/bash

# Selected options for "emacsclient"
#
# -c          Create a new frame instead of trying to use the current
#             Emacs frame.
#
# -e          Evaluate the FILE arguments as ELisp expressions.
#
# -n          Don't wait for the server to return.
#
# -t          Open a new Emacs frame on the current terminal.
#
# Note that the "-t" and "-n" options are contradictory: "-t" says to
# take control of the current text terminal to create a new client frame,
# while "-n" says not to take control of the text terminal.  If you
# supply both options, Emacs visits the specified files(s) in an existing
# frame rather than a new client frame, negating the effect of "-t".

# check whether an Emacs server is already running
pgrep -l "^emacs$" > /dev/null

# otherwise, start Emacs server daemon
if [ $? -ne 0 ]; then
    emacs --daemon
fi

# return a list of all frames on $DISPLAY
emacsclient -e "(frames-on-display-list \"$DISPLAY\")" &>/dev/null

# open frames detected, so open files in current frame
if [ $? -eq 0 ]; then
    emacsclient -n -t "$@"
# no open frames detected, so open new frame
else
    emacsclient -n -c "$@"
fi

编辑:固定扩展位置参数(2017-12-31)。

于 2015-01-18T22:19:19.543 回答
1

为了使每个新帧最大化,您可以将其添加到您的 .emacs 中:

(modify-all-frames-parameters '((fullscreen . maximized))))
于 2014-07-30T06:50:05.160 回答
1

您的 DISPLAY 环境是否设置在您运行 emacsclient 的终端中?因为您请求的行为应该是默认行为(我的意思是重用现有框架的行为)。

于 2014-07-30T13:11:09.120 回答