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

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

[nongnu] elpa/idris-mode 7ebd8e721b 8/9: Merge pull request #581 from ke


From: ELPA Syncer
Subject: [nongnu] elpa/idris-mode 7ebd8e721b 8/9: Merge pull request #581 from keram/highlight-partial
Date: Tue, 6 Dec 2022 05:59:06 -0500 (EST)

branch: elpa/idris-mode
commit 7ebd8e721b0b4abb0b9ff2e86738d02ca6906a99
Merge: ee551230ed 71ab6a35e3
Author: Jan de Muijnck-Hughes <jfdm@users.noreply.github.com>
Commit: GitHub <noreply@github.com>

    Merge pull request #581 from keram/highlight-partial
    
    [semantic-highlight] Remove and rebuild overlays in file on reload  only in 
changed area
---
 idris-commands.el        |  2 --
 idris-highlight-input.el | 53 ++++++++++++++++++++++++++++++------------------
 2 files changed, 33 insertions(+), 22 deletions(-)

diff --git a/idris-commands.el b/idris-commands.el
index 9b8eb7ee32..54f558b19a 100644
--- a/idris-commands.el
+++ b/idris-commands.el
@@ -209,8 +209,6 @@ A prefix argument forces loading but only up to the current 
line."
         (when (get-buffer idris-notes-buffer-name)
           (with-current-buffer idris-notes-buffer-name
             (let ((inhibit-read-only t)) (erase-buffer))))
-        ;; Remove stale semantic highlighting
-        (idris-highlight-remove-overlays (current-buffer))
         ;; Actually do the loading
         (let* ((dir-and-fn (idris-filename-to-load))
                (fn (cdr dir-and-fn))
diff --git a/idris-highlight-input.el b/idris-highlight-input.el
index 521e4b0399..ec9aaaab67 100644
--- a/idris-highlight-input.el
+++ b/idris-highlight-input.el
@@ -57,32 +57,45 @@ See Info node `(elisp)Overlay Properties' to understand how 
ARGS are used."
 (defun idris-highlight-input-region (buffer start-line start-col end-line 
end-col highlight)
   "Highlight in BUFFER using an overlay from START-LINE and START-COL to
  END-LINE and END-COL and the semantic properties specified in HIGHLIGHT."
-  (when idris-semantic-source-highlighting
-    (save-restriction
-      (widen)
-      (if (or (> end-line start-line)
-              (and (= end-line start-line)
-                   (> end-col start-col)))
-          (with-current-buffer buffer
+  (if (or (> end-line start-line)
+          (and (= end-line start-line)
+               (> end-col start-col)))
+      (when idris-semantic-source-highlighting
+        (with-current-buffer buffer
+          (save-restriction
+            (widen)
             (save-excursion
               (goto-char (point-min))
               (let* ((start-pos (+ (line-beginning-position start-line)
                                    (idris-highlight-column start-col)))
                      (end-pos (+ (line-beginning-position end-line)
                                  (idris-highlight-column end-col)))
-                     (highlight-overlay (make-overlay start-pos end-pos
-                                                      (get-buffer buffer))))
-                (overlay-put highlight-overlay 'idris-source-highlight t)
-                (idris-add-overlay-properties highlight-overlay
-                                              (idris-semantic-properties 
highlight))
-                (overlay-put highlight-overlay
-                             'modification-hooks
-                             '(idris-highlight--overlay-modification-hook)))))
-        (when (eq idris-semantic-source-highlighting 'debug)
-          (message "Not highlighting absurd span %s:%s-%s:%s with %s"
-                   start-line start-col
-                   end-line end-col
-                   highlight ))))))
+                     (existing-idris-overlays-in-range (seq-filter
+                                                        (lambda (overlay)
+                                                          (overlay-get overlay 
'idris-source-highlight))
+                                                        (overlays-in start-pos 
end-pos)))
+                     (existing-idris-overlay (seq-find (lambda (overlay)
+                                                         (and
+                                                          (eql start-pos 
(overlay-start overlay))
+                                                          (eql end-pos 
(overlay-end overlay))
+                                                          ;; TODO: overlay 
properties match
+                                                          ))
+                                                       
existing-idris-overlays-in-range)))
+                (when (null existing-idris-overlay)
+                  (dolist (old-overlay existing-idris-overlays-in-range)
+                    (delete-overlay old-overlay))
+                  (let ((highlight-overlay (make-overlay start-pos end-pos)))
+                    (overlay-put highlight-overlay 'idris-source-highlight t)
+                    (idris-add-overlay-properties highlight-overlay
+                                                  (idris-semantic-properties 
highlight))
+                    (overlay-put highlight-overlay
+                                 'modification-hooks
+                                 
'(idris-highlight--overlay-modification-hook)))))))))
+    (when (eq idris-semantic-source-highlighting 'debug)
+      (message "Not highlighting absurd span %s:%s-%s:%s with %s"
+               start-line start-col
+               end-line end-col
+               highlight))))
 
 (defun idris-highlight-source-file (hs)
   (cl-loop



reply via email to

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