branch: externals/compat commit 7c17c96c1e0e98033481394e05b20fc3399a373c Author: Daniel Mendler <m...@daniel-mendler.de> Commit: Daniel Mendler <m...@daniel-mendler.de>
compat-29: Drop broken string-pixel-width and window-pixel-width (Fix #8) These functions seem to hangup from time to time on 28.2 (seagle0128/doom-modeline#601). By dropping the functions the hangup in doom-modeline is resolved, since doom-modeline contains a runtime check for string-pixel-width. The compatibility function implementations do not contain any loops, this means there is an underlying bug in `window-text-pixel-size' in 28.2 exposed by the compatibility function. Either the compatibility function must be written in a different form or we cannot provide them at all. --- compat-29.el | 33 --------------------------------- compat.texi | 28 ---------------------------- 2 files changed, 61 deletions(-) diff --git a/compat-29.el b/compat-29.el index 300a20dc96..e47e87be93 100644 --- a/compat-29.el +++ b/compat-29.el @@ -55,28 +55,6 @@ the properties at POSITION." (eq (car properties) prop)) (cadr properties)))) -(compat-defun buffer-text-pixel-size ;; <UNTESTED> - (&optional buffer-or-name window x-limit y-limit) - "Return size of whole text of BUFFER-OR-NAME in WINDOW. -BUFFER-OR-NAME must specify a live buffer or the name of a live buffer -and defaults to the current buffer. WINDOW must be a live window and -defaults to the selected one. The return value is a cons of the maximum -pixel-width of any text line and the pixel-height of all the text lines -of the buffer specified by BUFFER-OR-NAME. - -The optional arguments X-LIMIT and Y-LIMIT have the same meaning as with -`window-text-pixel-size'. - -Do not use this function if the buffer specified by BUFFER-OR-NAME is -already displayed in WINDOW. `window-text-pixel-size' is cheaper in -that case because it does not have to temporarily show that buffer in -WINDOW." - (setq buffer-or-name (or buffer-or-name (current-buffer))) - (setq window (or window (selected-window))) - (save-window-excursion - (set-window-buffer window buffer-or-name) - (window-text-pixel-size window nil nil x-limit y-limit))) - ;;;; Defined in fns.c (compat-defun ntake (n list) ;; <OK> @@ -307,17 +285,6 @@ than this function." (end (substring string (- (length string) length))) (t (substring string 0 length))))) -(compat-defun string-pixel-width (string) ;; <UNTESTED> - "Return the width of STRING in pixels." - (if (zerop (length string)) - 0 - ;; Keeping a work buffer around is more efficient than creating a - ;; new temporary buffer. - (with-current-buffer (get-buffer-create " *string-pixel-width*") - (delete-region (point-min) (point-max)) - (insert string) - (car (buffer-text-pixel-size nil nil t))))) - (compat-defmacro with-buffer-unmodified-if-unchanged (&rest body) ;; <UNTESTED> "Like `progn', but change buffer-modified status only if buffer text changes. If the buffer was unmodified before execution of BODY, and diff --git a/compat.texi b/compat.texi index 7c005bb27b..3d19933df5 100644 --- a/compat.texi +++ b/compat.texi @@ -2146,26 +2146,6 @@ display purposes; use @code{truncate-string-to-width} or (@pxref{Size of Displayed Text,Size of Displayed Text,,elisp,}). @end defun -@c copied from lispref/display.texi -@defun buffer-text-pixel-size &optional buffer-or-name window x-limit y-limit -This is much like @code{window-text-pixel-size}, but can be used when -the buffer isn't shown in a window. (@code{window-text-pixel-size} is -faster when it is, so this function shouldn't be used in that case.) - -@var{buffer-or-name} must specify a live buffer or the name of a live -buffer and defaults to the current buffer. @var{window} must be a -live window and defaults to the selected one; the function will -compute the text dimensions as if @var{buffer} is displayed in -@var{window}. The return value is a cons of the maximum pixel-width -of any text line and the pixel-height of all the text lines of the -buffer specified by @var{buffer-or-name}. - -The optional arguments @var{x-limit} and @var{y-limit} have the same -meaning as with @code{window-text-pixel-size}. - -@xref{Size of Displayed Text,,,elisp}. -@end defun - @c copied from lispref/strings.texi @defun string-equal-ignore-case string1 string2 @code{string-equal-ignore-case} compares strings ignoring case @@ -2240,14 +2220,6 @@ optional @code{buffer-list} argument. Optional third argument @xref{Buffer List,,,elisp}. @end defun -@c copied from lispref/display.texi -@defun string-pixel-width string -This is a convenience function that uses @code{window-text-pixel-size} -to compute the width of @var{string} (in pixels). - -@xref{Size of Displayed Text,,,elisp}. -@end defun - @c copied from lispref/display.texi @defun string-glyph-split string When character compositions are in effect, sequence of characters can