Browse Source

org.el (org-refile--get-location): New internal function

* org.el (org-refile--get-location): New internal function
using a wider set of possible refile locations.
(org-refile-get-location): Use it.
Bastien Guerry 4 years ago
1 changed files with 13 additions and 4 deletions
  1. 13 4

+ 13 - 4

@@ -11641,6 +11641,17 @@ prefix argument (`C-u C-u C-u C-c C-w')."
   (bookmark-jump "org-refile-last-stored")
   (message "This is the location of the last refile"))
+(defun org-refile--get-location (refloc tbl)
+  "When user refile to REFLOC, find the associated target in TBL.
+Also check `org-refile-target-table'."
+  (car (delq
+	nil
+	(mapcar
+	 (lambda (r) (or (assoc r tbl)
+			 (assoc r org-refile-target-table)))
+	 (list (replace-regexp-in-string "/$" "" refloc)
+	       (replace-regexp-in-string "\\([^/]\\)$" "\\1/" refloc))))))
 (defun org-refile-get-location (&optional prompt default-buffer new-nodes
   "Prompt the user for a refile location, using PROMPT.
@@ -11694,8 +11705,7 @@ this is used for the GOTO interface."
     (setq old-hist org-refile-history)
     (setq answ (funcall cfunc prompt tbl nil (not new-nodes)
 			nil 'org-refile-history (or cdef (car org-refile-history))))
-    (setq pa (or (assoc answ tbl) (assoc (concat answ "/") tbl)))
-    (if pa
+    (if (setq pa (org-refile--get-location answ tbl))
 	  (org-refile-check-position pa)
 	  (when (or (not org-refile-history)
@@ -11712,8 +11722,7 @@ this is used for the GOTO interface."
 	    (setq parent (match-string 1 answ)
 		  child (match-string 2 answ))
-	    (setq parent-target (or (assoc parent tbl)
-				    (assoc (concat parent "/") tbl)))
+	    (setq parent-target (org-refile--get-location parent tbl))
 	    (when (and parent-target
 		       (or (eq new-nodes t)
 			   (and (eq new-nodes 'confirm)