Adam Spiers <orgm...@adamspiers.org> wrote: > Forgive me if this has already been implemented, but I couldn't see > it...
I don't know of a command that does this. > I'm looking for something similar to the "extract method" operation > which refactoring IDEs can perform on code. You would select a > headline (or maybe even region), hit `refile-and-link', and then after > the normal refiling, a link to the refiled section would be inserted > in the place where the refiled section previously lived. > > Thoughts? The last refile location is stored in org-bookmark-names-plist. The (lightly tested) function below uses that information to create a link to the refiled heading. #+begin_src emacs-lisp (defun org-refile-and-link () "Refile heading, adding a link to the new location. Prefix arguments are interpreted by `org-refile'." (interactive) (when (member current-prefix-arg '(3 (4) (16))) (user-error "Linking is incompatible with that prefix argument")) (let ((heading (org-get-heading t t)) (orig-file (buffer-file-name))) (call-interactively #'org-refile) (let* ((refile-file (bookmark-get-filename (assoc (plist-get org-bookmark-names-plist :last-refile) bookmark-alist))) (same-file (string= orig-file refile-file)) (link (if same-file (concat "*" heading) (concat refile-file "::*" heading))) (desc heading)) (open-line 1) (insert (org-make-link-string link desc))))) #+end_src -- Kyle