Depende *Messages*
mucho del búfer, pero las entradas no tienen fecha y hora.
¿Cómo se puede agregar una marca de tiempo a cada entrada en el búfer de mensajes de Emacs ?
Entonces algo como esto:
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]
se convertirá en algo como esto:
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]
Busqué en EmacsWiki, Reddit y emacs.sx, por supuesto, en vano.
Soy consciente de command-log-mode
que se puede ajustar para iniciar sesión con marcas de tiempo, pero es útil solo para comandos interactivos, no para todos los mensajes, incluidos los del "sistema" de Emacs.
En cambio, cada mensaje registrado en el búfer de Mensajes debe tener una marca de tiempo.
¿Cómo se puede agregar una marca de tiempo a cada entrada en el búfer de mensajes de Emacs , sin importar su origen?
message
comando se implementa en C y es probable que tenga llamadas directas, por lo que no podrá asegurarse de que cada mensaje registrado reciba una marca de tiempo sin construir Emacs usted mismo. Dicho esto, es posible que pueda aconsejar almessage
comando que introduzca una marca de tiempo cuando se lo llame desde Elisp. Se requiere cierta precaución:message
se puede llamar sin argumentos, una cadena de formato vacía, etc. También debe evitar un bucle recursivo si su propio aviso de marca de tiempo invocamessage
alguna ruta de código.after-change-functions
(en el búfer de mensajes) para implementar eso. Siempre que se inserte algo al final del búfer, coloque un prefijo en él.Respuestas:
Tengo el siguiente fragmento en mi init.el, que fue adaptado de un original que encontré en el siguiente hilo de Reddit: http://www.reddit.com/r/emacs/comments/16tzu9/anyone_know_of_a_reasonable_way_to_timestamp/
(EDITAR: modernizado para agregar consejos y eliminar el torpe manejo de búfer de solo lectura siguiendo los consejos de @blujay)
Esto da como resultado la decoración del búfer * Messages * de la siguiente manera:
fuente
advice-add
? Es el método preferido ahora, ya que sabe cómo manejar situaciones quedefadvice
no pueden. Además, probablemente no debería hacerlo(read-only-mode 0)
, porque probablemente sea permanente. Puede enlazarinhibit-read-only
at
todo el código que modifica el búfer.La traducción de la solución simple de @xinfatang a la nueva
advice-add
sintaxis como envoltorio alrededor de lamessage
función es:Salidas
*Messages*
como:Para agregar:
Para eliminar:
fuente
(advice-add 'message :filter-args 'with-timestamp)
funcionaría con una función 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 :
Por último todavía tengo gusto Stuart Hickinbottom respuesta 's, ya que evitar espectáculo marca de tiempo en el minibúfer, la siguiente es una versión modificada que yo uso, se ignoran los mensajes sólo se muestran en el área de eco (por
let
message-log-max
quenil
antes de la llamada función de mensaje):fuente
%F %T.%3N
para mostrar microsegundos