elisp:以批处理模式静音"正在加载"消息

Jac*_*lly 5 emacs elisp

即使我调用emacs -batch(即批处理模式而没有实际执行任何操作),emacs也会呕吐出一大堆消息:

$ emacs -batch
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/50devhelp.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/50psvn.el (source)...
Run Code Online (Sandbox Code Playgroud)

有没有办法让这些消息沉默?谷歌对此并没有太大的帮助.

Cra*_*tro 10

那些通常会显示在*Messages*缓冲区中的消息,而不是stderr.这里有几种方法可以使它变得沉默,按照复杂程度的增加顺序:

  • 最简单的解决方法是重定向stderr,如果你不打算使用它:

    emacs -batch 2>/dev/null
    
    Run Code Online (Sandbox Code Playgroud)
  • 这些消息来自站点范围初始化中加载的内容.如果您不需要初始化文件中的任何其他功能,可以尝试:

    emacs -batch --no-site-file ... # ignore system-wide
    emacs -batch -Q ... # ignore everything
    
    Run Code Online (Sandbox Code Playgroud)
  • 从理论上讲,人们可以通过这种方式来实现这一目标(setq force-load-messages nil),但是网站文件是这里打印的事实意味着您可能无法尽早完成.

  • 建议load功能,以便始终调用它NOMESSAGE.这是一个草图:

    (defadvice load (before quiet-loading
                       (&optional NOMESSAGE)
                       activate)
       (setq NOMESSAGE t))
    (load site-run-file t)
    
    Run Code Online (Sandbox Code Playgroud)

    这应该只是强制负载总是传递tNOMESSAGE参数,然后加载site-run-file,忽略错误,如果没有这样的文件存在.(请注意,至少在我使用emacs的所有2台机器上,没有site-run-file;我不知道它是多么常见.)