I’m a broken record on this topic, but there’s a ton of non-Unix prior art to learn from. Many minicomputer systems had a separation from programs and commands, with the former being not directly invoked latter being what the user called. For example, with i, programs have typed arguments with validation (including marking secrets which aren’t visible on recall), and you can call up a form (F4 key anywhere) for all the valid arguments and their types. It then assembles the the command arguments for you, then calling that builds arguments for the program (which themselves are typed - you can pass pointers on argv). There’s other good human factors features to take too, such as context-sensitive help everywhere, even for exceptions and errors.
There are a lot of modern “prototypes” too on Unix/Windows
e.g. 2014 article with nice screenshots
This one seemed cool
I would love to learn more about non-Unix UI from back in the day. Do you have any good references or links for this? The best thing I can find is a modern video that demos the Symbolics Lisp Machine command line.
Sounds vaguely similar to Nushell. External binaries can be imported as commands, but by default they have to be explicitly run. This frees up some syntax for doing more explicit things with values/variables and makes the completions / help a first class thing.
Ok this looks pretty cool :)
Is it open source? I wonder what software stack is behind it.
This looks interesting. Masked secrets and isolated environments look nice. Argument docs look nice, too but I suspect it only works for those custom commands right now. Show me how well Workflow Discovery works with git and then we’ll if it’s workable. Speaking of which, the whole demo doesn’t show any external commands executed. Integrating this with existing software might pose some challenges, I imagine.
I’m most intrigued how Undo will be implemented. I imagine it would require some sort of fs snapshotting to work with even basic rm. Or how it would work in a concurrent system (e.g. how do you undo cat test >> file after something else written to that file later?) I’m also not sure how this can be implemented for some operations. Say, how would one undo a firewall configuration? Or operations that interact with other machines: unsend an email, undo netcat scan, undo psql mydb < random.sql?
cat test >> file
psql mydb < random.sql
The “undo” feature is nice, it’s kind of like how browser tabs’ “undo close tab” feature is an improvement over desktop windows’ alt-f4.
From the video “and I’m the reason they used nmap in matrix, but that’s a story for another day”. Such a tease! I’d love to hear more about it.