Fix: my-org-kill-by-tag miss some subtree as org-scan-tags assume that buffer unchanged during processing.
authorOleksandr Gavenko <gavenkoa@gmail.com>
Wed, 07 Jan 2015 00:01:23 +0200
changeset 1188 bdb5c65b3213
parent 1187 81ffdea5bfb1
child 1189 dd8bad2fe8ae
Fix: my-org-kill-by-tag miss some subtree as org-scan-tags assume that buffer unchanged during processing.
.emacs-my
--- a/.emacs-my	Sun Jan 04 01:58:14 2015 +0200
+++ b/.emacs-my	Wed Jan 07 00:01:23 2015 +0200
@@ -1486,13 +1486,15 @@
 (defun my-org-kill-by-tag (tag)
   "Put all entries that matches TAG from current org-file to `kill-ring'."
   (interactive (list (completing-read "Enter tag: " (org-get-buffer-tags))))
-  (kill-new "")
-  (org-scan-tags
-   (lambda ()
-     (let ( (last-command 'kill-region) )
-       (org-cut-subtree)))
-   '(member tag tags-list)
-   nil) )
+  (let ( rs (last-command 'kill-region) )
+    (setq rs (org-scan-tags
+              (lambda ()
+                (org-mark-subtree)
+                (list (point) (mark)))
+              '(member tag tags-list) nil))
+    (kill-new "")
+    (dolist (r (reverse rs))            ; Kill from the end so upcoming regions still valid.
+      (apply #'kill-region r))))
 
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (message "TODO, XXX, FIXME highlight")