我正在努力调试Emacs程序的性能。特别是,我通过WLAN,手机等在远程连接上遇到极长的启动时间(~5'与裸Emacs相比为~1')。在这种情况下,任何message
写入都没有帮助,因为显示器根本没有刷新。
我想做的是写入Linux进程的“标准输出”。我知道--batch
模式,但这对我没用,因为我想以交互方式使用Emacs。
那么如何将消息写入Linux标准输出(而不是Emacs标准输出)?
答案 0 :(得分:26)
您可以输出标准错误,如下所示:
(print "hello world" #'external-debugging-output)
或
(princ "hello world" #'external-debugging-output)
这可以缓冲,所以要小心。此刻无法输出到标准输出。我想补充一点,我想!
答案 1 :(得分:7)
启动emacs作为守护进程(emacs --daemon
),启动序列中的任何消息都将发送到stdout或stderr,如lunaryorn所述。
使用emacsclient
杀死服务器的最简单方法是 M-x kill-emacs
RET
详见 C-h i g (emacs) Emacs Server
RET
答案 2 :(得分:7)
以cmos 6.8(GNU Emacs 23.1.1)为我工作:
if ($attachment == 0)
die(0);
尝试使用“/ dev / tty”代替“/ dev / stdout”:
如果您打算将“emacs -nw”stdout重定向到文件并在外部监视该文件(然后使用“/ dev / stdout”),则不清楚该问题;或者可以写入“/ dev / tty”,从而污染主“emacs -nw”显示的自相同tty。
如果以这种方式启动emacs的GUI版本,它可能会失去对原始tty的附件,可以滥用环境变量将原始shell的tty传递给elisp。
这适用于我在Mac OS X中使用Aquamacs。从bash shell启动:
(append-to-file "here I come to save the day\n" nil "/dev/stdout")
然后在emacs中:
$ MY_TTY=$(tty) open /Applications/Aquamacs\ Emacs.app &