From: Lars Ingebrigtsen Date: Thu, 14 Apr 2022 14:25:31 +0000 (+0200) Subject: Ensure that commands like { work on all frames in vtable X-Git-Tag: archive/raspbian/1%29.2+1-2+rpi1^2~5^2~16^2~2370^2~574 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=e7f7930a61e6603a3d489b5d09db24ac48870f49;p=emacs.git 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. --- 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)