tôi cũng muốn có một cách cho org-refile
để gửi lại thông báo một cách dễ dàng với một cây con, vì vậy tôi đã viết một số mã và khái quát hóa nó để nó sẽ thiết lập một mục tiêu trước mắt tùy ý bất cứ nơi nào (không chỉ trong cùng một tập tin).
sử dụng cơ bản là để di chuyển đâu đó trong Tree B
và gõ Cc Cx Cm để đánh dấu mục tiêu cho refiling, sau đó di chuyển đến mục trong Tree A
mà bạn muốn gửi lại thông báo và gõ Cc Cw mà ngay lập tức sẽ gửi lại thông báo vào vị trí mục tiêu bạn đặt trong Tree B
mà không nhắc bạn, trừ khi bạn gọi là org-refile-immediate-target
với tiền tố arg Cu Cc Cx Cm.
Lưu ý rằng nếu bạn bấm Cc Cw liên tiếp nhanh chóng để gửi lại thông báo nhiều mục nó sẽ giữ gìn trật tự của các mục của bạn ngay cả khi org-reverse-note-order
được thiết lập để t
, nhưng bạn có thể tắt nó đi để tuân thủ cài đặt của org-reverse-note-order
với một tiền tố kép arg Cu Cu Cc Cx Cm.
(defvar org-refile-immediate nil
"Refile immediately using `org-refile-immediate-target' instead of prompting.")
(make-local-variable 'org-refile-immediate)
(defvar org-refile-immediate-preserve-order t
"If last command was also `org-refile' then preserve ordering.")
(make-local-variable 'org-refile-immediate-preserve-order)
(defvar org-refile-immediate-target nil)
"Value uses the same format as an item in `org-refile-targets'."
(make-local-variable 'org-refile-immediate-target)
(defadvice org-refile (around org-immediate activate)
(if (not org-refile-immediate)
ad-do-it
;; if last command was `org-refile' then preserve ordering
(let ((org-reverse-note-order
(if (and org-refile-immediate-preserve-order
(eq last-command 'org-refile)) nil org-reverse-note-order)))
(ad-set-arg 2 (assoc org-refile-immediate-target (org-refile-get-targets)))
(prog1 ad-do-it
(setq this-command 'org-refile)))))
(defadvice org-refile-cache-clear (after org-refile-history-clear activate)
(setq org-refile-targets (default-value 'org-refile-targets))
(setq org-refile-immediate nil)
(setq org-refile-immediate-target nil)
(setq org-refile-history nil))
;;;###autoload
(defun org-refile-immediate-target (&optional arg)
"Set current entry as `org-refile' target.
Non-nil turns off `org-refile-immediate', otherwise `org-refile'
will immediately refile without prompting for target using most
recent entry in `org-refile-targets' that matches
`org-refile-immediate-target' as the default."
(interactive "P")
(if (equal arg '(16))
(progn
(setq org-refile-immediate-preserve-order
(not org-refile-immediate-preserve-order))
(message "Order preserving is turned: %s"
(if org-refile-immediate-preserve-order
"on" "off")))
(setq org-refile-immediate (unless arg t))
(make-local-variable 'org-refile-targets)
(let* ((components (org-heading-components))
(level (first components))
(heading (nth 4 components))
(string (substring-no-properties heading)))
(add-to-list 'org-refile-targets
(append (list (buffer-file-name))
(cons :regexp
(format "^%s %s$"
(make-string level ?*)
string))))
(setq org-refile-immediate-target heading))))
(define-key org-mode-map "\C-c\C-x\C-m" 'org-refile-immediate-target)
Thật khó để tìm một chìa khóa đó là miễn phí trên Cc Cx tiền tố, vì vậy tôi sử dụng m với mnemonic i * mm * ediate
Để cho cây nhánh phụ hoạt động (C-c C-w) cần thụt lề của bạn bằng 2. ví dụ: *** SubtreeA1. Tôi đã thiết lập indents của tôi như của bạn và không thể làm cho nó hoạt động cho đến khi tôi nhận ra điều này. – 79E09796
[Câu hỏi này] (http://stackoverflow.com/questions/22200312/refile-from-one-file-to-other) có thể hữu ích. Bạn có thể (tạm thời) thêm tệp hiện tại vào 'target-orgile-target' với ': maxlevel' of> = 2 set bất cứ khi nào bạn refile. Tuy nhiên, lisp-fu của tôi chưa đủ mạnh để giúp bạn với điều đó. – Alex