From 41cf6f2a3687a6edeccb9171e056d2017b17f7df Mon Sep 17 00:00:00 2001 From: Nicolas Goaziou Date: Wed, 18 Sep 2013 21:15:04 +0200 Subject: [PATCH] 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. --- lisp/org-element.el | 17 ++++++++++++----- testing/lisp/test-org-element.el | 7 +++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lisp/org-element.el b/lisp/org-element.el index 2dade91bd..807fdb4cd 100644 --- a/lisp/org-element.el +++ b/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 diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el index 76cdfdade..ea4f64904 100644 --- a/testing/lisp/test-org-element.el +++ b/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) -- 2.11.4.GIT