我想在 emacs --script 中将子流程的输出回显到我的终端。
我有一个名为“printer.els”的文件,其中包含以下内容:
#!/usr/bin/emacs --script
(apply 'call-process "/usr/bin/printf" nil t nil (list "%s%d\n" "hunter" "23"))
(princ (format-time-string "%Y%m%d\n" (current-time)))
当我使用命令“emacs --script printer.els”运行它时,我在终端上输出了这个输出:
Loading 00debian-vars...
Loading /etc/emacs/site-start.d/50autoconf.el (source)...
Loading /etc/emacs/site-start.d/50cmake-data.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50flim.el (source)...
Loading /etc/emacs/site-start.d/50git-core.el (source)...
Loading /etc/emacs/site-start.d/50psvn.el (source)...
Loading /etc/emacs/site-start.d/50w3m-el.el (source)...
20140904
我希望在“20140904”之前输出“hunter23”。
我在Ubuntu 12.04上运行Emacs 24.3(“emacs24”“24.3 + 1-2~ppa2~precision1”)和Debian Wheezy(“emacs24”“24.3 + 1-4~bpo”)
答案 0 :(得分:1)
您需要做的就是向输出发送消息,通过将输出指向可读的地方。 您已在代码中指定要将输出转到当前缓冲区,但在使用--script模式运行时没有意义,而应选择特定缓冲区,然后发送{{1}一旦完成。
buffer-string
如果您要运行一个漫长的过程,最好使用(with-temp-buffer
(apply 'call-process "/usr/bin/printf" nil (current-buffer) nil (list "%s%d\n" "hunter" "23"))
(message (buffer-string)))
并使用过程过滤器在输出时抓取并打印文本。