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

时间:2012-03-29 10:26:15

标签: emacs elisp org-mode

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

这可能吗?

2 个答案:

答案 0 :(得分: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)

编辑:不可否认,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)

答案 1 :(得分:1)

您可以尝试自定义paragraph-start变量。我不确定 在这里适合的是,org将它设置为非常复杂的东西 正如您在下面引用的docstring中看到的那样。将其设置为默认值 可能会有效,或者您可以尝试use-hard-newlines,如下面引用中所述。

  

paragraph-start是`paragraphs.el'中定义的变量。

     

它的价值是   “\ f \ | [] $ \ | \ + \ | [] #\ | \([] \([ - +] \ | \(\([ 0-9] + \)[。)] \)\)\ | [] + \ * \)\([] + \ | $ \)\ | [] * [:|] \ | \ $ \ $ \ | \\\(开始\ |端\ | [] [] \)“

     

原始值为“\ f \ | [] * $”

     

本地缓冲区编码网站;全球价值是“\ f \ | [] * $”

     

如果该变量的值为此文件本地变量,则此变量是安全的     满足谓词`stringp'。

     

文档:   Regexp用于开始行的开头或分隔段落。   此正则表达式应匹配分隔段落的行   并且还应匹配开始段落的行   (并且是该​​段的一部分)。

     

这与左边距处的文本匹配,但不一定如此   该行的开头,所以它永远不应该使用“^”作为锚点。这个   确保段落功能在区域内同样有效   通过边距设置缩进的文本。

     

变量`paragraph-separate'指定如何区分   从分隔它们的行开始段落的行。

     

如果变量`use-hard-newlines'是非零的,那么只有a后面的行   硬新线被认为匹配。