This is project is reanimated from my pet-projects graveyard(Happy Halloween!) I’ve been working on it and out for couple of years, but never muster time to deliver something substantial. My hope that Devember(c) will be enough motivation for at least MVP.
About
GMPT(Graph ManiPulation Tool) is terminal visual graph editor inspired by vim. It aims to provide powerful, extensible and convenient interface and libraries for constructing, drawing and editing graphs.
Motivation
Graphs are very accessable tool for visually represent data relations(given that the graph have been layouted nicely). If you are visually oriented mind you probably thinking in graphs. But at the moment it is difficult to use graphs to share information with other people and its not because scarcity of offer.
Indeed, there are plenty of graph editing software on the market. Some of them, like draw.io, are online applications, which first assumes presence of desktop environment on my system, second - (browsers are) ravenous for system resources and third - reduces interactability with linux command environment. Well,you can circumvent online requirements by using containers, but that is even more hustle.
My main disappointment is that almost all of them require you to use mouse, which, do not get me wrong, very welcoming for new users, but for experienced user it only hinders their performance. In addition, mouse interactions are not easily scriptable, so writing plugins becomes pain in the butt. And lastly, Vim showed us that Great User Interface doesn’t have to be Graphical User Interface.
Main Usecases
This project tries to cover two main usecases:
- user draws graphs interactively(for example mind-maps)
- creation and modification of graphs can be done and sensed by other program (for example displaying control-flow of script/program while you writing it and modifying source code in reaction to modification of control-flow graph.
!NB: creation of translatrors source<->graph is outside of the scope of this project!)
Main Requirements
From this usecases follows main requirements:
- ascii/unicode render system
- robust and extensible command system
- user input interface(key-binding schema, completion hints)
- serialization/deserialization of graphs and graph modifications
MVP
Minimum viable product covers only first main usecase and include:
- rendering nodes and links
- text command system
- load and save graphs
- graph navigation
- single buffer with one window