summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2017-06-02 09:21:44 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-06-02 09:21:44 +0200
commit57d0a7453d0386f3f1425fc5319b2f42fca16e42 (patch)
tree13988bfc7a99bf430aaaeac48b384b457bb277b6
parent2b95b40b319c475ca50b6ecbe8abd47a6e74a311 (diff)
downloadorg-mode-57d0a7453d0386f3f1425fc5319b2f42fca16e42.tar.gz
org-capture: Fix visibility of planning line in capture buffer
* lisp/org-capture.el (org-capture-place-entry): Make sure planning line is visible when added in a narrowed capture buffer. Refactor code. Reported-by: Detlef Steuer <steuer@unibw-hamburg.de> <http://permalink.gmane.org/gmane.emacs.orgmode/113756>
-rw-r--r--lisp/org-capture.el70
1 files changed, 30 insertions, 40 deletions
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 755bf73..63e23cc 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -1058,48 +1058,38 @@ may have been stored before."
(defun org-capture-place-entry ()
"Place the template as a new Org entry."
- (let* ((txt (org-capture-get :template))
- (reversed (org-capture-get :prepend))
- (target-entry-p (org-capture-get :target-entry-p))
- level beg end)
-
- (and (org-capture-get :exact-position)
- (goto-char (org-capture-get :exact-position)))
+ (let ((reversed? (org-capture-get :prepend))
+ level)
+ (when (org-capture-get :exact-position)
+ (goto-char (org-capture-get :exact-position)))
(cond
- ((not target-entry-p)
- ;; Insert as top-level entry, either at beginning or at end of
- ;; file.
- (setq level 1)
- (if reversed
- (progn (goto-char (point-min))
- (or (org-at-heading-p)
- (outline-next-heading)))
- (goto-char (point-max))
- (or (bolp) (insert "\n"))))
- (t
- ;; Insert as a child of the current entry
- (and (looking-at "\\*+")
- (setq level (- (match-end 0) (match-beginning 0))))
- (setq level (org-get-valid-level (or level 1) 1))
- (if reversed
- (progn
- (outline-next-heading)
- (or (bolp) (insert "\n")))
- (org-end-of-subtree t nil)
- (or (bolp) (insert "\n")))))
+ ;; Insert as a child of the current entry.
+ ((org-capture-get :target-entry-p)
+ (setq level (org-get-valid-level
+ (if (org-at-heading-p) (org-outline-level) 1)
+ 1))
+ (if reversed? (outline-next-heading) (org-end-of-subtree t)))
+ ;; Insert as a top-level entry at the beginning of the file.
+ (reversed?
+ (goto-char (point-min))
+ (unless (org-at-heading-p) (outline-next-heading)))
+ ;; Otherwise, insert as a top-level entry at the end of the file.
+ (t (goto-char (point-max))))
+ (unless (bolp) (insert "\n"))
(org-capture-empty-lines-before)
- (setq beg (point))
- (org-capture-verify-tree txt)
- (org-paste-subtree level txt 'for-yank)
- (org-capture-empty-lines-after)
- (org-capture-position-for-last-stored beg)
- (outline-next-heading)
- (setq end (point))
- (org-capture-mark-kill-region beg (1- end))
- (org-capture-narrow beg (1- end))
- (if (or (re-search-backward "%\\?" beg t)
- (re-search-forward "%\\?" end t))
- (replace-match ""))))
+ (let ((beg (point))
+ (template (org-capture-get :template)))
+ (org-capture-verify-tree template)
+ (org-paste-subtree level template 'for-yank)
+ (org-capture-empty-lines-after)
+ (org-capture-position-for-last-stored beg)
+ (unless (org-at-heading-p) (outline-next-heading))
+ (let ((end (point)))
+ (org-capture-mark-kill-region beg end)
+ (org-capture-narrow beg end)
+ (when (or (re-search-backward "%\\?" beg t)
+ (re-search-forward "%\\?" end t))
+ (replace-match ""))))))
(defun org-capture-place-item ()
"Place the template as a new plain list item."