I think that would be the next greatest thing in non-mobile What I think would be interesting would be some strongly-coupled CLI-GUI interactions. For instance, let's take Word as a start. What if you could swap to your CLI and say "load letter template" and it would walk over to Word and do that for you in the GUI? Or in Excel, instead of clicking through the charting wizard, instead have a CLI that lets you configure the options at will?
I think that would be the next greatest thing in non-mobile UI design. (But I'm a heavy CLI user, so I'm kinda biased.)
I'm still not thrilled because it's usually still difficult to move data the other way (although xclip or xsel can certainly help).
You could argue that Vi and emacs do both. Certainly the primary mode is a (curses-based) GUI, and the command modes operate on the same data. They're not quite always-on, but close enough.
I often wish more applications would do this!
CLI in contrast can modify things, not just give you back information.
CLI is the best tool that exists at the moment for a few things, but I definitely see how there could be a superior, semi-graphical, non-"scrolling-ASCII-buffer" alternative.
Note: I have tried Linux as my main OS for almost a year, I've done extensive dev under Linux, customized the hell out of my .profiles and *rcs, etc. Still, I see it as flawed. If someone comes up with a sane CLI, I'll be the first in line.
ls | tee >(frob x) | grep y
should output the output of ls to both 'grep x' and 'grep y'. The '>(foo)' syntax in bash will create a subshell to run the pipeline in the parens, and evaluate to the name of the FD for the pipeline (eg, /dev/fd/42).For multiple inputs, similarly:
grep foo <(ls dir1) <(cat somefile)There's nothing stopping you from doing that. Back in college I wrote a Unix shell (as part of a class project in Unix Systems Programming) that, in theory, could do that but I lacked a decent syntax for doing so. Perhaps that's an argument for a GUI, but what you ask for is certainly possible (although the semantics of piping multiple programs into one is hard to resolve, at least in my mind. Do you interleave by characters? By line? User specified? How?).
Also, writing an "ls" that output "objects" is also quite trivial, but the tooling required to convert (or write from scratch) existing command line tools is large. Also, the semantics can get quite rough.
"There shouldn't be any ASCII flags or switches-those (if really needed) should be an array of objects ... "
Again, I can go back to the shell I wrote in college. The arguments to a program were stored in an array. In fact, that's how you had to specify the arguments, as an array. It was an interesting shell, enough to get me an A in the class, but I never used it as an interactive shell. Typing commands (which were first class objects, by the way) was a pain. But boy could I sure could pipe stderr to more and stdout to a file.
Perhaps what you need to do is try to implement your own shell that works the way you think it should work. You could be the one to implement a sane CLI ...
Have you heard of TermKit? It was an experiment in intertwining graphical and command-line interfaces: https://github.com/unconed/TermKit/
It would be neat to have basic stringable primatives, like maps and tables, that scripts could write and read.
As I wrote: "GUIs, on the other hand, restrict the language available to the user, thus enforcing an interactive conformity—much like L'Académie française does for the French langauge (or rather, tries to do). It's not so much about enhancing productivity as it is usability in general (or communication, take your pick)."
Try photo manipulation with a CLI. Art requires spatial interaction, not merely "conversational" expressions.
One thing that I'd love to see in all GUIs is a unified "search box" for commands, settings, and tasks. The OS X help menu comes close (but it only searches help and menu bar items); the "Control-Q" box in the Visual Studio 11 beta comes even closer (but it only works in Visual Studio).
Neither, however, go beyond basic substring matching, and they really should. As an example, help searching for "disable Flash" in Safari could easily point me to the appropriate preference pane and the Safari extensions Web site before falling back to a general Web search as a last resort.
There's a lot to be said for the quiet simplicity of `convert -scale 25% foo.jpg smallfoo.jpg`.
ls foo(bar)
doesn't list files that look like foo(bar), it says "bash: syntax error near unexpected token `('". It has no method of easily discovering that 'ls' means 'list files'. And typos can potentially harm data.None of this means that the command line is useless or a bad idea, but it does make it relatively unfriendly towards newbies. Even if the concept is more intuitive, the current incarnation can be scary.
A Formula 1 car is not designed for novices, but it gives the driver maximum control in a very high-stress situation. I would suggest that the interface is as "friendly" to the intended user as millions of $cash and hours of research can possibly make it.
The CLI is the result of 30-40 years of similar evolution, and the fact that it has survived this long, and mutated in the helpful ways mentioned by the article, would similarly suggest that many users find it useful. I know I do, and I'm a user.
I work with command line tools every day, and I am still constantly searching Google and man pages whenever I need to do something outside of my normal flow.
So who's going to make cliacademy.com to ensure that everyone learns how to use a CLI?
http://support.twitter.com/articles/14020-twitter-sms-comman...
A few years back, when more people used the SMS interface to post, it was common to see people occasionally slip and post what was supposed to be a direct message. I don't see that anymore now that people use GUIs.
Also, I did not know that about the @reply. Twitter needs to come with a --help.
What sort of wizardry is this? My shell (BASH) does not say "did you by any chance mean XYZ?" It stops after saying "I have no clue what you just said" and then stares at me like I'm an idiot.
[Redacted]@[Redacted]:~$ nncat
No command 'nncat' found, did you mean:
Command 'sncat' from package 'sn' (universe)
Command 'ncat' from package 'nmap' (main)
Command 'uncat' from package 'socklog' (universe)
nncat: command not foundAlso, recent versions of Ubuntu include shell aliases that will search for packages related to missing commands. I'm sure that if you don't use Ubuntu, you could rip this functionality out and port it to whatever packaging system you use.
Autocomplete.