Browse Source

Merge branch 'master' of orgmode.org:org-mode

Bastien Guerry 5 years ago
parent
commit
1298b6468a
2 changed files with 35 additions and 28 deletions
  1. 31 17
      lisp/org-element.el
  2. 4 11
      lisp/org.el

+ 31 - 17
lisp/org-element.el

@@ -4622,26 +4622,40 @@ first element of current section."
 	   (list (org-element-headline-parser (point-max) t))))
      ;; Otherwise move at the beginning of the section containing
      ;; point.
-     (let ((origin (point))
-	   (end (save-excursion
-		  (org-with-limited-levels (outline-next-heading)) (point)))
-	   element type special-flag trail struct prevs parent)
-       (org-with-limited-levels
-	(if (org-before-first-heading-p) (goto-char (point-min))
-	  (org-back-to-heading)
-	  (forward-line)))
-       (org-skip-whitespace)
-       (beginning-of-line)
-       ;; Parse successively each element, skipping those ending
-       ;; before original position.
-       (catch 'exit
-         (while t
-           (setq element
+     (catch 'exit
+       (let ((origin (point))
+	     (end (save-excursion
+		    (org-with-limited-levels (outline-next-heading)) (point)))
+	     element type special-flag trail struct prevs parent)
+	 (org-with-limited-levels
+	  (if (org-before-first-heading-p)
+	      ;; In empty lines at buffer's beginning, return nil.
+	      (progn (goto-char (point-min))
+		     (org-skip-whitespace)
+		     (when (or (eobp) (> (line-beginning-position) origin))
+		       (throw 'exit nil)))
+	    (org-back-to-heading)
+	    (forward-line)
+	    (org-skip-whitespace)
+	    (when (> (line-beginning-position) origin)
+	      ;; In blank lines just after the headline, point still
+	      ;; belongs to the headline.
+	      (throw 'exit
+		     (progn (org-back-to-heading)
+			    (if (not keep-trail)
+				(org-element-headline-parser (point-max) t)
+			      (list (org-element-headline-parser
+				     (point-max) t))))))))
+	 (beginning-of-line)
+	 ;; Parse successively each element, skipping those ending
+	 ;; before original position.
+	 (while t
+	   (setq element
 		 (org-element--current-element end 'element special-flag struct)
-                 type (car element))
+		 type (car element))
 	   (org-element-put-property element :parent parent)
 	   (when keep-trail (push element trail))
-           (cond
+	   (cond
 	    ;; 1. Skip any element ending before point.  Also skip
 	    ;;    element ending at point when we're sure that another
 	    ;;    element has started.

+ 4 - 11
lisp/org.el

@@ -19652,13 +19652,8 @@ This command does many different things, depending on context:
    ((run-hook-with-args-until-success 'org-ctrl-c-ctrl-c-hook))
    (t
     (let* ((context (org-element-context)) (type (org-element-type context)))
-      ;; Test if point is within blanks at the end of an element.
-      (if (save-excursion
-	    (or (not context)
-		(beginning-of-line)
-		(and (looking-at "[ \t]*$")
-		     (skip-chars-forward " \r\t\n")
-		     (>= (point) (org-element-property :end context)))))
+      ;; Test if point is within a blank line.
+      (if (save-excursion (beginning-of-line) (looking-at "[ \t]*$"))
 	  (or (run-hook-with-args-until-success 'org-ctrl-c-ctrl-c-final-hook)
 	      (user-error "C-c C-c can do nothing useful at this location"))
 	;; For convenience: at the first line of a paragraph on the
@@ -22241,10 +22236,8 @@ the cursor is already beyond the end of the headline."
 			((fboundp 'move-end-of-line) 'move-end-of-line)
 			(t 'end-of-line))))
     (if (or (not special) arg) (call-interactively move-fun)
-      (let* ((element (ignore-errors
-			;; Don't throw an error outside elements
-			(save-excursion (beginning-of-line)
-					(org-element-at-point))))
+      (let* ((element (save-excursion (beginning-of-line)
+				      (org-element-at-point)))
 	     (type (org-element-type element)))
 	(cond
 	 ((memq type '(headline inlinetask))