Homepage: https://github.com/zellerin/dynamic-graphs
Author: Tomas Zellerin
Updated:
Manipulation with graphviz graphs
Make dynamic graphs: take a graph (as defined for graphviz), apply
some filters, and display it as an image. The graph can be either
a function that inserts the graph (and is called for each
redisplay), or a buffer that can change. An imap file is created
in addition to the image so that clicks on image can be related to
individual nodes (TODO: only for rectangles so far)
The filters can apply both enhancing operations (add colors, ...)
and more complicated operations coded in gvpr. As a special case
there is a filter that removes all nodes that are more distant than
a parameter from a root node(s).
The image is displayed with a specialized minor mode.
Predefined key bindings on the displayed image in this mode include:
- e (dynamic-graphs-set-engine) change grahviz engine (dot, circo, ...)
- c (dynamic-graphs-remove-cycles) change whether cycles are removed
- 1-9 (dynamic-graphs-zoom-by-key) set maximum displayed distance from a root node(s)
- mouse-1 (dynamic-graphs-shift-focus-or-follow-link) shift root
node or follow link defined in imap file - that is, in URL
attribute of the node. Link is followed by customizable
function, by default `browse-url' - but
`org-link-open-from-string' might be more useful. See docstring
for details.
Example:
(dynamic-graphs-display-graph "test" nil
(lambda ()
(insert "digraph Gr {A->B B->C C->A A->E->F->G}"))
'(2 remove-cycles "N {style=\"filled\",fillcolor=\"lightgreen\"}"
node-refs boxize))