]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix truncation of long lines in compilation buffers
authorEli Zaretskii <eliz@gnu.org>
Sun, 7 Apr 2024 09:08:18 +0000 (12:08 +0300)
committerEshel Yaron <me@eshelyaron.com>
Sun, 7 Apr 2024 16:34:52 +0000 (18:34 +0200)
* lisp/progmodes/compile.el
(compilation--insert-abbreviated-line): Handle long lines that end
in a newline.  (Bug#70236)

(cherry picked from commit 8f93cba324e4d4022a9422b8c56186213ba2de8d)

lisp/progmodes/compile.el

index 11d400e145a6e86400188193e7ddaf6b0dbf7ad6..d7690b7fa74803b617c56e3ca5b4835d18fbf9dc 100644 (file)
@@ -2644,24 +2644,29 @@ and runs `compilation-filter-hook'."
          (text-properties-at (1- beg))))
     (insert string)
     ;; If we exceeded the limit, hide the last portion of the line.
-    (when (> (current-column) width)
-      (let ((start (save-excursion
-                     (move-to-column width)
-                     (point))))
-        (buttonize-region
-         start (point)
-         (lambda (start)
-           (let ((inhibit-read-only t))
-             (remove-text-properties start (save-excursion
-                                             (goto-char start)
-                                             (line-end-position))
-                                     (text-properties-at start)))))
-        (put-text-property
-         start (if (= (aref string (1- (length string))) ?\n)
-                   ;; Don't hide the final newline.
-                   (1- (point))
-                 (point))
-         'display (if (char-displayable-p ?…) "[…]" "[...]"))))))
+    (let* ((ends-in-nl (= (aref string (1- (length string))) ?\n))
+           (curcol (if ends-in-nl
+                       (progn (backward-char) (current-column))
+                     (current-column))))
+      (when (> curcol width)
+        (let ((start (save-excursion
+                       (move-to-column width)
+                       (point))))
+          (buttonize-region
+           start (point)
+           (lambda (start)
+             (let ((inhibit-read-only t))
+               (remove-text-properties start (save-excursion
+                                               (goto-char start)
+                                               (line-end-position))
+                                       (text-properties-at start)))))
+          (put-text-property
+           start (if ends-in-nl
+                     ;; Don't hide the final newline.
+                     (1- (point))
+                   (point))
+           'display (if (char-displayable-p ?…) "[…]" "[...]"))))
+      (if ends-in-nl (forward-char)))))
 
 (defsubst compilation-buffer-internal-p ()
   "Test if inside a compilation buffer."