summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <n.goaziou@gmail.com>2012-11-04 23:57:56 (GMT)
committer Nicolas Goaziou <n.goaziou@gmail.com>2012-11-04 23:57:56 (GMT)
commitf48a8b7bf821b71ef1426ad0cb38d678cc9bb303 (patch)
tree4a2dd0fbe0b665db45432d354bfd9e9d4c613286
parentd22e732d7a688622729fb2d4994cf95a94dd0598 (diff)
downloadorg-mode-f48a8b7bf821b71ef1426ad0cb38d678cc9bb303.zip
org-mode-f48a8b7bf821b71ef1426ad0cb38d678cc9bb303.tar.gz
Fix end of line function called on an hidden block
* lisp/org.el (org-end-of-line): On a hidden block make sure to delegate motion to `end-of-line' instead of `move-end-of-line' in order to stay on the current line. * testing/lisp/test-org.el: Update test.
-rw-r--r--lisp/org.el64
-rw-r--r--testing/lisp/test-org.el2
2 files changed, 34 insertions, 32 deletions
diff --git a/lisp/org.el b/lisp/org.el
index 8cf388f..e5ea0ae 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -21331,37 +21331,39 @@ tags on the first attempt, and only move to after the tags when
the cursor is already beyond the end of the headline."
(interactive "P")
(let ((special (if (consp org-special-ctrl-a/e) (cdr org-special-ctrl-a/e)
- org-special-ctrl-a/e))
- (type (org-element-type
- (save-excursion (beginning-of-line) (org-element-at-point)))))
- (cond
- ((or (not special) arg)
- (call-interactively
- (if (fboundp 'move-end-of-line) 'move-end-of-line 'end-of-line)))
- ((memq type '(headline inlinetask))
- (let ((pos (point)))
- (beginning-of-line 1)
- (if (looking-at (org-re ".*?\\(?:\\([ \t]*\\)\\(:[[:alnum:]_@#%:]+:\\)?[ \t]*\\)?$"))
- (if (eq special t)
- (if (or (< pos (match-beginning 1)) (= pos (match-end 0)))
- (goto-char (match-beginning 1))
- (goto-char (match-end 0)))
- (if (or (< pos (match-end 0))
- (not (eq this-command last-command)))
- (goto-char (match-end 0))
- (goto-char (match-beginning 1))))
- (call-interactively
- (if (fboundp 'move-end-of-line) 'move-end-of-line 'end-of-line)))))
- ((memq type
- '(center-block comment-block drawer dynamic-block example-block
- export-block item plain-list property-drawer
- quote-block special-block src-block verse-block))
- ;; Never move past the ellipsis.
- (or (eolp) (move-end-of-line 1))
- (when (org-invisible-p2) (backward-char)))
- (t
- (call-interactively
- (if (fboundp 'move-end-of-line) 'move-end-of-line 'end-of-line))))
+ org-special-ctrl-a/e)))
+ (if (or (not special) arg)
+ (call-interactively
+ (if (fboundp 'move-end-of-line) 'move-end-of-line 'end-of-line))
+ (let* ((element (save-excursion (beginning-of-line)
+ (org-element-at-point)))
+ (type (org-element-type element)))
+ (cond
+ ((memq type '(headline inlinetask))
+ (let ((pos (point)))
+ (beginning-of-line 1)
+ (if (looking-at (org-re ".*?\\(?:\\([ \t]*\\)\\(:[[:alnum:]_@#%:]+:\\)?[ \t]*\\)?$"))
+ (if (eq special t)
+ (if (or (< pos (match-beginning 1)) (= pos (match-end 0)))
+ (goto-char (match-beginning 1))
+ (goto-char (match-end 0)))
+ (if (or (< pos (match-end 0))
+ (not (eq this-command last-command)))
+ (goto-char (match-end 0))
+ (goto-char (match-beginning 1))))
+ (call-interactively
+ (if (fboundp 'move-end-of-line) 'move-end-of-line
+ 'end-of-line)))))
+ ((memq type
+ '(center-block comment-block drawer dynamic-block example-block
+ export-block item plain-list property-drawer
+ quote-block special-block src-block verse-block))
+ ;; If element is hidden, `move-end-of-line' would put point
+ ;; after it. Use `end-of-line' to stay on current line.
+ (call-interactively 'end-of-line))
+ (t
+ (call-interactively
+ (if (fboundp 'move-end-of-line) 'move-end-of-line 'end-of-line))))))
(org-no-warnings (and (featurep 'xemacs) (setq zmacs-region-stays t)))))
(define-key org-mode-map "\C-a" 'org-beginning-of-line)
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index fe4bc1c..1426378 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -453,7 +453,7 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/"
(org-test-with-temp-text "#+BEGIN_CENTER\nContents\n#+END_CENTER"
(progn (org-hide-block-toggle)
(org-end-of-line)
- (eolp)))))
+ (eobp)))))
(ert-deftest test-org/forward-element ()
"Test `org-forward-element' specifications."