diff options
author | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-06-02 09:21:44 +0200 |
---|---|---|
committer | Nicolas Goaziou <mail@nicolasgoaziou.fr> | 2017-06-02 09:21:44 +0200 |
commit | 57d0a7453d0386f3f1425fc5319b2f42fca16e42 (patch) | |
tree | 13988bfc7a99bf430aaaeac48b384b457bb277b6 | |
parent | 2b95b40b319c475ca50b6ecbe8abd47a6e74a311 (diff) | |
download | org-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.el | 70 |
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." |