CLI + GUI = The Future

date: 2009-02-06

archive_section: project-beyond

tags: technology ui



The big focus in modern computing is to make the computer act as little as possible like a computer and as much as possible like some skewed representation of a physical desk. Each new version of any given window manager is tweaked and modified to be “intuitive" and “easy to use." But what does that mean? Essentially that they have moved things around into a, possibly, more logical menu system. All this does is change the incorrect metaphor that the user is confronted with. But it doesn’t change the fact that most of the GUI is cruft. A large portion of what users face when they use the computer is a waste of time.


Over two decades ago they had it partly right. The command line was the primary way to interact with the computer, this interface is powerful, but limited; GUI is useful sometimes. But not always. That is where the principle of dialectic comes in. Hegel proposed that everything progresses through dialectic to reach a state of equilibrium that is higher, or better, than that original state. There are three steps to this process:

1. **Thesis:** The initial concept

2. **Antithesis:** A reaction to the initial concept, usually strongly polarized against

3. the thesis

4. **Synthesis:** The Thesis and Antithesis merge to reach a higher level of thought or

5. existence.

By applying this to the UI concept we have:

1. **Command Line Interface:** Powerful, Straightforward, and nearly Cruft-less.

2. Designed by hackers for hackers. This UI was designed to be powerful and intuitive to

3. computer people.

4. **Graphical User Interface:** Colorful, Vague, Metaphorical. Designed for the common,

5. usually clueless, user. This UI was designed to allow the common person to use a

6. computer.

7. **Graphical Command Line Interface:** Powerful, Straightforward, as Cruft-less as in

8. practical. This is a synthesis of the GUI and CLI. Designed to be powerful and

9. naturally intuitive; ready to pave the way from natural speech commands. The UI is

10. designed for the future, that is, everyone: hackers as well as common people.

What might a fusion of the CLI and the GUI act and/or look like? How would the user interact with his/her computer? This is my vision:

The Command Line makes a comeback

We have been using the command line for a long time. First to interact with our computers and later to find information on the Internet. The command line is now an everyday tool that nobody could live without. So why has this marvel of the modern world been abandoned on the desktop? The command line, on our new dialectic desktop, will always be available, this is how the user will launch applications and find help and information about his computer and various other topics. This command line, however, wont be bash, or any other kind of standard command line interpreter. This will be more of a pseudo-command line. I would imagine that most of the standard commands used in current command line interpreters wont work (ie, exist) directly. However, there should be some kind of easy, and logical, command to switch over to a “real" command line. The most important thing to consider is language. The command line, as it currently exists on the desktop, uses a language syntax the makes sense and works, but it isn’t natural language. Google, the now-ubiquitous command line, unlike the Linux terminal, understands, or, in the least, makes use of natural language. A good example of this is Ubiquity, the Firefox extension from Mozilla Labs. What I propose is that something that is equal in capability to Ubiquity become a central interaction point on the computer desktop.

Pretty Doesn’t Have to Mean Crufty

People like pretty desktops because people like anything that is pretty, simply because it is pretty. Mac OS does a great job a creating a beautiful user experience, usually because the philosophy is this: make it look pretty at all costs, even if that means making something else more complex. I would propose something more moderate: make it look pretty, unless it interferes with the user experience (as in usability). But how do you make a pretty UI without cruft? Easy: Enlightenment. Enlightenment e17 is a great window manager that looks great and, as far as I have seen, isn’t particularly crufty or resource heavy and it has a heavy focus on eye candy which means a pretty (and nicely animated) UI. I recently updated to a more recent version of e17 and it appears that the project has taken a huge tangent. It is no longer the Window Manager that I fell in love with. Looks like my next best bet is KDE, although It’ll take a bit of work to make it light enough for my liking.


The my concept of the ZUI is a spin off of the GUI that I rather enjoy. It is a sort of fusion of a compositing window manager and a dynamic tiling window manager. All of your windows are shown in a grid on the screen, grouped by application, when you mouse over a label with the name of the window, the name of the application, tags?, and possibly other information. When you click on a window it zooms out and expands to fill most of the screen. A hotkey will un-zoom the window and another will un-zoom it to allow you to zoom into another window as well.IntegrationWhat’s the point of all this if there is no integration. The lack thereof is a big problem for me when I use Enlightenment because there isn’t any integration. GNOME uses additional packages to accomplish this. And although I’m not a big fan of GNOME (or KDE for that matter) the idea, and to an extent the application, is good. There needs to be some kind of integration package and it should be light and un-obstrusive (way lighter than all the GNOME daemons you have scurrying around when you run GNOME). This includes:

GTK and Qt

As I said before, I don’t like GNOME, but most GUI applications for linux use GTK or Qt as their UI engine. And as little as I like to say it GTK has to have some kind of inclusion. The solution? A light-weight daemon that converts Enlightenment theme files into GTK or Qt settings. The same goes for icons.

The Proposed Result

CLI + GUI Mockup

CLI + GUI Mockup