A Better Terminal

I’ve been musing over the idea of how we could make the terminal a much richer experience.

I love iPads and frankly think that some version of an iPhone/iPad will become our primary method of computing in the next 5-10 years. Just recently they’ve matured to the point where I think the snowballing effects will kick in.

That said, we lose a lot when moving to the restricted worlds of Android, iOS, and whatever else comes (fuschia?). Things like vim, emacs, and other unix software which are nearly impossible to replace. Years of scripts and programs written for a world of unix.

However, all is not lost. I think we have a chance to change our conception of these things and bring them in to the mobile world such that it improves the desktop one too.

The keyboard is here to stay. Even on iPads it’s considered nearly required to at least have a Magic Keyboard or one of Apple’s Keyboard Cases for the iPad Pro.

Normal terminals on an iPad are annoying. A tremendous amount of work done by Blink.sh goes to show how hard it is to get a good terminal experience on the iPad because few others are compeitive with the experinece except for the very experienced developers at Panic who made Prompt, Coda, and Transmit.

The issue becomes that things aren’t designed for touch as they always end up being. However, I don’t see why we must do things the way we always have. I think right now the main issue is not the iPad, but the fact that we seperate the terminal from the shell. Instead of simply making a good experience for running unix commands we made a great emulator which runs at all times.

If we could simply treat the command line as a program proper which is also the shell itself we should do more interesting things like we can do in text editors.

We could collapse long command results and easily copy the output of just that command. Or, like in editors, we could have a full blown auto complete with nice rendering.

On the off chance we need to run something like tmux or vim we could switch back to the emulation mode, but once we exit we’d see the richer terminal just like we’d normally see the previous history in a normal shell.

Custom prompts would be in the terminal+shell layer and could be interactive. The state of the existing terminal could change.

I also think that this would make it nice/easy to make an over-ssh way of doing the same things on a remote server with a new service designed to act as a shell server of sorts.

Maybe we could make a tmux-like central server which manages sessions, history, and etc. in a rich way which any fancy terminal/shell could connect to and display to the user. Which would also allow any user to connect to a remote one and use.

If done over HTTPS it could easily be proxied and authenticated by things like NGINX.