之前我用 spacemacs 的 org mode 配置, 光标放在一个 heading 上, echo area 就会显示这个 heading 的所有 parent heading. 比如 /a/b/c/d/e. 后来我自己不知道做了什么设置以后, 就没这个效果了, 想问问大家知道这个效果是咋弄出来的么?
这个应该不难实现吧
(defun test/show-heading-level ()
(interactive)
(let ((parent-level (- (org-outline-level) 1))
(current-heading-path (org-entry-get nil "ITEM")))
(while (> parent-level 0)
(outline-up-heading 1)
(setq current-heading-path (concat (org-entry-get nil "ITEM") "/" current-heading-path))
(setq parent-level (- parent-level 1))
)
(message "%s" current-heading-path)
))
不过我现在也只会如何获取heading拼接出a/b/c这样子
上面你可以在org中,通过 M-x test/show-heading-level
测试出来
那么接下来,我感觉是需要把这个代码hook到光标移动上,当然为了不影响主线程的使用,应该是要多线程,或者异步,监控光标的移动,然后显示出来。思路应该是这样吧
感谢, 我在你代码基础上改了. 配合 awesome-tray-mode 可以显示了:
(defun my/awesome-tray-module-org-outline ()
(test/show-heading-level))
(defface my/awesome-tray-module-org-outline-face
'((t :italic t))
"Hello module face."
:group 'awesome-tray)
(add-to-list 'awesome-tray-module-alist
'("org-outline" . (my/awesome-tray-module-org-outline my/awesome-tray-module-org-outline-face)))
(setq awesome-tray-active-modules '("org-outline" "location" "org-pomodoro" "date"))
(defun test/show-heading-level ()
(let* ((parent-level (- (org-outline-level) 1))
(current-heading-path (org-entry-get nil "ITEM")) (toppest nil)
(last-heading current-heading-path)
)
(save-excursion
(while (not toppest)
(when (> (org-outline-level) 1)
(outline-up-heading 1))
(setq toppest (equal (org-entry-get nil "ITEM") last-heading))
(setq last-heading (org-entry-get nil "ITEM"))
(when (not toppest)
(setq current-heading-path (concat (org-entry-get nil "ITEM") "/" current-heading-path))
)
)
current-heading-path
)))
效果是:
但是有这些问题:- 太长了没法显示
- 没有 color, 不好看
- 不在最左边
- 只适用于 org-mode, 不适用于一般的 outline-mode
可以看看topsy能不能满足你要求,它是在header line显示的。topsy作者有另一个适用于orgmode的包。
我是用topsy加上自己写的适用于orgmode的函数,效果这样:
1 个赞
require org-eldoc
org-eldoc-load
eldoc-mode 1
2 个赞
正解了, 就是这个! 感谢!