【问题标题】:How can I write to standard output in Emacs如何在 Emacs 中写入标准输出
【发布时间】:2014-04-22 17:12:54
【问题描述】:

我正在尝试明智地调试 Emacs 程序的性能。特别是,在通过 WLAN、手机等进行远程连接时,我的启动时间非常长(约 5 分钟,而裸 Emacs 的启动时间约 1 分钟)。在这种情况下,写任何message 都无济于事,对于显示根本没有刷新。

我想做的是写入 Linux 进程的“标准输出”。我知道--batch 模式,但这对我没有帮助,因为我想以交互方式使用 Emacs。

那么如何将消息写入 Linux 标准输出(与 Emacs 标准输出相反)?

【问题讨论】:

    标签: emacs messages


    【解决方案1】:

    你可以像这样输出到标准错误:

    (print "hello world" #'external-debugging-output)
    

    (princ "hello world" #'external-debugging-output)
    

    这个可以缓冲,所以要小心。暂时不能输出到标准输出。我想我要补充一下!

    【讨论】:

    • 被夸赞,RMS与你同在!
    • 在我发现这个功能之前,我实际上写了一个补丁来添加这个。它已经存在多年了!
    • 哇,不知道有这个?谢谢分享;我已经删除了我的答案。
    【解决方案2】:

    将 emacs 作为守护进程 (emacs --daemon) 启动,启动序列期间的任何消息都将发送到 stdout 或 stderr,如 lunaryorn 所述。

    使用emacsclient连接到服务器

    杀死服务器最简单的方法是 M-x kill-emacs RET

    详情见C-hig(emacs) Emacs ServerRET

    【讨论】:

      【解决方案3】:

      在 centos 6.8 (GNU Emacs 23.1.1) 中为我工作:

      (append-to-file "here I come to save the day\n" nil "/dev/stdout")
      

      也尝试使用“/dev/tty”代替“/dev/stdout”:

      不清楚您是否打算将“emacs -nw”标准输出重定向到一个文件并在外部监视该文件(然后使用“/dev/stdout”);或者可以写入“/dev/tty”,从而污染主“emacs -nw”显示的自我相同的tty。

      如果启动 emacs 的 GUI 版本,它可能会失去与原始 tty 的连接,可能会滥用环境变量将原始 shell 的 tty 传递给 elisp。

      这适用于我在 Mac OS X 中使用 Aquamacs。从 bash shell 启动:

      $ MY_TTY=$(tty) open /Applications/Aquamacs\ Emacs.app &
      

      然后在emacs中:

      (append-to-file "here I come to save the day\n" nil (getenv "MY_TTY"))
      

      【讨论】:

      • 这可行,但会影响 minibuffer,这有时可能是一个缺点。
      猜你喜欢
      • 2014-07-03
      • 2012-04-25
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2013-06-09
      • 1970-01-01
      相关资源
      最近更新 更多