如何在Emacs org-mode中突出显示当前子树?

8
如何使当前子树更容易识别?
加粗“行号”可以,或者仅下划线整个当前子树的文本也可以。
我的意思是,有人能帮忙给我一些elisp代码吗?比如实现这个功能(例如下划线整个子树)?
我不能展示下划线,所以我将示例加粗:
- [1] 这是一个子树 一些文本 - [1.1] 子树2 和一些文本 -- [1.1.1] 子树hello - [2] 祝你有美好的一天

1
这个关于面包屑导航的讨论帖是否满足了您的需求? - Nikana Reklawyks
你提到的很好,谢谢。但是我想要的是在光标下选择整个子树并且给子树的所有文本加下划线。 - ryrd
哦,好的,我误解了。你也想要子节吗?我会把你的“n°2”称为1.1,但是你是否想突出显示1.1.1和1.1.2呢? - Nikana Reklawyks
M-x org-narrow-to-subtree 绑定到 C-x n s,这个有用吗? - Nikana Reklawyks
嗨,很抱歉这么晚才回复你。我只想要“n°1.1”,不要“n°1”和1.1.1、1.1.2,只要n°1。而且我经常跳到子树中,所以“org-narrow-to-subtree”不适合我。但还是谢谢你。;-) - ryrd
1个回答

2

加载以下定义

(defun org-subtree-highlight-find-overlay (p1 p2)
  "Find an overlay with property 'org-subtree-highlight-overlay"
  (defun org-subtree-highlight-find-overlay01 (overlays)
    (if overlays
    (let ((ov (car overlays)))
      (if (overlay-get ov 'org-subtree-highlight-overlay)
          ov
        (org-subtree-highlight-find-overlay01 (cdr overlays))))
      nil))
  (org-subtree-highlight-find-overlay01 (overlays-in p1 p2)))

(defun org-subtree-highlight-toggle ()
  "Toggle subtree highlighting"
  (interactive)
  (save-excursion
    (let* ((p1 (progn (org-back-to-heading t) (point)))
       (p2 (progn (outline-next-visible-heading 1)
              (if (and (org-at-heading-p) (not (eobp))) (backward-char 1))
              (point)))
       (ov (org-subtree-highlight-find-overlay p1 p2)))
      (if ov
      (delete-overlay ov)
    (setq ov (make-overlay p1 p2))
    (overlay-put ov 'org-subtree-highlight-overlay t)
    ;; set a format for the subtree (can be also 'bold)
    (overlay-put ov 'font-lock-face 'underline)))))

;; keybindin example
(add-hook 'org-mode-hook
      (lambda ()
        (local-set-key "\C-c\C-h" 'org-subtree-highlight-toggle)))

结果应该是这样的:

emacs 截图


(注意:本次翻译保留了原文中的HTML标签)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接