emacs-diffs
[Top][All Lists]
Advanced

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

scratch/memrep ea5d63d 2/3: Add buttons for the buffers


From: Lars Ingebrigtsen
Subject: scratch/memrep ea5d63d 2/3: Add buttons for the buffers
Date: Thu, 10 Dec 2020 20:37:51 -0500 (EST)

branch: scratch/memrep
commit ea5d63d7a7b83d3644a423e60c78c58d748b8db1
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Add buttons for the buffers
---
 lisp/emacs-lisp/memory-report.el | 61 ++++++++++++++++++++++++++--------------
 1 file changed, 40 insertions(+), 21 deletions(-)

diff --git a/lisp/emacs-lisp/memory-report.el b/lisp/emacs-lisp/memory-report.el
index 8960118..f2ea80f 100644
--- a/lisp/emacs-lisp/memory-report.el
+++ b/lisp/emacs-lisp/memory-report.el
@@ -31,6 +31,7 @@
   (interactive)
   (pop-to-buffer "*Memory-Report*")
   (special-mode)
+  (button-mode 1)
   (setq truncate-lines t)
   (message "Gathering data...")
   (let ((reports (append (memory-report--garbage-collect)
@@ -52,9 +53,7 @@
                       (car summary))))
     (insert "\n")
     (dolist (detail (nreverse details))
-      (insert detail "\n"))
-    ;;(add-face-text-property (point-min) (point) 'variable-pitch)
-    )
+      (insert detail "\n")))
   (goto-char (point-min)))
 
 (defun memory-report-object-size (object)
@@ -224,29 +223,49 @@
                                                       buffers)
                      do (insert (memory-report--format size)
                                 "  "
-                                (buffer-name buffer)
+                                (propertize
+                                 (buffer-name buffer)
+                                 'face 'button
+                                 'button t
+                                'follow-link t
+                                'category t
+                                 'button-data buffer
+                                 'keymap button-map
+                                 'action #'memory-report--buffer-details)
                                 "\n"))
             (buffer-string)))))
 
+(defun memory-report--buffer-details (buffer)
+  (with-current-buffer buffer
+    (apply
+     #'message
+     "Buffer text: %s; local variables: %s; text properties: %s; overlays: %s"
+     (mapcar
+      #'string-trim (mapcar #'memory-report--format
+                            (memory-report--buffer-data buffer))))))
+
 (defun memory-report--buffer (buffer)
+  (seq-reduce #'+ (memory-report--buffer-data buffer) 0))
+
+(defun memory-report--buffer-data (buffer)
   (with-current-buffer buffer
-    (+ (save-restriction
-         (widen)
-         (+ (position-bytes (point-max))
-           (- (position-bytes (point-min)))
-           (gap-size)))
-       (seq-reduce #'+ (mapcar (lambda (elem)
-                                 (if (cdr elem)
-                                     (memory-report--object-size
-                                      (make-hash-table :test #'eq)
-                                      (cdr elem))
-                                   0))
-                               (buffer-local-variables buffer))
-                   0)
-       (memory-report--object-size (make-hash-table :test #'eq)
-                                   (object-intervals buffer))
-       (memory-report--object-size (make-hash-table :test #'eq)
-                                   (overlay-lists)))))
+    (list (save-restriction
+            (widen)
+            (+ (position-bytes (point-max))
+              (- (position-bytes (point-min)))
+              (gap-size)))
+          (seq-reduce #'+ (mapcar (lambda (elem)
+                                    (if (cdr elem)
+                                        (memory-report--object-size
+                                         (make-hash-table :test #'eq)
+                                         (cdr elem))
+                                      0))
+                                  (buffer-local-variables buffer))
+                      0)
+          (memory-report--object-size (make-hash-table :test #'eq)
+                                      (object-intervals buffer))
+          (memory-report--object-size (make-hash-table :test #'eq)
+                                      (overlay-lists)))))
 
 (defun memory-report--image-cache ()
   (list (cons "Total Image Cache Size" (image-cache-size))))



reply via email to

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