在组织模式下完全隐藏:PROPERTIES:抽屉

问题描述 投票:0回答:4

有人可以帮我完全隐藏

:PROPERTIES:
抽屉吗,包括写着
:PROPERTIES:
的那一行。

* TASKS (with deadines)

    ** Next Action [#A] Ask the geniuses how to do this.  :lawlist:
       DEADLINE: <2013-07-04 Thu >
         :PROPERTIES:
         :ToodledoID: 330686790
         :ToodledoFolder: TASKS
         :Hash:     afa88f17317bbe2ce0ce661333cdcfb4
         :END:
       This line is for notes, which appears underneath the properties drawer.

* UNDATED (without deadlines)

    ** Someday [#A] Close but no cigar -- keep trying.  :lawlist:
          :PROPERTIES:
          :ToodledoID: 330686680
          :ToodledoFolder: TASKS
          :Hash:     eb0b8d360b5b1453dd66ed0c5698e135
          :END:
       This line is for notes, which appears underneath the properties drawer.

我没有通过谷歌搜索看到这个功能,所以我猜测需要一些特殊的代码行才能使这个功能请求成为现实。 [换句话说,我不认为这是一个超级用户问题,因为这需要用一些特殊的代码来发明。]

emacs org-mode
4个回答
34
投票

以下答案完全隐藏了从

:PROPERTIES:
:END:
的所有内容。可以通过评估
(org-cycle-hide-drawers 'children)
(org-cycle-hide-drawers 'all)
来测试它,或者结合与循环大纲视图相关的其他功能。
org-mode
系列中包含的要展开的标准函数都可以工作——例如,
show-all
org-show-subtree
;等等

(require 'org)

(defun org-cycle-hide-drawers (state)
  "Re-hide all drawers after a visibility state change."
  (when (and (derived-mode-p 'org-mode)
             (not (memq state '(overview folded contents))))
    (save-excursion
      (let* ((globalp (memq state '(contents all)))
             (beg (if globalp
                    (point-min)
                    (point)))
             (end (if globalp
                    (point-max)
                    (if (eq state 'children)
                      (save-excursion
                        (outline-next-heading)
                        (point))
                      (org-end-of-subtree t)))))
        (goto-char beg)
        (while (re-search-forward org-drawer-regexp end t)
          (save-excursion
            (beginning-of-line 1)
            (when (looking-at org-drawer-regexp)
              (let* ((start (1- (match-beginning 0)))
                     (limit
                       (save-excursion
                         (outline-next-heading)
                           (point)))
                     (msg (format
                            (concat
                              "org-cycle-hide-drawers:  "
                              "`:END:`"
                              " line missing at position %s")
                            (1+ start))))
                (if (re-search-forward "^[ \t]*:END:" limit t)
                  (outline-flag-region start (point-at-eol) t)
                  (user-error msg))))))))))

对于任何对在所有不同视图之间进行选项卡循环感兴趣的人(包括显示

:PROPERTIES:
抽屉内的内容),可以通过添加附加条件
before
org-cycle-internal-local
 来轻松修改 
(t ;; Default action: hide the subtree. . . .

((eq org-cycle-subtree-status 'subtree)
  (org-show-subtree)
  (org-unlogged-message "ALL")
  (setq org-cycle-subtree-status 'all))

屏幕截图——抽屉隐藏:

https://www.lawlist.com/images/org_mode_properties_a.png


屏幕截图——抽屉可见:

https://www.lawlist.com/images/org_mode_properties_b.png


0
投票

目前这是不可能的,至少在没有(很多?)额外编码的情况下......

问题是:你如何取消隐藏它?你会单独看到“...”吗?


0
投票

截至 2023 年,有一个 emacs 软件包

org-tidy
可以帮助解决此问题

https://github.com/jxq0/org-tidy

(use-package org-tidy
  :ensure t
  :config
  (add-hook 'org-mode-hook #'org-tidy-mode))

-2
投票

这允许您切换当前所在标题的属性。

(defun org-toggle-properties ()
  ;; toggle visibility of properties in current header if it exists
  (save-excursion
    (when (not (org-at-heading-p))
      (org-previous-visible-heading 1))
    (when (org-header-property-p)
      (let* ((a (re-search-forward "\n\\:" nil t)))
        (if (outline-invisible-p (point))
            (outline-show-entry)
          (org-cycle-hide-drawers 'all))))))
© www.soinside.com 2019 - 2024. All rights reserved.