我使用org-mode来处理多个文件中的任务和项目。
在每周议程中,可以使用<TAB>
或<RET>
跳转到每个TODO条目的位置。如果目标文件先前未打开,则会加载一个光标,并将光标设置为正确的标题,展开整个文档,包括抽屉。
我非常希望只看到稀疏的树,除了正确的标题折叠(子树可见性无关紧要)。
可以使用C-u <TAB
循环全局可见性来折叠整个树,但我必须再次找到标题。
我知道我可以通过缩小缓冲区来隐藏其余部分,如下所述: Emacs, How can I display only current task and hide others in org-mode? 但后来我放松了上下文(父母标题,轻松访问兄弟姐妹),抽屉仍然打开。
理想情况下,我希望有一个显示以下内容的命令:
修改
发布的函数user3173715的略微修改版似乎可以解决问题:
(defun org-show-current-heading-tidily ()
"Show next entry, keeping other entries closed."
(if (save-excursion (end-of-line) (outline-invisible-p))
(progn (org-show-entry) (show-children))
(outline-back-to-heading)
(unless (and (bolp) (org-on-heading-p))
(org-up-heading-safe)
(hide-subtree)
(error "Boundary reached"))
(org-overview)
(org-reveal t)
(org-show-entry)
(show-children)))
答案 0 :(得分:5)
这是基于实际问题编辑中的答案。
如果对任何人有帮助: 当我试图将上面的内容绑定到一个热键时,我不断收到错误,命令错误的参数有些东西......结果发现必须添加(交互式)标志才能使其正常工作。 以下是与M - =
关联的函数示例(defun org-show-current-heading-tidily ()
(interactive) ;Inteactive
"Show next entry, keeping other entries closed."
(if (save-excursion (end-of-line) (outline-invisible-p))
(progn (org-show-entry) (show-children))
(outline-back-to-heading)
(unless (and (bolp) (org-on-heading-p))
(org-up-heading-safe)
(hide-subtree)
(error "Boundary reached"))
(org-overview)
(org-reveal t)
(org-show-entry)
(show-children)))
(global-set-key "\M-=" 'org-show-current-heading-tidily)
@ Patrick.B感谢编辑!
答案 1 :(得分:3)
我不确定这是否是你的要求(我只是认为它适合你的问题标题),但是我通过在org-mode的速度命令中绑定它们来使用这两个函数带来很多乐趣。您可以在org-mode hacks中找到这两个功能。我略微修改它们以达到我的目的。
这两个功能支持:
为了完成(2),你需要(setq recenter-positions '(top bottom))
,可能有更好的解决方案,但我没有深入研究。
(defun ded/org-show-next-heading-tidily ()
"Show next entry, keeping other entries closed."
(if (save-excursion (end-of-line) (outline-invisible-p))
(progn (org-show-entry) (show-children))
(outline-next-heading)
(unless (and (bolp) (org-on-heading-p))
(org-up-heading-safe)
(hide-subtree)
(error "Boundary reached"))
(org-overview)
(org-reveal t)
(org-show-entry)
(recenter-top-bottom)
(show-children)
(recenter-top-bottom)))
(defun ded/org-show-previous-heading-tidily ()
"Show previous entry, keeping other entries closed."
(let ((pos (point)))
(outline-previous-heading)
(unless (and (< (point) pos) (bolp) (org-on-heading-p))
(goto-char pos)
(hide-subtree)
(error "Boundary reached"))
(org-overview)
(org-reveal t)
(org-show-entry)
(recenter-top-bottom)
(show-children)
(recenter-top-bottom)))
您可以使用j
和l
将org-mode速度键与它们绑定,然后您可以使用j
和l
来控制标题的折叠光标位于标题的开头。
(setq org-speed-commands-user
'(("j" . ded/org-show-next-heading-tidily)
("l" . ded/org-show-previous-heading-tidily))))
非常适合阅读org-mode文件,欢呼!
答案 2 :(得分:0)
检查您的组织启动选项(customize-group
&gt; org-startup
),例如org-startup-folded
或org-agenda-inhibit-startup
(其他人已经提到过这些选项)并设置选项以仅显示折叠视图。我们讨论了#+STARTUP
等组织模式变量{。{3}}。
当您现在跳到议程时,您可能会注意到所有内容都已折叠,即使活动项目的父项可能也不可见。然后,您可以使用org-reveal
C-c C-r
根据here显示上下文(父母,子女,下一个兄弟)