5

Emacsの組織モードで、組織の見出しの下に強調表示されたテキストを自動的に再整理する方法はありますか? つまり、強調表示されたテキストを切り取って、選択した組織見出しの下に自動的に貼り付けますか?

あなたはそれを呼び出すことができますorg-refile-region。に似てorg-refileいますが、サブツリー全体ではなく、現在のドキュメントの任意の見出しの下にある強調表示された領域のみを再ファイル化します。

アップデート:

理想的には、この機能は org-refile によって使用される org-agenda ファイルから独立していて、無関係な見出しが可能なターゲットとして表示されるのを避けることができます。

1. テキストを選択 2. 切り取り 3. 他のウィンドウ 4. 目的のターゲット見出しに移動 5. テキストを貼り付け 6. 他のウィンドウ

提案された新しい関数は、これをより効率的にします: 1. テキストを選択 2. org-refile-region 3. ターゲットを選択

これの最も便利な形式は、現在開いているドキュメントの中からターゲットを選択できるようにすることです。私のユースケースでは、あるバッファからテキストを選択し、別のバッファの組織見出しの中からそれをリフィルします。つまり、あるウィンドウに表示されたソース ドキュメントからテキストを移動し、別のウィンドウに表示されたターゲット ドキュメントの階層内のターゲットにリフィルします。 :

4

1 に答える 1

3

emacs 24.1以降を使用している場合は、試すことができます

(setq org-refile-active-region-within-subtree t)

これはほとんどあなたが望むことをしますが、テキストを強調表示した行(emacs用語は「アクティブ領域」です)を見出しに変えます。

強調表示したテキストを別の見出しに移動したい場合は、org-mode を拡張する必要があります。幸いなことに、組織は必要なツールを提供します。次に例を示します。

(defvar org-refile-region-format "\n%s\n")

(defvar org-refile-region-position 'top
  "Where to refile a region. Use 'bottom to refile at the
end of the subtree. ")

(defun org-refile-region (beg end copy)
  "Refile the active region.
If no region is active, refile the current paragraph.
With prefix arg C-u, copy region instad of killing it."
  (interactive "r\nP")
  ;; mark paragraph if no region is set
  (unless (use-region-p)
    (setq beg (save-excursion
                (backward-paragraph)
                (skip-chars-forward "\n\t ")
                (point))
          end (save-excursion
                (forward-paragraph)
                (skip-chars-backward "\n\t ")
                (point))))
  (let* ((target (save-excursion (org-refile-get-location)))
         (file (nth 1 target))
         (pos (nth 3 target))
         (text (buffer-substring-no-properties beg end)))
    (unless copy (kill-region beg end))
    (deactivate-mark)
    (with-current-buffer (find-file-noselect file)
      (save-excursion
        (goto-char pos)
        (if (eql org-refile-region-position 'bottom)
            (org-end-of-subtree)
          (org-end-of-meta-data-and-drawers))
        (insert (format org-refile-region-format text))))))

org-refile-get-location組織のリファイリング メカニズムを適用し、ファイルと場所を抽出するために使用します。次に、その場所に移動して、コピーしたテキストを挿入します。便宜上、2 つの変数が追加されました。

org-refile-targets考慮するファイルを制御できます。たとえば、次のようになります。

nil  ;; only the current file
'((org-agenda-files :maxlevel . 2)) ;; all agenda files, 1st/2nd level
'((org-files-list :maxlevel . 4)) ;; all agenda and all open files
'((my-org-files-list :maxlevel . 4)) ;; all files returned by `my-org-files-list'

現在開いている組織バッファーへのリファイリングを制限するには、関数を定義します。

(defun my-org-files-list ()
  (mapcar (lambda (buffer)
            (buffer-file-name buffer))
          (org-buffer-list 'files t)))

そして、どちらか

(setq org-refile-targets '((my-org-files-list :maxlevel . 4)))

または使用

M-x customize-option <ret> org-refile-targets

「値メニュー」から「関数」を選択し、入力しますmy-org-files-list

于 2014-08-12T10:57:01.553 に答える