Je dépend *Messages*
beaucoup du tampon, mais les entrées ne sont pas horodatées.
Comment peut-on ajouter un horodatage à chaque entrée dans le tampon de messages d' Emacs ?
Donc, quelque chose comme ça:
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]
deviendra quelque chose comme ça:
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]
J'ai cherché sur EmacsWiki, Reddit et emacs.sx bien sûr, en vain.
Je sais command-log-mode
, qui peut être ajusté pour se connecter avec des horodatages, mais il n'est utile que pour les commandes interactives, pas tous les messages, y compris ceux "système" d'Emacs.
Au lieu de cela, chaque message enregistré dans la mémoire tampon des messages doit être horodaté.
Comment peut-on ajouter un horodatage à chaque entrée dans le tampon des messages d' Emacs , quelle que soit sa source?
message
commande est implémentée en C et a probablement des appelants directs, vous ne pourrez donc pas vous assurer que chaque message enregistré obtient un horodatage sans construire Emacs vous-même. Cela dit, vous pourrez peut-être conseiller à lamessage
commande d'introduire un horodatage lorsqu'elle est appelée depuis Elisp. Une certaine prudence est requise:message
peut être appelé sans arguments, une chaîne de format vide, etc. Vous voulez également éviter une boucle récursive si votre conseil d'horodatage lui-même appellemessage
dans un chemin de code.after-change-functions
(dans le tampon des messages) pour implémenter cela. Chaque fois que quelque chose est inséré à la fin du tampon, préfixez-lui un horodatage.Réponses:
J'ai l'extrait de code suivant dans mon init.el, qui a été adapté d'un original que j'ai trouvé dans le fil de discussion Reddit suivant: http://www.reddit.com/r/emacs/comments/16tzu9/anyone_know_of_a_reasonable_way_to_timestamp/
(EDIT: modernisé pour ajouter des conseils et supprimer la gestion des tampons en lecture seule maladroite sur les conseils de @blujay)
Cela entraîne la décoration du tampon * Messages * comme suit:
la source
advice-add
? C'est la méthode préférée maintenant, car elle sait gérer les situations quidefadvice
ne le peuvent pas. De plus, vous ne devriez probablement pas le faire(read-only-mode 0)
, car c'est probablement permanent. Vous pouvez vous lierinhibit-read-only
àt
autour du code qui modifie le tampon.La traduction de la solution simple de @ xinfatang à la nouvelle
advice-add
syntaxe comme enveloppe autour de lamessage
fonction est:Sorties
*Messages*
comme:Ajouter:
Retirer:
la source
(advice-add 'message :filter-args 'with-timestamp)
fonctionnerait avec une fonction comme celle-ci:(defun with-timestamp (args) (push (concat (format-time-string "[%F %T.%3N] ") (car args)) (cdr args)))
Reportez-vous à https://www.emacswiki.org/emacs/DebugMessages :
Enfin, j'aime toujours la réponse de Stuart Hickinbottom , car il évite d'afficher l'horodatage dans le mini-tampon, ce qui suit est une version modifiée que j'utilise, il ignore les messages uniquement affichés dans la zone d'écho (par
let
message-log-max
ànil
avant l'appel de la fonction de message):la source
%F %T.%3N
pour afficher les microsecondes