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

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

[elpa] externals/org e2a8e95 2/3: org-element-cache: Fix when edit exten


From: ELPA Syncer
Subject: [elpa] externals/org e2a8e95 2/3: org-element-cache: Fix when edit extends previous element
Date: Fri, 17 Dec 2021 23:57:30 -0500 (EST)

branch: externals/org
commit e2a8e95576598443bbb5ae425615d8b429a8b28b
Author: Ihor Radchenko <yantar92@gmail.com>
Commit: Ihor Radchenko <yantar92@gmail.com>

    org-element-cache: Fix when edit extends previous element
    
    * lisp/org-element.el (org-element--cache-after-change): Always extend
    changed region to bol.
    * testing/lisp/test-org-element.el (test-org-element/cache): Add test
    checking the new fix.  Amend some tests around making sure that cache
    is active during testing.
---
 lisp/org-element.el              |  6 ++----
 testing/lisp/test-org-element.el | 29 ++++++++++++++++++++---------
 2 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index 874b25e..112e335 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6602,10 +6602,8 @@ that range.  See `after-change-functions' for more 
information."
         ;; sure that we capture preceding element.
         (setq beg (save-excursion
                     (goto-char beg)
-                    (skip-chars-backward " \t")
-                    (if (not (bolp)) beg
-                      (cl-incf pre (- beg (point)))
-                      (point))))
+                    (cl-incf pre (- beg (line-beginning-position)))
+                    (line-beginning-position)))
         ;; Store synchronization request.
         (let ((offset (- end beg pre)))
           (save-match-data
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 83a96e1..3d320b8 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -4080,19 +4080,30 @@ Text
   ;; Test edits near :end of element
   (should-not (eq 'headline
                   (org-test-with-temp-text "* H1\nP1\n<point>*H2\n"
-                    (org-element-cache-map #'ignore :granularity 'element)
-                    (insert "Blah")
-                    (org-element-type (org-element-at-point)))))
+                    (let ((org-element-use-cache t))
+                      (org-element-cache-map #'ignore :granularity 'element)
+                      (insert "Blah")
+                      (org-element-type (org-element-at-point))))))
   (should-not (eq 'headline
                   (org-test-with-temp-text "* H1\nP1\n<point>*H2\n"
-                    (org-element-cache-map #'ignore :granularity 'element)
-                    (backward-delete-char 1)
-                    (org-element-type (org-element-at-point)))))
+                    (let ((org-element-use-cache t))  
+                      (org-element-cache-map #'ignore :granularity 'element)
+                      (backward-delete-char 1)
+                      (org-element-type (org-element-at-point))))))
+  (org-test-with-temp-text "Paragraph.\n #<point> comment"
+    (let ((org-element-use-cache t))
+      (org-element-cache-map #'ignore :granularity 'element)
+      (should (eq 'comment (org-element-type (org-element-at-point))))
+      (insert "not comment anymore")
+      (org-element-cache-map #'ignore :granularity 'element)
+      (should-not (eq 'comment (org-element-type (org-element-at-point))))
+      (should (eq (org-element-at-point) (org-element-at-point 1)))))
   (should (eq 'headline
               (org-test-with-temp-text "* H1\nP1\n<point*H2\n"
-                (org-element-cache-map #'ignore :granularity 'element)
-                (insert "Blah\n")
-                (org-element-type (org-element-at-point)))))
+                (let ((org-element-use-cache t))
+                  (org-element-cache-map #'ignore :granularity 'element)
+                  (insert "Blah\n")
+                  (org-element-type (org-element-at-point))))))
   ;; Corner case: watch out drawers named "PROPERTIES" as they are
   ;; fragile, unlike to other drawers.
   (should



reply via email to

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