Emacs 使用“open -a”打开文件时会在新框架中打开文件

Emacs 使用“open -a”打开文件时会在新框架中打开文件

我希望能够从命令行调用 Emacs,并且启动图形 Emacs(如果它未运行)或访问已运行的 Emacs 中的文件。我尝试这样做,emacsclient我知道这是“正确”的方法,但我在 OS X 上遇到了很多问题,它会随机崩溃,或者emacs --daemon在关机或重启机器时进程会挂起,并且总体上不稳定。虽然我希望它能正常工作,但目前open -a实际上效果要好得多,除了下面我将描述的这个问题:

open -a像这样使用:

$ open -a Emacs file.txt

如果 Emacs 未运行,则将启动它并访问该文件。但如果我在当前缓冲区不在时执行此操作,则*scratch*文件将在新框架(即新系统窗口)中打开。

以下是一个示例会话:

$ open -a Emacs file.txt

这将启动 Emacs 并打开 file.txt,因此其中有一个包含此缓冲区的框架。如果我切换到缓冲区*scratch*,并执行以下操作:

$ open -a Emacs file1.txt

它会在同一框架中打开此文件。现在有一个框架打开了此文件,如果我执行以下操作:

$ open -a Emacs file2.txt 

它打开一个新框架,从而导致同时打开两个框架。

--args我曾尝试使用切换到来摆弄 Emacs 的命令行参数open,但这似乎对后续调用不起作用,例如:

$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'

这只会在消息缓冲区中打印“foo”......第二次 Emacs 只是被带到前台,但没有打印任何消息。

我不确定如何open与已在运行的应用程序进行通信,有人知道我该如何找出答案吗?或者有没有办法比缓冲区更详细地记录正在发生的事情Messages?在上述会话期间,没有任何有趣的内容打印到该缓冲区,所以我不知道如何破解一些 Emacs Lisp 来做我想做的事情……

谢谢!

答案1

答案在这里: emacs 变量在原始框架中“打开”

这是对新版本 emacs 中默认设置的更改。添加:

(setq ns-pop-up-frames nil)

到 .emacs 文件。

很高兴发现这个。

相关内容