gpt4 book ai didi

emacs - 在 Emacs 组织模式中,如何重新归档组织标题下突出显示的文本?

转载 作者:行者123 更新时间:2023-12-02 09:37:31 25 4
gpt4 key购买 nike

在 Emacs 组织模式中,有没有办法自动重新归档组织标题下突出显示的文本?即剪切突出显示的文本并将其自动粘贴到我选择的组织标题下?

您可以将其称为org-refile-region。与 org-refile 类似,但不是重新归档整个子树,而是仅重新归档当前文档中任何标题下的突出显示区域。

更新:

理想情况下,此功能应独立于 org-refile 使用的 org-agenda 文件,以避免将不相关的标题显示为可能的目标。

目前,这可以通过执行以下操作来实现:1.选择文字2. 切割3.其他窗口4. 导航至所需的目标标题5.粘贴文字6.其他窗口

提议的新函数将使这变得更加高效:1.选择文字2. 组织重新文件区域3.选择目标

最有用的形式是允许您从任何当前打开的文档中选择目标。我的用例涉及从一个缓冲区中选择文本并从另一个缓冲区中的组织标题中重新归档它,即从一个窗口中显示的源文档移动文本并重新归档到另一个窗口中显示的目标文档的层次结构内的目标,如下所示:

最佳答案

如果您使用的是 emacs 24.1 或更高版本,可以尝试

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

这几乎可以满足您的要求,但是将突出显示文本的行(emacs 术语是“事件区域”)转换为标题。

如果您想将突出显示的文本移动到另一个标题,则必须扩展 org-mode。幸运的是,org 提供了您需要的工具。这是一个例子:

(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 来应用 org 重新归档机制并提取文件和位置。然后我们转到该位置并插入复制的文本。为了方便起见添加了两个变量。

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

关于emacs - 在 Emacs 组织模式中,如何重新归档组织标题下突出显示的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25256304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com