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.
This commit is contained in:
Nicolas Goaziou 2013-09-18 21:15:04 +02:00
parent 072f2abe4c
commit 41cf6f2a36
2 changed files with 19 additions and 5 deletions

View File

@ -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

View File

@ -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)