Base timer-list-mode on tabulated-list-mode (Bug#40854)
* lisp/emacs-lisp/timer-list.el (list-timers) (timer-list-mode): Inherit from 'tabulated-list-mode' instead of 'special-mode' and make the necessary changes to support that. * doc/lispref/os.texi (Timers): Update documentation.
This commit is contained in:
parent
a2792ad54c
commit
ee5c5daad5
2 changed files with 52 additions and 59 deletions
|
@ -32,41 +32,49 @@
|
|||
"List all timers in a buffer."
|
||||
(interactive)
|
||||
(pop-to-buffer-same-window (get-buffer-create "*timer-list*"))
|
||||
(let ((inhibit-read-only t))
|
||||
(erase-buffer)
|
||||
(timer-list-mode)
|
||||
(dolist (timer (append timer-list timer-idle-list))
|
||||
(insert (format "%4s %10s %8s %s"
|
||||
;; Idle.
|
||||
(if (aref timer 7) "*" " ")
|
||||
;; Next time.
|
||||
(let ((time (list (aref timer 1)
|
||||
(aref timer 2)
|
||||
(aref timer 3))))
|
||||
(format "%.2f"
|
||||
(float-time
|
||||
(if (aref timer 7)
|
||||
time
|
||||
(time-subtract time nil)))))
|
||||
;; Repeat.
|
||||
(let ((repeat (aref timer 4)))
|
||||
(cond
|
||||
((numberp repeat)
|
||||
(format "%.1f" repeat))
|
||||
((null repeat)
|
||||
"-")
|
||||
(t
|
||||
(format "%s" repeat))))
|
||||
;; Function.
|
||||
(let ((cl-print-compiled 'static)
|
||||
(cl-print-compiled-button nil)
|
||||
(print-escape-newlines t))
|
||||
(cl-prin1-to-string (aref timer 5)))))
|
||||
(put-text-property (line-beginning-position)
|
||||
(1+ (line-beginning-position))
|
||||
'timer timer)
|
||||
(insert "\n")))
|
||||
(goto-char (point-min)))
|
||||
(timer-list-mode)
|
||||
(tabulated-list-init-header)
|
||||
(setq tabulated-list-entries
|
||||
(mapcar
|
||||
(lambda (timer)
|
||||
(list
|
||||
nil
|
||||
`[ ;; Idle.
|
||||
,(propertize
|
||||
(if (aref timer 7) " *" " ")
|
||||
'help-echo "* marks idle timers"
|
||||
'timer timer)
|
||||
;; Next time.
|
||||
,(propertize
|
||||
(let ((time (list (aref timer 1)
|
||||
(aref timer 2)
|
||||
(aref timer 3))))
|
||||
(format "%10.2f"
|
||||
(float-time
|
||||
(if (aref timer 7)
|
||||
time
|
||||
(time-subtract time nil)))))
|
||||
'help-echo "Time in sec till next invocation")
|
||||
;; Repeat.
|
||||
,(propertize
|
||||
(let ((repeat (aref timer 4)))
|
||||
(cond
|
||||
((numberp repeat)
|
||||
(format "%8.1f" repeat))
|
||||
((null repeat)
|
||||
" -")
|
||||
(t
|
||||
(format "%8s" repeat))))
|
||||
'help-echo "Symbol: repeat; number: repeat interval in sec")
|
||||
;; Function.
|
||||
,(propertize
|
||||
(let ((cl-print-compiled 'static)
|
||||
(cl-print-compiled-button nil)
|
||||
(print-escape-newlines t))
|
||||
(cl-prin1-to-string (aref timer 5)))
|
||||
'help-echo "Function called by timer")]))
|
||||
(append timer-list timer-idle-list)))
|
||||
(tabulated-list-print))
|
||||
;; This command can be destructive if they don't know what they are
|
||||
;; doing. Kids, don't try this at home!
|
||||
;;;###autoload (put 'list-timers 'disabled "Beware: manually canceling timers can ruin your Emacs session.")
|
||||
|
@ -74,35 +82,20 @@
|
|||
(defvar timer-list-mode-map
|
||||
(let ((map (make-sparse-keymap)))
|
||||
(define-key map "c" 'timer-list-cancel)
|
||||
(define-key map "n" 'next-line)
|
||||
(define-key map "p" 'previous-line)
|
||||
(easy-menu-define nil map ""
|
||||
'("Timers"
|
||||
["Cancel" timer-list-cancel t]))
|
||||
map))
|
||||
|
||||
(define-derived-mode timer-list-mode special-mode "Timer-List"
|
||||
(define-derived-mode timer-list-mode tabulated-list-mode "Timer-List"
|
||||
"Mode for listing and controlling timers."
|
||||
(setq bidi-paragraph-direction 'left-to-right)
|
||||
(setq truncate-lines t)
|
||||
(buffer-disable-undo)
|
||||
(setq-local revert-buffer-function #'list-timers)
|
||||
(setq buffer-read-only t)
|
||||
(setq header-line-format
|
||||
(concat (propertize " " 'display '(space :align-to 0))
|
||||
(format "%4s %10s %8s %s"
|
||||
(propertize "Idle"
|
||||
'mouse-face 'highlight
|
||||
'help-echo "* marks idle timers")
|
||||
(propertize "Next"
|
||||
'mouse-face 'highlight
|
||||
'help-echo "Time in sec till next invocation")
|
||||
(propertize "Repeat"
|
||||
'mouse-face 'highlight
|
||||
'help-echo "Symbol: repeat; number: repeat interval in sec")
|
||||
(propertize "Function"
|
||||
'mouse-face 'highlight
|
||||
'help-echo "Function called by timer")))))
|
||||
(setq tabulated-list-format
|
||||
'[("Idle" 4)
|
||||
(" Next" 10)
|
||||
(" Repeat" 8)
|
||||
("Function" 0)]))
|
||||
|
||||
(defun timer-list-cancel ()
|
||||
"Cancel the timer on the line under point."
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue