使用Emacs作为服务器并且只打开一个窗口,应该最大化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Emacs作为服务器并且只打开一个窗口,应该最大化相关的知识,希望对你有一定的参考价值。

我想在守护进程模式下运行我的Emacs,然后使用emacsclient来实际显示内容。但是,如果我运行emacsclient filename,它会显示在终端中,这不是我想要的;我不得不传递-c选项。

但是,该选项总是创建一个新帧,这不是我想要的 - 我宁愿只有一个帧,并且如果它已经存在,则在同一帧中的新缓冲区中打开东西;否则,它应该让我成为一个新的框架。但是,我不知道该怎么做。

另外,我希望最大化一个帧,我通常使用-mm选项实现我的起始Emacs;我如何确保emacsclient制作的框架也最大化?

答案

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

(modify-all-frames-parameters '((fullscreen . maximized))))
另一答案

以下脚本执行以下操作:

  • 必要时启动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)。

另一答案

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

以上是关于使用Emacs作为服务器并且只打开一个窗口,应该最大化的主要内容,如果未能解决你的问题,请参考以下文章

emacs怎么在标签页中打开多个文件

Emacs打开shell窗口

Emacs打开shell窗口

模态对话框不作为最顶层窗口打开

emacs中,怎么样将文件列表中的文件在另一个窗口打开?

不要在 Emacs 完成窗口中显示无趣的文件