Function: org-fold--hide-wrapper-toggle
org-fold--hide-wrapper-toggle is a byte-compiled function defined in
org-fold.el.gz.
Signature
(org-fold--hide-wrapper-toggle ELEMENT CATEGORY FORCE NO-ERROR)
Documentation
Toggle visibility for ELEMENT.
ELEMENT is a block or drawer type parsed element. CATEGORY is
either block or drawer. When FORCE is off, show the block
or drawer. If it is non-nil, hide it unconditionally. Throw an
error when not at a block or drawer, unless NO-ERROR is non-nil.
Return a non-nil value when toggling is successful.
Aliases
org--hide-wrapper-toggle (obsolete since 9.6)
Source Code
;; Defined in /usr/src/emacs/lisp/org/org-fold.el.gz
;;;;; Blocks and drawers visibility
(defun org-fold--hide-wrapper-toggle (element category force no-error)
"Toggle visibility for ELEMENT.
ELEMENT is a block or drawer type parsed element. CATEGORY is
either `block' or `drawer'. When FORCE is `off', show the block
or drawer. If it is non-nil, hide it unconditionally. Throw an
error when not at a block or drawer, unless NO-ERROR is non-nil.
Return a non-nil value when toggling is successful."
(let ((type (org-element-type element)))
(cond
((memq type
(pcase category
(`drawer '(drawer property-drawer))
(`block '(center-block
comment-block dynamic-block example-block export-block
quote-block special-block src-block verse-block))
(_ (error "Unknown category: %S" category))))
(let* ((post (org-element-post-affiliated element))
(start (save-excursion
(goto-char post)
(line-end-position)))
(end (save-excursion
(goto-char (org-element-end element))
(skip-chars-backward " \t\n")
(line-end-position))))
;; Do nothing when not before or at the block opening line or
;; at the block closing line.
(unless (let ((eol (line-end-position)))
(and (> eol start) (/= eol end)))
(org-fold-region start end
(cond ((eq force 'off) nil)
(force t)
((org-fold-folded-p start category) nil)
(t t))
category)
;; When the block is hidden away, make sure point is left in
;; a visible part of the buffer.
(when (invisible-p (max (1- (point)) (point-min)))
(goto-char post))
;; Signal success.
t)))
(no-error nil)
(t
(user-error (format "%s@%s: %s"
(buffer-file-name (buffer-base-buffer))
(point)
(if (eq category 'drawer)
"Not at a drawer"
"Not at a block")))))))