diff options
author | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-11-05 00:58:34 +0100 |
---|---|---|
committer | Nicolas Goaziou <n.goaziou@gmail.com> | 2012-11-05 00:58:34 +0100 |
commit | 5acffad561465ce9706299ffbe847269e1ab32f8 (patch) | |
tree | ce74bb32935fa1cce27f8938986eedd273e6f3f9 | |
parent | 7cdfa64677570049bae9d87aa39b0cfb02d7c60d (diff) | |
parent | f48a8b7bf821b71ef1426ad0cb38d678cc9bb303 (diff) | |
download | org-mode-5acffad561465ce9706299ffbe847269e1ab32f8.tar.gz |
Merge branch 'maint'
-rw-r--r-- | lisp/org.el | 64 | ||||
-rw-r--r-- | testing/lisp/test-org.el | 2 |
2 files changed, 34 insertions, 32 deletions
diff --git a/lisp/org.el b/lisp/org.el index 67e41e5..d944afb 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -21637,37 +21637,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 b0a073a..98957ac 100644 --- a/testing/lisp/test-org.el +++ b/testing/lisp/test-org.el @@ -506,7 +506,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." |