4

我正在尝试从终端打开两个文件,在emacsclient中说“hello.txt”和“world.txt” ,我希望它们在两个不同的窗口中打开(就像 emacs 的意思一样)但在同一个框架

我像这样调用emacsclient

emacsclient -nw hello.txt world.txt

目前发生的是单个emacsclient框架显示一个显示 hello.txt 的窗口。另一个文件被打开到一个不可见的缓冲区中。

如果我改为使用emacs而不是emacsclient ,我会得到预期的结果(即两个文件在同一框架内但在两个窗口中打开)。如何使 emacsclient 的行为与 emacs 相同?

我不是在寻求使emacsclient生成多个帧的方法,而是在寻求某种方法使emacsclient在同一帧内的拆分窗口中打开多个文件。

4

3 回答 3

3

您似乎无法直接使用 emacsclient 和文件列表来执行此操作

你可以通过将 lisp 传递给 emacsclient 来做你想做的事情,但有点麻烦,虽然它有点冗长,但你可以达到同样的效果

emacsclient -t -e '(progn (find-file "file1")(find-file-other-window "file2"))' 

您也许可以包装这是一个小 shell 脚本ec2files.sh,它接受两个参数并将它们插入到该 lisp 形式中。

或者编写一个你在 emacs init 中加载的 defun,它接受 2 个文件参数并打开它们。

(defun example-split-window-2-files (f1 f2) 
  (find-file f1)
  (find-file-other-window f2))

然后从 emacsclient -e 调用它

emacsclient -t -e '(example-split-window-2-files "file1" "file2")'
于 2014-10-27T17:44:02.683 回答
3

变量server-window是您要查看的内容。您可以将此变量设置为选择要打开哪个窗口的函数。

我的 emacs 配置中有以下内容:

(setq server-window 'pop-to-buffer)

这确保当您打开一个(单个)文件时,它使用另一个窗口(如果需要,创建它)来显示该文件。您将需要找到或编写一个函数以传递给服务器窗口,该窗口将继续创建新窗口供您在其中显示文件。

于 2015-02-18T20:07:39.363 回答
0

emacs 24.3.1 手册的第 37.1 节“调用‘emacsclient’”说:

您还可以强制emacsclient' to open a new frame on a graphical display, or on a text terminal, using the使用 -c' 和 `-t' 选项。

于 2014-08-02T08:02:31.667 回答