emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 4dc72dd: Fix 'window-text-pixel-size' when there are leading/trai


From: Eli Zaretskii
Subject: master 4dc72dd: Fix 'window-text-pixel-size' when there are leading/trailing spaces
Date: Fri, 15 Jan 2021 07:07:03 -0500 (EST)

branch: master
commit 4dc72dd9deb1c3394ada3de3f52bc7c1ff831ab6
Author: Aaron Jensen <aaronjensen@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>

    Fix 'window-text-pixel-size' when there are leading/trailing spaces
    
    First, scan to find the first non-whitespace character and then
    backtrack to find the beginning of the line.  The previous
    algorithm always started on the non-whitespace character during
    the backtrack, causing it to stop immediately and not actually
    find the beginning of the line.  The same applies to the end of
    line calculation.
    * src/xdisp.c: (Fwindow_text_pixel_size): Fix off by one error.
    (Bug#45748)
    
    * test/src/xdisp-tests.el (xdisp-tests--window-text-pixel-size)
    (xdisp-tests--window-text-pixel-size-leading-space)
    (xdisp-tests--window-text-pixel-size-trailing-space): New tests.
---
 src/xdisp.c             |  8 ++++++--
 test/src/xdisp-tests.el | 30 ++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/src/xdisp.c b/src/xdisp.c
index 64f4016..ea67329 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -10649,9 +10649,10 @@ include the height of both, if present, in the return 
value.  */)
       bpos = BEGV_BYTE;
       while (bpos < ZV_BYTE)
        {
-         c = fetch_char_advance (&start, &bpos);
+         c = FETCH_BYTE (bpos);
          if (!(c == ' ' || c == '\t' || c == '\n' || c == '\r'))
            break;
+         inc_both (&start, &bpos);
        }
       while (bpos > BEGV_BYTE)
        {
@@ -10680,7 +10681,10 @@ include the height of both, if present, in the return 
value.  */)
          dec_both (&end, &bpos);
          c = FETCH_BYTE (bpos);
          if (!(c == ' ' || c == '\t' || c == '\n' || c == '\r'))
-           break;
+            {
+             inc_both (&end, &bpos);
+             break;
+            }
        }
       while (bpos < ZV_BYTE)
        {
diff --git a/test/src/xdisp-tests.el b/test/src/xdisp-tests.el
index d13ce77..ec96d77 100644
--- a/test/src/xdisp-tests.el
+++ b/test/src/xdisp-tests.el
@@ -72,4 +72,34 @@
     (should (equal (nth 0 posns) (nth 1 posns)))
     (should (equal (nth 1 posns) (nth 2 posns)))))
 
+(ert-deftest xdisp-tests--window-text-pixel-size () ;; bug#45748
+  (with-temp-buffer
+    (insert "xxx")
+    (let* ((window
+            (display-buffer (current-buffer) '(display-buffer-in-child-frame . 
nil)))
+          (char-width (frame-char-width))
+          (size (window-text-pixel-size nil t t)))
+      (delete-frame (window-frame window))
+      (should (equal (/ (car size) char-width) 3)))))
+
+(ert-deftest xdisp-tests--window-text-pixel-size-leading-space () ;; bug#45748
+  (with-temp-buffer
+    (insert " xx")
+    (let* ((window
+            (display-buffer (current-buffer) '(display-buffer-in-child-frame . 
nil)))
+          (char-width (frame-char-width))
+          (size (window-text-pixel-size nil t t)))
+      (delete-frame (window-frame window))
+      (should (equal (/ (car size) char-width) 3)))))
+
+(ert-deftest xdisp-tests--window-text-pixel-size-trailing-space () ;; bug#45748
+  (with-temp-buffer
+    (insert "xx ")
+    (let* ((window
+            (display-buffer (current-buffer) '(display-buffer-in-child-frame . 
nil)))
+          (char-width (frame-char-width))
+          (size (window-text-pixel-size nil t t)))
+      (delete-frame (window-frame window))
+      (should (equal (/ (car size) char-width) 3)))))
+
 ;;; xdisp-tests.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]