emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] Bug: Saving and killing buffers with org-capture-refile and multiple


From: Gustavo Barros
Subject: [O] Bug: Saving and killing buffers with org-capture-refile and multiple agenda files [9.2.4 (9.2.4-11-g1c3eae-elpaplus @ /home/gustavo/.emacs.d/elpa/org-plus-contrib-20190722/)]
Date: Sun, 28 Jul 2019 11:08:21 -0300
User-agent: mu4e 1.2.0; emacs 26.2

Hi all,

I document here some behaviors of =org-capture-refile= which occur when settings involve multiple files as refile targets, with respect to saving and killing buffers. Most of them are designed to show some more integration between =org-capture= and =org-capture-refile= would be welcome, and one of them actually
does not correspond to documented behavior.

Consider the following scenario. We have two agenda files, one for work,
another for personal tasks. They have the following content:

#+name: ~/org/home.org
#+begin_src org
,* Home tasks

,* Capture

#+end_src

#+name: ~/org/work.org
#+begin_src org
,* Work tasks

#+end_src

We start ~emacs -Q~, and do some basic setup:

#+begin_src emacs-lisp
(package-initialize)
(global-set-key (kbd "C-c c") 'org-capture)
(setq org-agenda-files
     '("~/org/home.org"
       "~/org/work.org"))
(setq org-refile-targets
     '((org-agenda-files :maxlevel . 2)))
(setq org-capture-templates
     '(("t" "TODO entry" entry
        (file+headline "~/org/home.org" "Capture")
        "* TODO %?"
        :kill-buffer t)))
#+end_src

In particular, we are not setting the =:no-save= flag, so we expect the default
behavior of buffers getting saved.

Now, we start a capture of an arbitrary task, and leave the capture process by
refiling it to the heading =* Home tasks=.

If we then list-buffers ("C-x C-b"), we find that =home.org= has been killed as expected, given the template's =:kill-buffer= flag. But =work.org=, which was
opened to get the refile targets, is still there.

Now we do the same operation, but refile it to the heading =* Work tasks=
instead.

If we then list-buffers again, we find that =work.org= is not only trailing, but
has been left unsaved.

Now we first visit =home.org= and start a capture and end it refiling to the
heading =* Work tasks=.

Notice here in particular that =home.org= is killed, even though it was being
visited before the capture process started.  This does not correspond to
documented behavior of =:kill-buffer=.

Summing up:
1. When refiling anywhere, all agenda files (as we set them as refile targets) are visited to supply refile targets, so any of those which are not the base of a capture template are left open, even when option :kill-buffer is
  set.
2. In this same case, if the refile operation is done to a file which is not the capture base file, the other file is left both modified and trailing. 3. In this same case, even if =:kill-buffer= is not set, the other file is left
  unsaved after refile.
4. Furthermore, when =:kill-buffer= is set, when leaving the capture operation with =org-capture-refile= the capture base file is killed independently of whether it was opened before or not (contrary to what is stated in the
  documentation about it).

I understand, of course, that the refile operation is an independent one which is layered upon =org-capture=. So items 1-3 there would, in this sense be "expected". But, I meant to show with these cases, which I don’t think can be labeled "corner" ones, that some further integration between =org-capture= and =org-capture-refile= would be welcome. Item 4, is indeed a behavior that does not correspond to documentation and, to my understanding, should be considered
a bug.

Best regards,
Gustavo Barros.



Emacs : GNU Emacs 26.2 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
of 2019-04-19
Package: Org mode version 9.2.4 (9.2.4-11-g1c3eae-elpaplus @ /home/gustavo/.emacs.d/elpa/org-plus-contrib-20190722/)

current state:
==============
(setq
org-src-mode-hook '(org-src-babel-configure-edit-buffer org-src-mode-configure-edit-buffer)
org-metadown-hook '(org-babel-pop-to-session-maybe)
org-clock-out-hook '(org-clock-remove-empty-clock-drawer)
org-refile-targets '((org-agenda-files :maxlevel . 2))
org-agenda-files '("~/org/home.org" "~/org/work.org")
org-mode-hook '(#[0 "\300\301\302\303\304$\207" [add-hook change-major-mode-hook org-show-all append local] 5]
                 #[0 "\300\301\302\303\304$\207"
[add-hook change-major-mode-hook org-babel-show-result-all append local] 5] org-babel-result-hide-spec org-babel-hide-all-hashes org-eldoc-load)
org-archive-hook '(org-attach-archive-delete-maybe)
org-confirm-elisp-link-function 'yes-or-no-p
org-agenda-before-write-hook '(org-agenda-add-entry-text)
org-metaup-hook '(org-babel-load-in-session-maybe)
org-bibtex-headline-format-function #[257 "\300\236A\207" [:title] 3 "\n\n(fn ENTRY)"]
org-babel-pre-tangle-hook '(save-buffer)
org-tab-first-hook '(org-babel-hide-result-toggle-maybe org-babel-header-arg-expand) org-src-lang-modes '(("arduino" . arduino) ("redis" . redis) ("php" . php) ("C" . c) ("C++" . c++) ("asymptote" . asy) ("bash" . sh) ("beamer" . latex) ("calc" . fundamental) ("cpp" . c++) ("ditaa" . artist) ("dot" . fundamental) ("elisp" . emacs-lisp) ("ocaml" . tuareg) ("screen" . shell-script) ("shell" . sh) ("sqlite" . sql))
org-occur-hook '(org-first-headline-recenter)
org-cycle-hook '(org-cycle-hide-archived-subtrees org-cycle-show-empty-lines
                  org-optimize-window-after-visibility-change)
org-speed-command-hook '(org-speed-command-activate org-babel-speed-command-activate)
org-confirm-shell-link-function 'yes-or-no-p
org-link-parameters '(("id" :follow org-id-open) ("eww" :follow eww :store org-eww-store-link) ("rmail" :follow org-rmail-open :store org-rmail-store-link) ("mhe" :follow org-mhe-open :store org-mhe-store-link) ("irc" :follow org-irc-visit :store org-irc-store-link :export org-irc-export) ("info" :follow org-info-open :export org-info-export :store org-info-store-link) ("gnus" :follow org-gnus-open :store org-gnus-store-link) ("docview" :follow org-docview-open :export org-docview-export :store
                        org-docview-store-link)
("bibtex" :follow org-bibtex-open :store org-bibtex-store-link) ("bbdb" :follow org-bbdb-open :export org-bbdb-export :complete org-bbdb-complete-link
                        :store org-bbdb-store-link)
("w3m" :store org-w3m-store-link) ("file+sys") ("file+emacs") ("elfeed" :follow elfeed-link-open :store elfeed-link-store-link) ("doi" :follow org--open-doi-link) ("elisp" :follow org--open-elisp-link)
                       ("file" :complete org-file-complete-link)
("ftp" :follow (lambda (path) (browse-url (concat "ftp:" path))))
                       ("help" :follow org--open-help-link)
("http" :follow (lambda (path) (browse-url (concat "http:" path)))) ("https" :follow (lambda (path) (browse-url (concat "https:" path)))) ("mailto" :follow (lambda (path) (browse-url (concat "mailto:"; path)))) ("news" :follow (lambda (path) (browse-url (concat "news:"; path))))
                       ("shell" :follow org--open-shell-link))
org-capture-templates '(("t" "TODO entry" entry (file+headline "~/org/home.org" "Capture") "* TODO %?"
                          :kill-buffer t)
                         )
)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]