Pārlūkot izejas kodu

Fix `org-mark-element' in narrowed buffers

* lisp/org.el (org-mark-element): Do not set mark past narrowed part
of the buffer.
* testing/lisp/test-org.el (test-org/mark-element): New test.

Reported-by: Kevin Liu <kevin@nivekuil.com>
<http://lists.gnu.org/r/emacs-orgmode/2020-05/msg00812.html>
Nicolas Goaziou 4 gadi atpakaļ
vecāks
revīzija
65fdf2be16
2 mainītis faili ar 24 papildinājumiem un 2 dzēšanām
  1. 3 2
      lisp/org.el
  2. 21 0
      testing/lisp/test-org.el

+ 3 - 2
lisp/org.el

@@ -21150,10 +21150,11 @@ ones already marked."
 	(set-mark
 	 (save-excursion
 	   (goto-char (mark))
-	   (goto-char (org-element-property :end (org-element-at-point)))))
+	   (goto-char (org-element-property :end (org-element-at-point)))
+	   (point)))
       (let ((element (org-element-at-point)))
 	(end-of-line)
-	(push-mark (org-element-property :end element) t t)
+	(push-mark (min (point-max) (org-element-property :end element)) t t)
 	(goto-char (org-element-property :begin element))))))
 
 (defun org-narrow-to-element ()

+ 21 - 0
testing/lisp/test-org.el

@@ -2581,6 +2581,27 @@ Foo Bar
 
 ;;; Mark Region
 
+(ert-deftest test-org/mark-element ()
+  "Test `org-mark-element' specifications."
+  ;; Mark beginning and end of element.
+  (should
+   (equal '(t t)
+	  (org-test-with-temp-text "Para<point>graph"
+	    (org-mark-element)
+	    (list (bobp) (= (mark) (point-max))))))
+  (should
+   (equal '(t t)
+	  (org-test-with-temp-text "P1\n\nPara<point>graph\n\nP2"
+	    (org-mark-element)
+	    (list (looking-at "Paragraph")
+		  (org-with-point-at (mark) (looking-at "P2"))))))
+  ;; Do not set mark past (point-max).
+  (should
+   (org-test-with-temp-text "Para<point>graph"
+     (narrow-to-region 2 6)
+     (org-mark-element)
+     (= 6 (mark)))))
+
 (ert-deftest test-org/mark-subtree ()
   "Test `org-mark-subtree' specifications."
   ;; Error when point is before first headline.