branch: elpa/annotate commit 7b1c5aa531d30d60c5c1b5317e374b3eeaf123c3 Merge: f29c91db0b 3413c20594 Author: cage2 <1257703+ca...@users.noreply.github.com> Commit: GitHub <nore...@github.com>
Merge pull request #168 from cage2/optimize-searching-for-annotations Optimize searching for annotations --- Changelog | 28 ++++++++++++++++++++++++---- NEWS.org | 4 ++++ annotate.el | 33 ++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 19 deletions(-) diff --git a/Changelog b/Changelog index abbe78395e..d7f4f7d05e 100644 --- a/Changelog +++ b/Changelog @@ -1,10 +1,30 @@ +2025-03-19 cage + + * annotate.el: + + - optimized 'annotate-annotations-overlay-in-range' by jumping from an + annotation to another, instead of scanning every single character of + the buffer. + +2025-03-06 cage + + + Merge pull request #166 from + cage2/updating-documentation-after-autosave-patch + 2025-03-05 cage - * README.org: + * Changelog, + * NEWS.org, + * README.org, + * annotate.el: - Merge pull request #165 from krvkir/master - - fixed typo in README. - - updated README. + Merge pull request #165 from krvkir/master + - fixed typo in README. + - updated README. + - updated Changelog. + - increased version number; + - updated NEWS file. 2025-03-02 krvkir diff --git a/NEWS.org b/NEWS.org index ec6353513b..95ea04b051 100644 --- a/NEWS.org +++ b/NEWS.org @@ -1,3 +1,7 @@ +- 2025-03-05 v2.3.1 cage :: + + This version optimizes a function that searches for annotations in a buffer; this changes should speed up commands like ~annotate-toggle-all-annotations-text~. + - 2025-03-05 v2.3.0 krvkir :: This version adds a new customizable variable to instructs annotate.el to save annotation's database each time a new annotation is created, deleted or amended. diff --git a/annotate.el b/annotate.el index 98597284fe..b666ae1533 100644 --- a/annotate.el +++ b/annotate.el @@ -7,7 +7,7 @@ ;; Maintainer: Bastian Bechtold <bastibe....@mailbox.org>, cage <cage-...@twistfold.it> ;; URL: https://github.com/bastibe/annotate.el ;; Created: 2015-06-10 -;; Version: 2.3.0 +;; Version: 2.3.1 ;; This file is NOT part of GNU Emacs. @@ -58,7 +58,7 @@ ;;;###autoload (defgroup annotate nil "Annotate files without changing them." - :version "2.3.0" + :version "2.3.1" :group 'text) (defvar annotate-mode-map @@ -906,7 +906,7 @@ and (font-lock-flush))) (defun annotate-toggle-all-annotations-text () -"Hide annototation's text in the whole buffer." +"Hide annotation's text in the whole buffer." (interactive) (let ((chains (annotate-annotations-chain-in-range 0 (buffer-size)))) (dolist (chain chains) @@ -1501,18 +1501,21 @@ surrounded by `BEGIN' and `END'." (defun annotate-annotations-overlay-in-range (from-position to-position) "Return the annotations overlays that are enclosed in the range defined by `FROM-POSITION' and `TO-POSITION'." - (let ((annotations ())) - (cl-loop for i - from (max 0 (1- from-position)) - to to-position - do - (let ((annotation (annotate-next-annotation-starts i))) - (annotate-ensure-annotation (annotation) - (let ((chain-end (overlay-end (annotate-chain-last annotation))) - (chain-start (overlay-start (annotate-chain-first annotation)))) - (when (and (>= chain-start from-position) - (<= chain-end to-position)) - (cl-pushnew annotation annotations)))))) + (let ((annotations ()) + (counter (max 0 (1- from-position)))) + (catch 'scan-loop + (while (<= counter + to-position) + (cl-incf counter) + (let ((annotation (annotate-next-annotation-starts counter))) + (if (annotationp annotation) + (let ((chain-end (overlay-end (annotate-chain-last annotation))) + (chain-start (overlay-start (annotate-chain-first annotation)))) + (setf counter chain-end) + (when (and (>= chain-start from-position) + (<= chain-end to-position)) + (cl-pushnew annotation annotations))) + (throw 'scan-loop t))))) (reverse annotations))) (defun annotate-annotations-chain-in-range (from-position to-position)