我非常依赖*Messages*
缓冲区,但是条目没有时间戳记。
如何为Emacs的Messages缓冲区中的每个条目添加时间戳?
这样的事情:
Loading /Users/gsl/lisp.d/init.el (source)...
No outline structure detected
For information about GNU Emacs and the GNU system, type C-h C-a.
Loading /Users/gsl/lisp.d/var/recentf...done
Error running timer: (wrong-number-of-arguments (lambda nil (setq gc-cons-threshold (* 64 1024 1024)) (message "WARNING: gc-cons-threshold restored to %S")) 1)
[yas] Prepared just-in-time loading of snippets successfully.
M-] is undefined
CHILDREN [2 times]
‘show-all’ is an obsolete command (as of 25.1); use ‘outline-show-all’ instead.
Invalid face reference: nil [33 times]
Auto-saving...done
Saving file /Users/gsl/lisp.d/init.el...
Wrote /Users/gsl/lisp.d/init.el
mwheel-scroll: Beginning of buffer [5 times]
Mark set
previous-line: Beginning of buffer [10 times]
Quit [4 times]
会变成这样:
2017-02-14-18:50:01 Loading /Users/gsl/lisp.d/init.el (source)...
2017-02-14-18:50:02 No outline structure detected
2017-02-14-18:50:03 For information about GNU Emacs and the GNU system, type C-h C-a.
2017-02-14-18:50:05 Loading /Users/gsl/lisp.d/var/recentf...done
2017-02-14-18:50:10 Error running timer: (wrong-number-of-arguments (lambda nil (setq gc-cons-threshold (* 64 1024 1024)) (message "WARNING: gc-cons-threshold restored to %S")) 1)
2017-02-14-18:50:12 [yas] Prepared just-in-time loading of snippets successfully.
2017-02-14-18:50:40 M-] is undefined
2017-02-14-18:50:41 CHILDREN [2 times]
2017-02-14-18:50:00 ‘show-all’ is an obsolete command (as of 25.1); use ‘outline-show-all’ instead.
2017-02-14-18:50:01 Invalid face reference: nil [33 times]
2017-02-14-18:51:01 Auto-saving...done
2017-02-14-18:51:03 Saving file /Users/gsl/lisp.d/init.el...
2017-02-14-18:51:06 Wrote /Users/gsl/lisp.d/init.el
2017-02-14-18:51:09 mwheel-scroll: Beginning of buffer [5 times]
2017-02-14-18:51:11 Mark set
2017-02-14-18:51:21 previous-line: Beginning of buffer [10 times]
我当然在EmacsWiki,Reddit和emacs.sx上搜索,但没有成功。
我知道command-log-mode
,可以对其进行调整以记录时间戳,但它仅对交互式命令有用,而不对包括Emacs的“系统”在内的所有消息都有用。
而是,应记录每个记录到消息缓冲区的消息的时间戳。
如何才能时间戳添加到Emacs的每个条目消息缓冲区,不管它的来源?
我倾向于使用
—
菲尔斯
after-change-functions
(在消息缓冲区中)实现这一点。每当在缓冲区的末尾插入一些内容时,都要在其前面加上时间戳。
@phils从gnu.org/software/emacs/manual/html_node/elisp/Change-Hooks.html引用 。将消息输出到Messages缓冲区不会调用这些函数,某些内部缓冲区也不会更改,例如创建的缓冲区的更改由Emacs内部处理某些作业,这对Lisp程序不可见。
—
发堂
message
命令在C中实现,并且可能具有直接调用者,因此如果您不自行构建Emacs,则无法确保每个记录的消息都带有时间戳。也就是说,您可以建议message
命令从Elisp调用时引入时间戳。需要注意一些事项:message
可以在不使用参数,空格式字符串等的情况下调用。如果时间戳建议本身message
在某些代码路径中调用,您还希望避免递归循环。