Homepage: https://www.gnu.org/software/emacs
Author: David Ponce
Tree widget
This library provide a tree widget useful to display data
structures organized in a hierarchical order.
The following properties are specific to the tree widget:
:open
Set to non-nil to expand the tree. By default the tree is
collapsed.
:node
Specify the widget used to represent the value of a tree node.
By default this is an `item' widget which displays the
tree-widget :tag property value if defined, or a string
representation of the tree-widget value.
:keep
Specify a list of properties to keep when the tree is collapsed
so they can be recovered when the tree is expanded. This
property can be used in child widgets too.
:expander (obsoletes :dynargs)
Specify a function to be called to dynamically provide the
tree's children in response to an expand request. This function
will be passed the tree widget and must return a list of child
widgets. Child widgets returned by the :expander function are
stored in the :args property of the tree widget.
:expander-p
Specify a predicate which must return non-nil to indicate that
the :expander function above has to be called. By default, to
speed up successive expand requests, the :expander-p predicate
return non-nil when the :args value is nil. So, by default, to
refresh child values, it is necessary to set the :args property
to nil, then redraw the tree.
:open-icon (default `tree-widget-open-icon')
:close-icon (default `tree-widget-close-icon')
:empty-icon (default `tree-widget-empty-icon')
:leaf-icon (default `tree-widget-leaf-icon')
Those properties define the icon widgets associated to tree
nodes. Icon widgets must derive from the `tree-widget-icon'
widget. The :tag and :glyph-name property values are
respectively used when drawing the text and graphic
representation of the tree. The :tag value must be a string
that represent a node icon, like "[+]" for example. The
:glyph-name value must the name of an image found in the current
theme, like "close" for example (see also the variable
`tree-widget-theme').
:guide (default `tree-widget-guide')
:end-guide (default `tree-widget-end-guide')
:no-guide (default `tree-widget-no-guide')
:handle (default `tree-widget-handle')
:no-handle (default `tree-widget-no-handle')
Those properties define `item'-like widgets used to draw the
tree guide lines. The :tag property value is used when drawing
the text representation of the tree. The graphic look and feel
is given by the images named "guide", "no-guide", "end-guide",
"handle", and "no-handle" found in the current theme (see also
the variable `tree-widget-theme').
These are the default :tag values for icons, and guide lines:
open-icon "[-]"
close-icon "[+]"
empty-icon "[X]"
leaf-icon ""
guide " |"
no-guide " "
end-guide " `"
handle "-"
no-handle " "
The text representation of a tree looks like this:
[-] 1 (open-icon :node)
|-[+] 1.0 (guide+handle+close-icon :node)
|-[X] 1.1 (guide+handle+empty-icon :node)
`-[-] 1.2 (end-guide+handle+open-icon :node)
|- 1.2.1 (no-guide+no-handle+guide+handle+leaf-icon leaf)
`- 1.2.2 (no-guide+no-handle+end-guide+handle+leaf-icon leaf)
By default, images will be used instead of strings to draw a
nice-looking tree. See the `tree-widget-image-enable',
`tree-widget-themes-directory', and `tree-widget-theme' options for
more details.