Eu dependo muito do *Messages*
buffer, mas as entradas não têm registro de data e hora.
Como adicionar um carimbo de data / hora a cada entrada no buffer de mensagens do Emacs ?
Então, algo assim:
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]
vai se tornar algo como isto:
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]
Pesquisei no EmacsWiki, Reddit e emacs.sx, é claro, sem sucesso.
Estou ciente de command-log-mode
que pode ser ajustado para registrar com registros de data e hora, mas é útil apenas para comandos interativos, nem todas as mensagens, incluindo as do "sistema" do Emacs.
Em vez disso, todas as mensagens registradas no buffer de Mensagens devem ter registro de data e hora.
Como se pode adicionar um carimbo de data / hora a cada entrada no buffer de mensagens do Emacs , independentemente da sua origem?
message
comando é implementado em C e provavelmente possui chamadores diretos, portanto você não poderá garantir que todas as mensagens registradas recebam um carimbo de data / hora sem criar o Emacs. Dito isto, você pode aconselhar omessage
comando a introduzir um carimbo de data / hora quando for chamado pelo Elisp. É necessário algum cuidado:message
pode ser chamado sem argumentos, uma string de formato vazia etc. Você também deseja evitar um loop recursivo, caso o próprio conselho de registro de data e hora chamemessage
algum caminho de código.after-change-functions
(no buffer de mensagens) para implementar isso. Sempre que algo for inserido no final do buffer, coloque um carimbo de data e hora nele.Respostas:
Eu tenho o seguinte trecho no meu init.el, que foi adaptado de um original encontrado no seguinte tópico do Reddit: http://www.reddit.com/r/emacs/comments/16tzu9/anyone_know_of_a_reasonable_way_to_timestamp/
(EDIT: modernizado para adicionar conselhos e remover o desajeitado tratamento de buffer somente leitura, sob orientação de @blujay)
Isso resulta na decoração do buffer * Messages * da seguinte maneira:
fonte
advice-add
? É o método preferido agora, pois sabe como lidar com situações quedefadvice
não podem. Além disso, você provavelmente não deve fazer isso(read-only-mode 0)
, porque isso provavelmente é permanente. Você pode vincularinhibit-read-only
aot
redor do código que modifica o buffer.A tradução da solução simples do @ xinfatang para a nova
advice-add
sintaxe como um invólucro em torno damessage
função é:Saídas
*Messages*
como:Adicionar:
Remover:
fonte
(advice-add 'message :filter-args 'with-timestamp)
funcionaria com uma função como esta:(defun with-timestamp (args) (push (concat (format-time-string "[%F %T.%3N] ") (car args)) (cdr args)))
Consulte https://www.emacswiki.org/emacs/DebugMessages :
Finalmente eu ainda gosto Stuart Hickinbottom resposta 's, porque evitar show de timestamp em minibuffer, o seguinte é uma versão modificada que eu uso, é ignorar as mensagens mostram apenas no eco área (por
let
message-log-max
quenil
, antes chamada de função mensagem):fonte
%F %T.%3N
a mostra microssegundos