更改段落的定义(例如,在组织模式下)

use*_*592 5 emacs elisp org-mode

我想以mark-paragraph与其他主要模式相同的方式在组织模式缓冲区中使用(也用于前向/后向段落移动),即标记由空行分隔的连续区域.这也适用于标题,列表项,以"#"开头的行等. - 即我希望为了段落编辑的目的,将所有内容视为常规文本.

这可能吗?

phi*_*ils 5

见变量paragraph-startparagraph-separate,可能还有use-hard-newlines这是关系(但可能不会在这种情况下,实际上是相关的)功能.

(defun use-default-paragraph-delimiters ()
  (setq paragraph-start (default-value 'paragraph-start)
        paragraph-separate (default-value 'paragraph-separate)))

(add-hook 'org-mode-hook 'use-default-paragraph-delimiters)
Run Code Online (Sandbox Code Playgroud)

编辑:不可否认,org-mode可能依赖于其段落定义,而不仅仅是交互式标记和移动,因此这里有一种更有针对性的方法,只有在使用其键绑定以交互方式调用时才能自定义这些命令的段落定义.

(defmacro with-default-paragraph-definition (&rest body)
  "Evaluate body forms using the default definition of a paragraph."
  `(let ((paragraph-start (default-value 'paragraph-start))
         (paragraph-separate (default-value 'paragraph-separate)))
     ,@body))

(defalias 'my-org-mark-paragraph 'mark-paragraph)
(defadvice my-org-mark-paragraph 
  (around my-org-mark-paragraph-advice activate)
  (with-default-paragraph-definition ad-do-it))

(defalias 'my-org-forward-paragraph 'forward-paragraph)
(defadvice my-org-forward-paragraph
  (around my-org-forward-paragraph-advice activate)
  (with-default-paragraph-definition ad-do-it))

(defalias 'my-org-backward-paragraph 'backward-paragraph)
(defadvice my-org-backward-paragraph
  (around my-org-backward-paragraph-advice activate)
  (with-default-paragraph-definition ad-do-it))

(defun my-org-paragraph-overrides ()
  "Use the default paragraph definitions in org-mode
        when marking or moving by paragraph."
  (local-set-key [remap mark-paragraph] 'my-org-mark-paragraph)
  (local-set-key [remap forward-paragraph] 'my-org-forward-paragraph)
  (local-set-key [remap backward-paragraph] 'my-org-backward-paragraph))

(add-hook 'org-mode-hook 'my-org-paragraph-overrides)
Run Code Online (Sandbox Code Playgroud)