Преглед на файлове

org-element: Fix `org-element-at-point' at end of buffer

* lisp/org-element.el (org-element-at-point): If point is at the end
  of the buffer, and that buffer ends with a list, and there's no
  final newline, return last element in last item instead of plain
  list.
* testing/lisp/test-org-element.el: Add test.

This fix allows to fill correctly the following construct:

 - Item with a very long line ending at the end of buffer.
Nicolas Goaziou преди 11 години
родител
ревизия
41cf6f2a36
променени са 2 файла, в които са добавени 19 реда и са изтрити 5 реда
  1. 12 5
      lisp/org-element.el
  2. 7 0
      testing/lisp/test-org-element.el

+ 12 - 5
lisp/org-element.el

@@ -4781,11 +4781,18 @@ first element of current section."
 		       ;; into elements with an explicit ending, but
 		       ;; return that element instead.
 		       (and (= cend origin)
-			    (memq type
-				  '(center-block
-				    drawer dynamic-block inlinetask item
-				    plain-list property-drawer quote-block
-				    special-block))))
+			    (or (memq type
+				      '(center-block
+					drawer dynamic-block inlinetask
+					property-drawer quote-block
+					special-block))
+				;; Corner case: if a list ends at the
+				;; end of a buffer without a final new
+				;; line, return last element in last
+				;; item instead.
+				(and (memq type '(item plain-list))
+				     (progn (goto-char cend)
+					    (or (bolp) (not (eobp))))))))
 		   (throw 'exit (if keep-trail trail element))
 		 (setq parent element)
 		 (case type

+ 7 - 0
testing/lisp/test-org-element.el

@@ -2865,6 +2865,13 @@ Paragraph \\alpha."
        (org-test-with-temp-text "- Para1\n- Para2\n\nPara3"
 	 (progn (forward-line 2)
 		(org-element-type (org-element-at-point))))))
+  ;; Special case: when a list ends at the end of buffer and there's
+  ;; no final newline, return last element in last item.
+  (should
+   (eq 'paragraph
+       (org-test-with-temp-text "- a"
+	 (end-of-line)
+	 (org-element-type (org-element-at-point)))))
   ;; With an optional argument, return trail.
   (should
    (equal '(paragraph center-block)