在组织模式下,如何保护星星不被删除?

时间:2013-08-20 09:16:54

标签: emacs org-mode aquamacs

我在org-indent-mode中使用org-mode,这意味着所有的星星都被隐藏了,但是级别会保留缩进,从而产生轮廓类型的效果。

当我编辑时,我似乎总是意外删除星号和文本之间的空格。这意味着:

搞得一团糟,变成了这个:

有时甚至更糟糕的是,我甚至删除了空间和一个或多个星星。然后我必须弄清楚我在哪里并尝试重新输入正确数量的星星让我回到正确的水平,这是一种痛苦。

这个问题可能违背了组织模式的精神,但有没有办法“保护”星星和它们之后的空间,这样当我多次点击 delete 时,它会发送我回到上一行文本而不是删除星星?

1 个答案:

答案 0 :(得分:3)

以下是代码:

(defun new-org-delete-backward-char (N)
  (interactive "p")
  (if (not (looking-back "[*]+ "))
      (org-delete-backward-char N)
    (previous-line)
    (end-of-line)))

(add-hook 
 'org-mode-hook
 (lambda ()
   (define-key org-mode-map (kbd "DEL") 
     'new-org-delete-backward-char)))
在我定义之前,我也弄乱了我的轮廓 org-speed-commands-user执行插入向上,向下等操作。 也许你想尝试一下。此外,这非常有用:

(define-key org-mode-map (kbd "C-a")
              (lambda()(interactive)
                (if (looking-at "^[^*]")
                    (re-search-backward "^*")
                  (org-beginning-of-line))))

一旦你已经开始,它会带你进入标题的开头 在行的开头,按 C-a

UPD

此版本具有删除区域的配置并转到该行的末尾:

(defun new-org-delete-backward-char (N)
  (interactive "p")
  (cond ((region-active-p)
         (delete-region
          (region-beginning)
          (region-end)))
        ((looking-back "[*]+ ")
         (previous-line)
         (end-of-line))
        (t
         (org-delete-backward-char N))))