我希望能够从命令行调用 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 文件。
很高兴发现这个。