In this page I am going to demonstrate an idea of a unified terminal experience. To substantiate it, I created an application for SQL, using ncurses and python, but the concept is to apply the same principle in any hierarchical tree structure, aiding the development by an underlying library.

The interaction we have each day with computers varies from application to application. This is also the case for terminal experience. The problem that obviously arises is, each time, the user has to learn again the UI and its shortcuts, making the learning curve steeper. Although for most non-terminal applications the learning curve is approachable, we frequently settle for suboptimal use, since it’s not worth it to spend much time in learning the various shortcuts available. The situation is exacerbated for the more obscure but frequently very uesful terminal apps.

The ideal experience of course, would have been, to make the learning the UI/shortcuts effort barely noticeable.

With that goal in mind, here’s bacu, an early incarnation of a unified experience.


The idea is to decouple KEY BINDINGS (or shortcuts) from ACTIONS.

The user will initially select a preferred KEY BINDING set that maps KEY BINDGINGS to generic actions.

As an example, In vim key bindings, ‘dd’ would denote a generic call of a deletion of a line. Afterwards, depending on the context (in this case, if we act on tables or databases), a different delete function will be called (deleteTable, deleteDatabase etc.).


A demonstration of the idea follows. This is an incomplete application. The source code will be released in github.