From 946abeb49a73d7d04233a53fbb7fd422c7e294b6 Mon Sep 17 00:00:00 2001 From: Ihor Radchenko Date: Sat, 5 Nov 2022 17:38:37 +0800 Subject: [PATCH] org-sting-width: Do no err in dedicated windows * lisp/org-macs.el (org-string-width): Do not err when current window is dedicated. Force-remove dedicated status temporarily during the call. This should be safe as we only need to take over the window temporarily to hook into Emacs display and calculate the string width. Reported-by: Bruno BARBIER Link: https://orgmode.org/list/63662793.5d0a0220.62647.3003@mx.google.com --- lisp/org-macs.el | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lisp/org-macs.el b/lisp/org-macs.el index 2eb1a8b62..541413a64 100644 --- a/lisp/org-macs.el +++ b/lisp/org-macs.el @@ -1100,9 +1100,17 @@ Return width in pixels when PIXELS is non-nil." (if (get-buffer-window (current-buffer)) (car (window-text-pixel-size nil (line-beginning-position) (point-max))) - (set-window-buffer nil (current-buffer)) - (car (window-text-pixel-size - nil (line-beginning-position) (point-max))))) + (let ((dedicatedp (window-dedicated-p)) + (oldbuffer (window-buffer))) + (unwind-protect + (progn + ;; Do not throw error in dedicated windows. + (set-window-dedicated-p nil nil) + (set-window-buffer nil (current-buffer)) + (car (window-text-pixel-size + nil (line-beginning-position) (point-max)))) + (set-window-buffer nil oldbuffer) + (set-window-dedicated-p nil dedicatedp))))) (unless pixels (erase-buffer) (insert "a") @@ -1110,9 +1118,17 @@ Return width in pixels when PIXELS is non-nil." (if (get-buffer-window (current-buffer)) (car (window-text-pixel-size nil (line-beginning-position) (point-max))) - (set-window-buffer nil (current-buffer)) - (car (window-text-pixel-size - nil (line-beginning-position) (point-max))))))) + (let ((dedicatedp (window-dedicated-p)) + (oldbuffer (window-buffer))) + (unwind-protect + (progn + ;; Do not throw error in dedicated windows. + (set-window-dedicated-p nil nil) + (set-window-buffer nil (current-buffer)) + (car (window-text-pixel-size + nil (line-beginning-position) (point-max)))) + (set-window-buffer nil oldbuffer) + (set-window-dedicated-p nil dedicatedp))))))) (if pixels pixel-width (/ pixel-width symbol-width)))))))