-
Notifications
You must be signed in to change notification settings - Fork 0
Usability-focused GraphViz dot viewer with fuzzy search, based on XDot.
License
Technologicat/xdottir
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
XDottir is a usability-focused XDot fork with fuzzy search and an animated GUI. It runs on Python 3 with Gtk 3. ---------------- XDottir features ---------------- - Fuzzy find. Search graph elements by fragments of the text they display. Always case-insensitive. Separate fragments by whitespace. All must match, but will match in any order. For example, "to ini" will match a node displaying the text "init_tools". Inspired by EMACS helm-swoop [https://github.com/ashiklom/helm-swoop]. - By default Find is incremental (as-you-type). For viewing a large graph on a slow computer, use the "-N" command line option to run in non-incremental mode. - Hover-highlight system to help explore large graphs. See section [Mouse behaviour and keyboard shortcuts] below. - The GraphViz layout filter for .dot files can be chosen in the GUI. Changing it will reload the current graph, using the newly selected layout. (Except when the input is in the pre-rendered .xdot format, or read from stdin.) - Files in the pre-rendered .xdot format are always loaded without a GraphViz filter. The check is based on the filename extension. The "-n" command-line option allows unfiltered reading of .xdot from stdin. - An integrated help is provided, explaining any hard-to-discover features. This is implemented as a built-in .xdot graph, which is loaded when the help button is clicked. - Animated focus shift, highlighting, zooming. Improves onlooker experience in pair programming and similar multi-user contexts. On slow computers, use the "-b" and "-a" switches to disable animations. - Keyboard shortcuts for pretty much everything. Hard-to-discover functionality inherited from XDot 0.4: - Shift-drag to zoom into a rectangular area. - Ctrl-drag to zoom smoothly. - Hover the mouse cursor over a node to highlight it. - Hover over the end of a link (graph edge, "arrow") to highlight the node at the other end of the link. Useful for exploring graphs. - Click a highlighted node to center it. Animated. The animation automatically zooms out and back in, if the view is highly zoomed and the destination node is near the edge of the view. If the destination is clearly visible, then the animation just pans the view. - Click the end of a highlighted link (graph edge, "arrow") to jump to (and center) the node at the other end of the link. Animated. -------------------------------------- Mouse behaviour and keyboard shortcuts -------------------------------------- Below is a complete list for both XDot 0.4 and XDottir 1.0. Unless otherwise specified, each item applies to both programs. Note the main version of XDot has since evolved; as of this writing, the current version is 1.1, and the below no longer necessarily applies to it. ----- Mouse ----- Click the end of a link = Center view to the node at the other end of the link Click a node = Center view to clicked node Right-click end of link = Center view to the node at the other end of the link and zoom to 100% [XDottir only] Right-click a node = Center view to clicked node and zoom to 100% [XDottir only] Hover on the end of a link = Highlight link and the node at the other end Hover on a node = Highlight node [XDot] Highlight node and all its outgoing links [XDottir] Alt+hover on a node = Highlight node and all its incoming links [XDottir only] Shift+hover on a node = Highlight node, all its outgoing links and the nodes connected by the links [XDottir only] Ctrl+hover on a node = Highlight node, all its incoming links and the nodes connected by the links [XDottir only] Mouse wheel up/down = Zoom view in/out Drag = Pan view Shift+drag = Zoom to area (choose the area while dragging) Ctrl+drag = Zoom smoothly Dragging accepts both left and middle buttons. -------- Keyboard -------- Arrow keys = Pan view +, =, Page up, keypad + = Zoom in -, Page down, keypad - = Zoom out F = Zoom to fit [XDottir only] Ctrl+F = Find [XDottir only] 1, keypad 1 = Zoom to 100% [XDottir only] Ctrl+O = Open file... [XDottir only] R = Reload current file Q = Quit Escape = Cancel current mouse drag action XDottir comes with a Find system. Fragments to search for can be in any order. Separate by whitespace. All must match. If in incremental Find mode (default): Ctrl+F or click Find field = Focus the Find field (re-highlighting all matches if the highlight has disappeared) typing [while in Find] = Incremental search for the text that is being typed. Highlights all matches. Escape [while in Find] = Clear the Find field and exit Find Return [while in Find] = Jump to first match N = Jump to next match Shift+N = Jump to previous match If in non-incremental Find mode (using "-N" command line option): Ctrl+F or click Find field = Focus the Find field Escape [while in Find] = Clear the Find field and exit Find Return [while in Find] = Run the search for the current term and highlight all matches. N = First press: jump to first match Further presses: jump to next match Shift+N = Jump to previous match Notes: - The highlight from Find disappears when the mouse pointer moves over the graph. This is intentional, so that it is possible to explore the graph normally. To re-show the highlight for the same search term, hover the mouse cursor over the Find field, or focus it by pressing Ctrl+F. - When cycling through the matches, they are (currently) not sorted. ---------------- History & future ---------------- XDottir was forked from XDot 0.4 in 2012 as a small GUI improvement project, inspired by animated OS X GUIs. As the most important addition that was not pure chrome, the Find feature was added to help source code exploration with Pyan3 [https://github.com/Technologicat/pyan] (which at that time was just Pyan, and for Python 2). The fork was originally called "XDot 1.0" (as it was a major UI overhaul), but since nowadays everyone and their cat has their own XDot fork, and there was actually an official XDot 1.0 in 2018, this fork was rebranded for disambiguation purposes, after being ported to Python 3 and Gtk 3 in 2019. At this point the EMACS helm-swoop inspired fuzzy fragment search was added. XDottir currently lives at: https://github.com/Technologicat/xdottir The final version for Python 2 is tagged as "python2". The original XDot by José Fonseca lives at: https://github.com/jrfonseca/xdot.py The optimal future path is to PR the relevant changes from XDottir into the current main version of XDot (nowadays officially called xdot.py), and then drop the fork. However, the XDot codebase has evolved considerably since 2012, the fork fulfills my current needs, and I don't have much time to devote to the project. We'll see. --------- Etymology --------- Next-gen, based on XDot. Get it?
About
Usability-focused GraphViz dot viewer with fuzzy search, based on XDot.
Topics
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published