emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[nongnu] elpa/popon 651b648420 06/15: Fix popon breaking on buffers with


From: ELPA Syncer
Subject: [nongnu] elpa/popon 651b648420 06/15: Fix popon breaking on buffers without final newline
Date: Sun, 22 May 2022 12:59:18 -0400 (EDT)

branch: elpa/popon
commit 651b648420b3e9fad5366dcea9aa3c69abe03e73
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>

    Fix popon breaking on buffers without final newline
---
 popon.el | 55 +++++++++++++++++++++++++++++--------------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/popon.el b/popon.el
index eda7300647..cd14e332ce 100644
--- a/popon.el
+++ b/popon.el
@@ -295,32 +295,35 @@ when LINE-BEGINNINGS was calculated.")
               (push pair line-map))
             (push (cons (- i (nth 2 line)) (car line)) (cdr pair))))
         (setq i (1+ i))))
-    (let ((newline-at-display t))
-      (dolist (block line-map)
-        (let ((ov (make-overlay (caar block) (cdar block))))
-          (push ov (window-parameter nil 'popon-overlays))
-          (overlay-put ov 'window (selected-window))
-          (overlay-put ov 'display (if newline-at-display "\n" ""))
-          (overlay-put
-           ov 'before-string
-           (let ((text "")
-                 (current-offset 0))
-             (when (and (= (caar block) (cdar block) (point-max))
-                        (> (caar block) 0)
-                        (not (equal (buffer-substring-no-properties
-                                     (1- (caar block)) (caar block))
-                                    "\n")))
-               (setq text "\n"))
-             (dolist (line (sort (cdr block) #'car-less-than-car))
-               (setq text (concat text
-                                  (make-string (- (car line)
-                                                  current-offset)
-                                               ?\n)
-                                  (cdr line)))
-               (setq current-offset (car line)))
-             (add-face-text-property 0 (length text) 'default 'append text)
-             (concat text (unless newline-at-display "\n"))))
-          (setq newline-at-display (not newline-at-display)))))))
+    (dolist (block line-map)
+      (let ((ov (make-overlay (caar block) (cdar block))))
+        (push ov (window-parameter nil 'popon-overlays))
+        (overlay-put ov 'window (selected-window))
+        (overlay-put ov 'display (copy-sequence '(space :width (0))))
+        (overlay-put
+         ov 'before-string
+         (let ((text "")
+               (current-offset 0))
+           (when (and (= (caar block) (cdar block) (point-max))
+                      (not (equal (buffer-substring-no-properties
+                                   (1- (caar block)) (caar block))
+                                  "\n")))
+             (setq text "\n"))
+           (dolist (line (sort (cdr block) #'car-less-than-car))
+             (setq text (concat text
+                                (make-string (- (car line)
+                                                current-offset)
+                                             ?\n)
+                                (cdr line)))
+             (setq current-offset (car line)))
+           (add-face-text-property 0 (length text) 'default 'append text)
+           (when (or (not (= (cdar block) (point-max)))
+                     (not (< (caar block) (cdar block)))
+                     (equal (buffer-substring-no-properties
+                             (1- (cdar block)) (cdar block))
+                            "\n"))
+             (setq text (concat text "\n")))
+           text))))))
 
 (defun popon--redisplay-1 (force)
   "Redisplay popon overlays.



reply via email to

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