emacs-diffs
[Top][All Lists]
Advanced

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

scratch/sqlite 2c046ba: Use tabulated-list-mode for multisession-edit-mo


From: Lars Ingebrigtsen
Subject: scratch/sqlite 2c046ba: Use tabulated-list-mode for multisession-edit-mode
Date: Tue, 14 Dec 2021 03:51:23 -0500 (EST)

branch: scratch/sqlite
commit 2c046baf41280a77df51f5191c86b07466cc1eda
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Use tabulated-list-mode for multisession-edit-mode
---
 lisp/emacs-lisp/multisession.el | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/lisp/emacs-lisp/multisession.el b/lisp/emacs-lisp/multisession.el
index b8f899f..5e5cae4 100644
--- a/lisp/emacs-lisp/multisession.el
+++ b/lisp/emacs-lisp/multisession.el
@@ -27,6 +27,7 @@
 (require 'eieio)
 (require 'sqlite)
 (require 'url)
+(require 'tabulated-list)
 
 (defcustom multisession-storage 'files
   "Storage method for multisession variables.
@@ -315,13 +316,20 @@ DOC should be a doc string, and ARGS are keywords as 
applicable to
 ;; Mode for editing.
 
 (defvar-keymap multisession-edit-mode-map
+  :parent tabulated-list-mode-map
   "d" #'multisession-delete-value)
 
 (define-derived-mode multisession-edit-mode special-mode "Multisession"
   "This mode lists all elements in the \"multisession\" database."
   :interactive nil
   (buffer-disable-undo)
-  (setq-local buffer-read-only t))
+  (setq-local buffer-read-only t
+              truncate-lines t)
+  (setq tabulated-list-format
+        `[("Package" 10)
+          ("Key" 30)
+          ("Value" 30)])
+  (setq revert-buffer-function #'multisession-edit-mode--revert))
 
 ;;;###autoload
 (defun list-multisession-values ()
@@ -329,15 +337,22 @@ DOC should be a doc string, and ARGS are keywords as 
applicable to
   (interactive)
   (multisession--ensure-db)
   (pop-to-buffer (get-buffer-create "*Multisession*"))
+  (multisession-edit-mode)
+  (multisession-edit-mode--revert)
+  (goto-char (point-min)))
+
+(defun multisession-edit-mode--revert (&rest _)
   (let ((inhibit-read-only t))
     (erase-buffer)
-    (cl-loop for (package key value)
-             in (multisession--backend-values multisession-storage)
-             do (insert (propertize (format "%s %s %s\n"
-                                            package key value)
-                                    'multisession--id (list package key))))
-    (goto-char (point-min)))
-  (multisession-edit-mode))
+    (tabulated-list-init-header)
+    (setq tabulated-list-entries
+          (mapcar (lambda (elem)
+                    (list
+                     (cons (car elem) (cadr elem))
+                     (vector (car elem) (cadr elem)
+                             (format "%s" (caddr elem)))))
+                  (multisession--backend-values multisession-storage)))
+    (tabulated-list-print t)))
 
 (defun multisession-delete-value (id)
   "Delete the value at point."



reply via email to

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