branch: externals/org commit 946abeb49a73d7d04233a53fbb7fd422c7e294b6 Author: Ihor Radchenko <yanta...@posteo.net> Commit: Ihor Radchenko <yanta...@posteo.net>
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 <brubar...@gmail.com> Link: https://orgmode.org/list/63662793.5d0a0220.62647.3...@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 2eb1a8b628..541413a64a 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)))))))