From 9424ad7232310d2e19c13b962db2ee5626850ddc Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 10 Nov 2024 10:56:40 +0200 Subject: [PATCH] Fix movement to the left in picture-mode * lisp/textmodes/picture.el (picture-insert): Measure width by counting columns on display, not by using 'string-width', because the latter is inaccurate when TABs are involved. (Bug#74255) (cherry picked from commit 7dabfe9465c623043e4ea1abe618a6169c155d04) --- lisp/textmodes/picture.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lisp/textmodes/picture.el b/lisp/textmodes/picture.el index 481dbe8cb8a..37d1e59ac6e 100644 --- a/lisp/textmodes/picture.el +++ b/lisp/textmodes/picture.el @@ -264,9 +264,14 @@ Use \"\\[command-apropos] picture-movement\" to see commands which control motio (move-to-column picture-desired-column t)) (let ((col (+ picture-desired-column width))) (or (eolp) - (let ((pos (point))) - (move-to-column col t) - (let ((old-width (string-width (buffer-substring pos (point))))) + (let ((pos (point)) + (col0 (current-column)) + col1) + (setq col1 (move-to-column col t)) + ;; We count columns, not width, because move-to-column + ;; could insert TABs, which width depends on horizontal + ;; position. + (let ((old-width (- (max col0 col1) (min col0 col1)))) (delete-region pos (point)) (when (> old-width width) (insert-char ? (- old-width width)) -- 2.39.5