summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Goaziou <mail@nicolasgoaziou.fr>2017-08-31 23:14:04 +0200
committerNicolas Goaziou <mail@nicolasgoaziou.fr>2017-08-31 23:14:04 +0200
commit1654a5a98ab28fea3b74536e423bfffddfd86531 (patch)
tree49e0f6b7aecbf26f37c7437b2e1064ac4e53a983
parent18a48b5861a6d90e020d4d0b47cb15654e85d7a7 (diff)
downloadorg-mode-1654a5a98ab28fea3b74536e423bfffddfd86531.tar.gz
Fix `:jump-to-captured' when refiling a capture target
* lisp/org-capture.el (org-capture-refile): Call `org-capture-goto-last-stored' at the appropriate time. * testing/lisp/test-org-capture.el (test-org-capture/refile): Add test. Reported-by: "Raymond Zeitler" <zeitra@yahoo.com> <http://lists.gnu.org/archive/html/emacs-orgmode/2017-08/msg00704.html>
-rw-r--r--lisp/org-capture.el11
-rw-r--r--testing/lisp/test-org-capture.el18
2 files changed, 25 insertions, 4 deletions
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index 4320730..1da5c61 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -818,13 +818,17 @@ for `entry'-type templates"))
(let* ((base (or (buffer-base-buffer) (current-buffer)))
(pos (make-marker))
(org-capture-is-refiling t)
- (kill-buffer (org-capture-get :kill-buffer 'local)))
+ (kill-buffer (org-capture-get :kill-buffer 'local))
+ (jump-to-captured (org-capture-get :jump-to-captured 'local)))
;; Since `org-capture-finalize' may alter buffer contents (e.g.,
;; empty lines) around entry, use a marker to refer to the
;; headline to be refiled. Place the marker in the base buffer,
;; as the current indirect one is going to be killed.
(set-marker pos (save-excursion (org-back-to-heading t) (point)) base)
- (org-capture-put :kill-buffer nil)
+ ;; `org-capture-finalize' calls `org-capture-goto-last-stored' too
+ ;; early. We want to wait for the refiling to be over, so we
+ ;; control when the latter function is called.
+ (org-capture-put :kill-buffer nil :jump-to-captured nil)
(unwind-protect
(progn
(org-capture-finalize)
@@ -833,7 +837,8 @@ for `entry'-type templates"))
(org-with-wide-buffer
(goto-char pos)
(call-interactively 'org-refile))))
- (when kill-buffer (kill-buffer base)))
+ (when kill-buffer (kill-buffer base))
+ (when jump-to-captured (org-capture-goto-last-stored)))
(set-marker pos nil))))
(defun org-capture-kill ()
diff --git a/testing/lisp/test-org-capture.el b/testing/lisp/test-org-capture.el
index 7b022b1..4d5dfb7 100644
--- a/testing/lisp/test-org-capture.el
+++ b/testing/lisp/test-org-capture.el
@@ -127,7 +127,23 @@
(buffer-substring-no-properties
(line-beginning-position)
(line-end-position))))))
- (catch :return (org-capture-refile))))))))
+ (catch :return (org-capture-refile)))))))
+ ;; When the entry is refiled, `:jump-to-captured' moves point to the
+ ;; refile location, not the initial capture target.
+ (should
+ (org-test-with-temp-text-in-file "* Refile target"
+ (let ((file1 (buffer-file-name)))
+ (org-test-with-temp-text-in-file "* A"
+ (let* ((file2 (buffer-file-name))
+ (org-capture-templates
+ `(("t" "Todo" entry (file+headline ,file2 "A")
+ "** H1 %?" :jump-to-captured t))))
+ (org-capture nil "t")
+ (cl-letf (((symbol-function 'org-refile-get-location)
+ (lambda (&rest args)
+ (list (file-name-nondirectory file1) file1 nil nil))))
+ (org-capture-refile)
+ (list file1 file2 (buffer-file-name)))))))))
(provide 'test-org-capture)