]> git.eshelyaron.com Git - emacs.git/commitdiff
ibuffer: Add the "Recency" column
authorDaniel Mendler <mail@daniel-mendler.de>
Sat, 28 Dec 2024 12:21:46 +0000 (13:21 +0100)
committerEshel Yaron <me@eshelyaron.com>
Sun, 12 Jan 2025 10:59:01 +0000 (11:59 +0100)
Define a column which shows how many seconds ago the respective
buffer has been displayed.  The time is formatted with the
`seconds-to-string' function, with the new arguments READABLE=t
and ABBREV=t.
* lisp/ibuffer.el (ibuffer-recency-header-map): New keymap.
(define-ibuffer-column recency): New column.
* etc/NEWS: Mention new `recency' column.  (Bug#73047)

(cherry picked from commit 266e1c34d89e5f0a8ece789e77b24187c8c7d448)

etc/NEWS
lisp/ibuffer.el

index 7b6ae8b7b78f146888a984142027c0a3e34ab67c..f8817dd0d46eaa73c1d05ad830d1f7ccd99be7b8 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -243,6 +243,11 @@ modal editing packages.
 \f
 * Changes in Specialized Modes and Packages in Emacs 31.1
 
+** Ibuffer
+*** New 'recency' column.
+The variable 'ibuffer-formats' configures the Ibuffer formats.  Add
+'recency' to a format to display the column.
+
 ** Smerge
 *** New command 'smerge-extend' extends a conflict over surrounding lines.
 
index d6b4e2bb76506b8235ad5efb5bd23ec3801cc9c5..723b18d7dc694da3e107b806c654533e19915827 100644 (file)
@@ -775,6 +775,9 @@ directory, like `default-directory'."
 (defvar-keymap ibuffer-mode-header-map
   "<mouse-1>"      #'ibuffer-do-sort-by-major-mode)
 
+(defvar-keymap ibuffer-recency-header-map
+  "<mouse-1>"      #'ibuffer-do-sort-by-recency)
+
 (defvar-keymap ibuffer-mode-filter-group-map
   "<mouse-1>"      #'ibuffer-mouse-toggle-mark
   "<mouse-2>"      #'ibuffer-mouse-toggle-filter-group
@@ -1723,6 +1726,13 @@ If point is on a group name, this function operates on that group."
        (format "%.0f" total))))
   (format "%s" (buffer-size)))
 
+(define-ibuffer-column recency
+  (:inline t :summarizer ignore :header-mouse-map ibuffer-recency-header-map)
+  (if-let* ((time (buffer-local-value 'buffer-display-time buffer)))
+      (format "%s ago" (seconds-to-string
+                        (float-time (time-since time)) t t))
+    "never"))
+
 (define-ibuffer-column mode
   (:inline t
    :header-mouse-map ibuffer-mode-header-map