emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master e683701 2/2: Support sorting timer-list-mode by column (Bug#40854


From: Stefan Kangas
Subject: master e683701 2/2: Support sorting timer-list-mode by column (Bug#40854)
Date: Tue, 12 May 2020 13:11:10 -0400 (EDT)

branch: master
commit e6837016b02b89a8f393003f85017ade048d8ab1
Author: Stefan Kangas <address@hidden>
Commit: Stefan Kangas <address@hidden>

    Support sorting timer-list-mode by column (Bug#40854)
    
    * lisp/emacs-lisp/timer-list.el (timer-list-mode)
    (timer-list--idle-predicate, timer-list--next-predicate)
    (timer-list--repeat-predicate)
    (timer-list--function-predicate): Add support for sorting by column.
---
 lisp/emacs-lisp/timer-list.el | 35 +++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/lisp/emacs-lisp/timer-list.el b/lisp/emacs-lisp/timer-list.el
index 17e5eb0..00d0969 100644
--- a/lisp/emacs-lisp/timer-list.el
+++ b/lisp/emacs-lisp/timer-list.el
@@ -92,10 +92,37 @@
   (buffer-disable-undo)
   (setq-local revert-buffer-function #'list-timers)
   (setq tabulated-list-format
-        '[("Idle" 4)
-          ("     Next" 10)
-          ("  Repeat" 8)
-          ("Function" 0)]))
+        '[("Idle" 6 timer-list--idle-predicate)
+          ("      Next" 12 timer-list--next-predicate)
+          ("  Repeat" 11 timer-list--repeat-predicate)
+          ("Function" 10 timer-list--function-predicate)]))
+
+(defun timer-list--idle-predicate (A B)
+  "Predicate to sort Timer-List by the Idle column."
+  (let ((iA (aref (cadr A) 0))
+        (iB (aref (cadr B) 0)))
+    (cond ((string= iA iB)
+           (timer-list--next-predicate A B))
+          ((string= iA "   *") nil)
+          (t t))))
+
+(defun timer-list--next-predicate (A B)
+  "Predicate to sort Timer-List by the Next column."
+  (let ((nA (string-to-number (aref (cadr A) 1)))
+        (nB (string-to-number (aref (cadr B) 1))))
+    (< nA nB)))
+
+(defun timer-list--repeat-predicate (A B)
+  "Predicate to sort Timer-List by the Repeat column."
+  (let ((rA (aref (cadr A) 2))
+        (rB (aref (cadr B) 2)))
+    (string< rA rB)))
+
+(defun timer-list--function-predicate (A B)
+  "Predicate to sort Timer-List by the Next column."
+  (let ((fA (aref (cadr A) 3))
+        (fB (aref (cadr B) 3)))
+    (string< fA fB)))
 
 (defun timer-list-cancel ()
   "Cancel the timer on the line under point."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]