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

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

[elpa] externals-release/org 27a41d418d: org-element--cache-before-chang


From: ELPA Syncer
Subject: [elpa] externals-release/org 27a41d418d: org-element--cache-before-change: Fix edge case creating heading
Date: Wed, 16 Aug 2023 06:58:34 -0400 (EDT)

branch: externals-release/org
commit 27a41d418d4558b511f4ab74bf26dde0b72d2526
Author: Ihor Radchenko <yantar92@posteo.net>
Commit: Ihor Radchenko <yantar92@posteo.net>

    org-element--cache-before-change: Fix edge case creating heading
    
    * lisp/org-element.el (org-element--cache-before-change): Fix edge
    case when a heading is created because we insert a newline right
    before ****.
    * testing/lisp/test-org-element.el (test-org-element/cache-headline):
    Add tests.
    
    Reported-by: Rodrigo Morales <moralesrodrigo1100@gmail.com>
    Link: 
https://orgmode.org/list/CAGxMbPbbqc33iaqJ=EceyKrLaf4maJAxaUmJGaPOvG_Rpw+xcQ@mail.gmail.com
---
 lisp/org-element.el              | 16 ++--------------
 testing/lisp/test-org-element.el | 27 ++++++++++++++++++++++++++-
 2 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/lisp/org-element.el b/lisp/org-element.el
index ffd492d723..0debd1a681 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -6705,20 +6705,8 @@ The function returns the new value of 
`org-element--cache-change-warning'."
        (setq org-element--cache-change-tic (buffer-chars-modified-tick))
        (setq org-element--cache-last-buffer-size (buffer-size))
        (goto-char beg)
-       (beginning-of-line)
-       (let ((bottom (save-excursion
-                       (goto-char end)
-                       (if (and (bolp)
-                                ;; When beg == end, still extent to eol.
-                                (> (point) beg))
-                           ;; FIXME: Potential pitfall.
-                           ;; We are appending to an element end.
-                           ;; Unless the last inserted char is not
-                           ;; newline, the next element is not broken
-                           ;; and does not need to be purged from the
-                           ;; cache.
-                           end
-                         (line-end-position)))))
+       (forward-line 0)
+       (let ((bottom (save-excursion (goto-char end) (line-end-position))))
          (prog1
              ;; Use the worst change warning to not miss important edits.
              ;; This function is called before edit and after edit by
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 8c97371bba..6e7658759e 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -4372,7 +4372,32 @@ paragraph
     (let ((org-element-use-cache t))
       (org-element-at-point (point-max))
       (delete-region (point) (point-max))
-      (should (eq 'paragraph (org-element-type (org-element-at-point)))))))
+      (should (eq 'paragraph (org-element-type (org-element-at-point))))))
+  ;; Remove/re-introduce heading.
+  (org-test-with-temp-text
+      "
+* 1
+** 1-1
+a
+<point>** 1-2
+a
+"
+    (let ((org-element-use-cache t))
+      (org-element-at-point (point-max))
+      (insert "FOO")
+      (should
+       (equal
+        "1-1"
+        (org-element-property
+         :title
+         (org-element-lineage (org-element-at-point) '(headline)))))
+      (insert "\n")
+      (should
+       (equal
+        "1"
+        (org-element-property
+         :title
+         (org-element-lineage (org-element-at-point) '(headline))))))))
 
 (provide 'test-org-element)
 



reply via email to

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