Function: kotl-mode:demote-tree
kotl-mode:demote-tree is an interactive and byte-compiled function
defined in kotl-mode.el.
Signature
(kotl-mode:demote-tree ARG)
Documentation
Move current tree a maximum of prefix ARG levels lower in current view.
Each cell is refilled iff its no-fill attribute is nil and
kotl-mode:refill-flag is non-nil. With prefix ARG = 0, cells are demoted up
to one level and kotl-mode:refill-flag is treated as true.
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/hyperbole-20260414.325/kotl/kotl-mode.el
(defun kotl-mode:demote-tree (arg)
"Move current tree a maximum of prefix ARG levels lower in current view.
Each cell is refilled iff its `no-fill' attribute is nil and
kotl-mode:refill-flag is non-nil. With prefix ARG = 0, cells are demoted up
to one level and kotl-mode:refill-flag is treated as true."
(interactive "*p")
(if (< arg 0)
(kotl-mode:promote-tree (- arg))
(let* ((lbl-sep-len (kview:label-separator-length kotl-kview))
(orig-id (kcell-view:idstamp))
(fill-p (= arg 0))
(orig-pos-in-cell
(- (point) (kcell-view:start (point) lbl-sep-len)))
start-level start-point prev prev-level)
;; Next line ensures point is in the root of the current tree if
;; the tree is at all hidden.
(kotl-mode:beginning-of-line)
(setq start-point (point)
start-level (kcell-view:level start-point lbl-sep-len))
(when fill-p
(setq arg 1))
(unwind-protect
(progn
(backward-char 1)
(while (and (> arg 0)
(setq prev
(kcell-view:previous nil lbl-sep-len)))
(when prev
(setq prev-level
(kcell-view:level (point) lbl-sep-len))
(cond ((> prev-level (+ start-level arg))
;; Don't want to demote this far
;; so keep looking at prior nodes.
nil)
((= arg (- prev-level start-level))
;; Demote to be sibling of this kcell.
(setq arg -1))
((< prev-level start-level)
;; prev is at higher level then
;; orig, so can't demote
(setq prev nil
arg 0))
(t
;; Demote below this kcell. This is
;; as far we can demote, though it may
;; not be the full amount of arg.
(setq arg 0)))))
(when prev
(kotl-mode:move-after
(kcell-view:label start-point)
(kcell-view:label) (= arg 0)
nil fill-p)))
;; Move to start of original cell
(kotl-mode:goto-cell orig-id)
;; Move to original pos within cell
(forward-char (min orig-pos-in-cell
(- (kcell-view:end-contents)
(kcell-view:start))))
(kotl-mode:to-valid-position))
(unless prev
(error "(kotl-mode:demote-tree): Cannot demote any further")))))