2012-03-29 71 views
4

我想在组织模式缓冲区中使用mark-paragraph(也用于向前/向后段落移动),方法与其他主要模式相同,即:标记由空行分隔的连续区域。这也应该适用于标题,列表项,以'#'开头的行等。 - 即我希望编辑段落的目的是将所有内容都视为普通文本。更改段落的定义(例如,在组织模式下)

这可能吗?

+0

我可以通过与'M-{'或'M-}'段落移动。这是不是说它已经像那样工作了(除了添加一个列表项作为段落)? – suvayu 2012-03-29 12:58:17

+0

正确 - 我的标题是标题,列表项和注释行也应该像普通文本一样对待。我已经编辑了相应的问题。 – user673592 2012-03-29 14:50:13

回答

4

见变量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) 

编辑:不可否认,组织模式可能取决于其款定义的不仅仅是互动的标志和移动更多,所以这里是定制款定义这些命令更有针对性的方式交互称为只有当使用他们的键绑定。

(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) 
+0

对不起,我花了很多时间跟踪了很多工作。这是太棒了!感谢您为解答您的解决方案和护理! – user673592 2012-04-13 09:06:26

1

您可以尝试自定义paragraph-start变量。我不知道什么 将是适当的位置,组织如您在下面的文档字符串转述看到它设置的东西相当精细的 。将其设置为默认的 可能会有效,或者您可以尝试use-hard-newlines,如下面的引用中所述。

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

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

原始值是 “\˚F\ | [] * $”

在缓冲器coding.org本地;全局值是“\ f \ | [] * $”

如果该变量的值 满足谓词`stringp',则该变量作为文件局部变量是安全的。

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

这是匹配左边距的文本,不一定是 行的开头,所以它不应该使用“^”作为锚点。这 确保款功能将一个区域由边距设置缩进文本的 内效果一样好。

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

如果变量'use-hard-newlines'非零,那么只有跟在 硬换行符后面的行被认为是匹配的。

+0

谢谢!这是正确的想法。我已经接受了phil解决方案,只是为了更明确。 – user673592 2012-04-13 09:07:47

相关问题