我希望能够从命令行调用Emacs,并在图形Emacs未运行时启动它,或者访问已经运行的Emacs中的文件。我尝试执行此操作emacsclient
,我知道这是“正确”的方法,但是在OS X上我遇到了很多问题,它会随机崩溃,或者emacs --daemon
在关闭或重新启动计算机的过程中挂起,和一般的脆弱感 尽管我想让它正常工作,但目前open -a
实际上效果要好得多,除了这个问题,我将在下面进行描述:
open -a
像这样使用:
$ open -a Emacs file.txt
如果Emacs不在运行,它将启动Emacs并访问该文件。但是如果我不在当前缓冲区时执行此*scratch*
操作,则会在新框架(即新系统窗口)中打开文件。
这是一个示例会话:
$ open -a Emacs file.txt
这将启动Emacs并打开file.txt,因此其中有一个带有此缓冲区的框架。如果我切换到*scratch*
缓冲区,并执行以下操作:
$ open -a Emacs file1.txt
它将在同一框架中打开此文件。现在有一个打开此文件的框架,如果我这样做:
$ open -a Emacs file2.txt
它将打开一个新框架,从而导致同时打开两个框架。
我尝试使用--args
切换到open
,将命令行参数修改为Emacs ,但是对于随后的调用似乎不起作用,例如:
$ open -a Emacs --args --eval='(print "foo")'
$ open -a Emacs --args --eval='(print "bar")'
这只会在消息缓冲区中打印“ foo”……第二次将Emacs带到前台,但没有消息被打印。
我不确定如何open
与已经在运行的应用程序进行通信,有人知道我能找到什么吗?还是有某种方法可以获取比Messages
缓冲区更详细的运行日志?在上面的会话中,没有什么有趣的内容打印到该缓冲区,所以我不知道我该如何破解一些Emacs Lisp来做我想做的事情...
谢谢!
@乔谢谢!这是一个很好的主意,我会在未来牢记这一点。其实,我结束了试图用
—
michiakig 2011年
emacsclient
一遍,用它开始(server-start)
在我init.el
看来是工作不比emacs --daemon
在启动时,这是我一直在努力,我第一次尝试emacsclient
。
find-file
,然后将其设置debug-on-error
为t,并检查堆栈跟踪以了解有关如何调用Emacs的一些线索。添加错误find-file
可能就像将函数定义复制到lisp暂存缓冲区并error
在其中添加调用一样简单(例如(error "cause stack trace")
,永远不要更改源文件find-file
-始终在暂存缓冲区中执行此操作!