branch: elpa/annotate commit 2dabb8d886d73310e57a8c7313aea77b33c85347 Merge: 2ccdad1504 31e3c24726 Author: cage <cage-invalid@invalid> Commit: cage <cage-invalid@invalid>
Merge branch 'master' into rethink-multiline-annotations --- Changelog | 20 +++++++++++++++----- NEWS.org | 8 ++++++++ README.org | 3 +++ annotate.el | 56 +++++++++++++++++++++++++++++--------------------------- 4 files changed, 55 insertions(+), 32 deletions(-) diff --git a/Changelog b/Changelog index 9d9f09e3fd..c616997871 100644 --- a/Changelog +++ b/Changelog @@ -2,8 +2,18 @@ * annotate.el (annotate--font-lock-matcher): - fixed error for regexp search - Sometimes some modes/package puts overlay on the last character of a - buffer (notably SLIME when the parenthesis of a form are not - balanced). This will make 're-search-forward' in the aforementioned - function fails and font lock becomes a mess (e.g. text color - disappears). + Sometimes some modes/package puts overlay on the last character of a + buffer (notably SLIME when the parenthesis of a form are not + balanced). This will make 're-search-forward' in the aforementioned + function fails and font lock becomes a mess (e.g. text color + disappears). + +2020-02-10 Bastian Bechtold, cage + * annotate.el (annotate--font-lock-matcher annotate-bounds nnotate-symbol-strictly-at-point annotate-next-annotation-change annotate-previous-annotation-change annotate-clear-annotations annotate-annotate) + - prevented fails of fontification of annotated regions + As we walk across the overlays we can get past the limit; + - mark buffer as modified even if the only action the user performed + was clearing annotation (and at least an annotation was present in + the file) + - prevented annotation of text marked with a region that overlap with + an existing annotation. diff --git a/NEWS.org b/NEWS.org index 14f9889c14..15ff059ff9 100644 --- a/NEWS.org +++ b/NEWS.org @@ -85,3 +85,11 @@ - 2020-01-22 V0.5.1 Bastian Bechtold, cage :: - fixed bug that prevented correct fontifications for major modes that puts overlays on the buffer's text (e.g. SLIME). + +- 2020-02-10 V0.5.2 Bastian Bechtold, cage :: + + - fixed bugs that makes some annotations overlaps; + - fixed some bugs in fontifications of multiline annotation; + - when the only user interactions, before saving, with a visited file was + the call of 'annotate-clear-annotations' the annotations + will shows again at reload, this should be fixed now. diff --git a/README.org b/README.org index 4439f50aa1..1345d344d8 100644 --- a/README.org +++ b/README.org @@ -114,6 +114,9 @@ as comments into the current buffer, like this: incompatibility with the way source blocks are highlighted and the way annotations are displayed. + Annotating a region that contains newline(s) can results in various + issues. + Deleting the first character of an annotated text will remove the annotation (this turned out to be useful, though). diff --git a/annotate.el b/annotate.el index 5fb812e37b..e8146b83d4 100644 --- a/annotate.el +++ b/annotate.el @@ -7,7 +7,7 @@ ;; Maintainer: Bastian Bechtold ;; URL: https://github.com/bastibe/annotate.el ;; Created: 2015-06-10 -;; Version: 0.5.1 +;; Version: 0.5.2 ;; This file is NOT part of GNU Emacs. @@ -52,7 +52,7 @@ ;;;###autoload (defgroup annotate nil "Annotate files without changing them." - :version "0.5.1" + :version "0.5.2" :group 'text) ;;;###autoload @@ -1493,42 +1493,44 @@ The searched interval can be customized setting the variable: (make-string prefix-length ? ))))) (defun annotate-annotations-at (pos) + "Returns the annotations (overlay where (annotationp overlay) -> t) + at positions pos or nil if no annotations exists at pos" (cl-remove-if-not #'annotationp (overlays-at pos))) (defun annotate-previous-annotation-ends (pos) - "Return the previous annotation that ends before pos or nil if no annotation + "Returns the previous annotation that ends before pos or nil if no annotation was found. NOTE this assumes that annotations never overlaps" (cl-labels ((previous-annotation-ends (start) - (let ((all-annotations (annotate-annotations-at start))) - (if all-annotations - (cl-first all-annotations) - (if (> (1- start) - (point-min)) - (previous-annotation-ends (1- start)) - nil))))) - (let ((all-annotations (annotate-annotations-at pos))) - (if all-annotations - (previous-annotation-ends (1- (overlay-start (cl-first all-annotations)))) - (previous-annotation-ends pos))))) + (let ((all-annotations (annotate-annotations-at start))) + (while (and (>= (1- start) + (point-min)) + (null all-annotations)) + (setf start (1- start)) + (setf all-annotations (annotate-annotations-at (1- start)))) + all-annotations))) + (let ((all-annotations (annotate-annotations-at pos))) + (if all-annotations + (previous-annotation-ends (1- (overlay-start (cl-first all-annotations)))) + (previous-annotation-ends pos))))) (defun annotate-next-annotation-starts (pos) - "Return the previous annotation that ends before pos or nil if no annotation + "Returns the previous annotation that ends before pos or nil if no annotation was found. NOTE this assumes that annotations never overlaps" - (cl-labels ((next-annotation-starts (start) - (let ((all-annotations (annotate-annotations-at start))) - (if all-annotations - (cl-first all-annotations) - (if (> (1+ start) - (point-max)) - (previous-annotation-ends (1+ start)) - nil))))) - (let ((all-annotations (annotate-annotations-at pos))) - (if all-annotations - (next-annotation-starts (overlay-ends (cl-first all-annotations))) - (next-annotation-starts pos))))) + (cl-labels ((next-annotation-ends (start) + (let ((all-annotations (annotate-annotations-at start))) + (while (and (<= (1+ start) + (point-max)) + (null all-annotations)) + (setf start (1+ start)) + (setf all-annotations (annotate-annotations-at (1+ start)))) + all-annotations))) + (let ((all-annotations (annotate-annotations-at pos))) + (if all-annotations + (next-annotation-ends (overlay-end (cl-first all-annotations))) + (next-annotation-ends pos))))) (defun annotate-symbol-strictly-at-point () "Return non nil if a symbol is at char immediately following