summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2022-04-14 16:25:31 +0200
committerLars Ingebrigtsen <larsi@gnus.org>2022-04-14 16:25:41 +0200
commite7f7930a61e6603a3d489b5d09db24ac48870f49 (patch)
treeb6b21a01623086d66a51a93bce98a3f657f1cfdd /lisp/emacs-lisp
parent831314b08b8d48d181691c913c094ad98e735181 (diff)
downloademacs-e7f7930a61e6603a3d489b5d09db24ac48870f49.tar.gz
emacs-e7f7930a61e6603a3d489b5d09db24ac48870f49.tar.bz2
emacs-e7f7930a61e6603a3d489b5d09db24ac48870f49.zip
Ensure that commands like { work on all frames in vtable
* lisp/emacs-lisp/vtable.el (vtable--recompute-cache) (vtable--ensure-cache): New functions. (vtable-insert): Use it. (vtable--widths): Ditto.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/vtable.el29
1 files changed, 16 insertions, 13 deletions
diff --git a/lisp/emacs-lisp/vtable.el b/lisp/emacs-lisp/vtable.el
index f14c9ae9a65..66feec4e69a 100644
--- a/lisp/emacs-lisp/vtable.el
+++ b/lisp/emacs-lisp/vtable.el
@@ -383,6 +383,16 @@ This also updates the displayed table."
(defun vtable--spacer (table)
(vtable--compute-width table (vtable-separator-width table)))
+(defun vtable--recompute-cache (table)
+ (let* ((data (vtable--compute-cache table))
+ (widths (vtable--compute-widths table data)))
+ (setf (gethash (vtable--cache-key) (slot-value table '-cache))
+ (list data widths))))
+
+(defun vtable--ensure-cache (table)
+ (or (vtable--cache table)
+ (vtable--recompute-cache table)))
+
(defun vtable-insert (table)
(let* ((spacer (vtable--spacer table))
(start (point))
@@ -391,17 +401,10 @@ This also updates the displayed table."
'face (vtable-face table))
""))
(ellipsis-width (string-pixel-width ellipsis))
- data widths)
- ;; We maintain a cache per screen/window width, so that we render
- ;; correctly if Emacs is open on two different screens (or the
- ;; user resizes the frame).
- (if-let ((cache (vtable--cache table)))
- (setq data (nth 0 cache)
- widths (nth 1 cache))
- (setq data (vtable--compute-cache table)
- widths (vtable--compute-widths table data))
- (setf (gethash (vtable--cache-key) (slot-value table '-cache))
- (list data widths)))
+ ;; We maintain a cache per screen/window width, so that we render
+ ;; correctly if Emacs is open on two different screens (or the
+ ;; user resizes the frame).
+ (widths (nth 1 (vtable--ensure-cache table))))
(if (vtable-use-header-line table)
(vtable--set-header-line table widths spacer)
;; Insert the header line directly into the buffer, and put a
@@ -746,7 +749,7 @@ This also updates the displayed table."
(vtable-goto-column column))))
(defun vtable--widths (table)
- (nth 1 (vtable--cache table)))
+ (nth 1 (vtable--ensure-cache table)))
;;; Commands.
@@ -783,7 +786,7 @@ Interactively, N is the prefix argument."
(interactive "p")
(let* ((table (vtable-current-table))
(column (vtable-current-column))
- (widths (nth 1 (vtable--cache table))))
+ (widths (vtable--widths table)))
(unless column
(user-error "No column under point"))
(cl-incf (aref widths column)