我希望能够从命令行调用 Emacs,如果它没有运行,则启动图形 Emacs,或者访问已经运行的 Emacs 中的文件。我尝试这样做emacsclient,我知道这是执行此操作的“正确”方法,但是我在 OS X 上遇到了很多问题,它会随机崩溃,或者emacs --daemon在关闭或重新启动机器时进程会挂起,和一般的片状。虽然我想让它工作,但目前open -a实际上工作得更好,除了我将在下面描述的这个问题:
open -a像这样使用:
$ open -a Emacs file.txt
Run Code Online (Sandbox Code Playgroud)
如果 Emacs 未运行,它将启动 Emacs,并访问该文件。但是,如果在当前缓冲区不是*scratch*文件时执行此操作,则会在新框架(即新系统窗口)中打开文件。
这是一个示例会话:
$ open -a Emacs file.txt
Run Code Online (Sandbox Code Playgroud)
这将启动 Emacs 并打开 file.txt,因此其中有一个包含此缓冲区的帧。如果我切换到*scratch*缓冲区,并执行以下操作:
$ open -a Emacs file1.txt
Run Code Online (Sandbox Code Playgroud)
它在同一帧中打开此文件。现在有一个打开这个文件的框架,如果我这样做:
$ open -a Emacs file2.txt
Run Code Online (Sandbox Code Playgroud)
它打开一个新框架,导致同时打开两个框架。
我试过使用--argsswitch摆弄 Emacs 的命令行参数 to open,但这似乎不适用于后续调用,例如:
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
Run Code Online (Sandbox Code Playgroud)
这只会在消息缓冲区中打印“foo”……第二次 Emacs 刚刚被带到前台,但没有打印任何消息。
我不确定如何open与已经在运行的应用程序通信,有谁知道我如何找到?或者有什么方法可以获得比Messages缓冲区更详细的日志记录?在上面的会话期间没有任何有趣的东西被打印到那个缓冲区,所以我不知道我如何破解一些 Emacs Lisp 来做我想做的事......
谢谢!
Col*_*lin 27
答案在这里: emacs 变量在原始框架中“打开”
这是对较新版本 emacs 中默认设置的更改。添加:
(setq ns-pop-up-frames nil)
Run Code Online (Sandbox Code Playgroud)
到 .emacs 文件。
很高兴找到这个。
| 归档时间: |
|
| 查看次数: |
8252 次 |
| 最近记录: |