Saya banyak bergantung pada *Messages*
buffer, tetapi entri tidak diberi cap waktu.
Bagaimana cara menambahkan cap waktu untuk setiap entri di buffer Pesan Emacs ?
Sehingga kira-kira seperti ini:
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]
akan menjadi sesuatu seperti ini:
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]
Saya mencari di EmacsWiki, Reddit dan emacs.sx tentu saja, tidak berhasil.
Saya tahu command-log-mode
, yang dapat disesuaikan untuk masuk dengan stempel waktu, tetapi hanya berguna untuk perintah interaktif, tidak semua pesan, termasuk yang "sistem" Emacs.
Sebaliknya, setiap pesan yang masuk ke buffer Pesan harus diberi cap waktu.
Bagaimana cara menambahkan cap waktu untuk setiap entri di buffer Pesan Emacs , terlepas dari sumbernya?
message
perintah diimplementasikan dalam C dan kemungkinan memiliki penelepon langsung, sehingga Anda tidak akan dapat memastikan setiap pesan yang ditebang mendapat cap tanpa membangun Emacs sendiri. Yang mengatakan, Anda mungkin dapat menyarankanmessage
perintah untuk memperkenalkan cap waktu ketika itu dipanggil dari Elisp. Dibutuhkan kehati-hatian:message
dapat dipanggil tanpa argumen, string format kosong, dll. Anda juga ingin menghindari loop rekursif jika saran cap waktu Anda sendiri memanggilmessage
beberapa jalur kode.after-change-functions
(di buffer pesan) untuk mengimplementasikannya. Setiap kali sesuatu dimasukkan di akhir buffer, awali stempel waktu untuk itu.Jawaban:
Saya memiliki cuplikan berikut di init.el saya, yang diadaptasi dari aslinya yang saya temukan di utas Reddit berikut: http://www.reddit.com/r/emacs/comments/16tzu9/anyone_know_of_a_reasonable_way_to_timestamp/
(EDIT: dimodernisasi untuk saran-tambah dan hapus penanganan buffer read-only yang kikuk atas saran @blujay)
Ini menghasilkan dekorasi penyangga * Pesan * sebagai berikut:
sumber
advice-add
? Ini metode yang disukai sekarang, karena ia tahu bagaimana menangani situasi yangdefadvice
tidak bisa. Juga, Anda mungkin tidak boleh melakukannya(read-only-mode 0)
, karena itu mungkin permanen. Anda dapat mengikatinhibit-read-only
untukt
seluruh kode yang memodifikasi buffer.Terjemahan dari solusi sederhana @ xinfatang ke
advice-add
sintaks baru sebagai pembungkusmessage
fungsi adalah:Output
*Messages*
seperti:Menambahkan:
Untuk menghapus:
sumber
(advice-add 'message :filter-args 'with-timestamp)
akan bekerja dengan fungsi seperti ini:(defun with-timestamp (args) (push (concat (format-time-string "[%F %T.%3N] ") (car args)) (cdr args)))
Rujuk dari https://www.emacswiki.org/emacs/DebugMessages :
Akhirnya saya masih seperti Stuart Hickinbottom jawaban 's, karena menghindari acara timestamp di minibuffer, berikut ini adalah versi modifikasi yang saya gunakan, itu mengabaikan pesan hanya menunjukkan di daerah echo (oleh
let
message-log-max
untuknil
sebelum fungsi pesan panggilan):sumber
%F %T.%3N
untuk menunjukkan mikrodetik