Not PP, but I used to work for an automotive subcontractor company, and I've heard a few stories about fatal car accidents that lead to lawsuits, which proved that the car design was the reason for the accident, yet the car manufacturer just payed "damages" to the relatives (or settled out of court, maybe) and never bothered to change the design. Apparently, it was more expensive to reconfigure their production pipelines than pay for an occasional death.
That said, this is probably what any big enough company would do. So your point still stands, maybe car manufacturers are no different.
For prose, it probably is the best, but have you tried it for programming?
I find that my keyboard usage is dominated by text-editing shortcuts and punctuation characters. Not sure how well stenography would fit in.
On a similar note, though, I have amassed a "dictionary" of 50+ bash aliases, 1-, 2-, or 3-characters long.
Some "theories" emerged as well - I have groups of aliases whose names follow a pattern and depend on what subcommand (e.g. in git or kubectl) or options are included in the alias. This is good for mnemonics.
For extremely common commands, I ditch mnemonics and just choose a 1- or 2-character name that has no connection to the name of the command. For example r='cd -'. I chose "r" simply because it's on the opposite side of Enter, and I get to alternate my hands. (I guess this is a "brief".)
What got me into the alias hoarding business was the discovery of complete-alias[1] and, later, the progcomp_alias bash option. Turned out, you don't have to choose between aliases and programmable completion, you can have both.
Just want to mention sticky keys[1], as it seems often overlooked.
Instead of holding the modifier key(s) when activating a shortcut, you can press and release each modifier sequentially.
It does come with some of the fancy keyboards' firmware, but is also a built-in feature of all major OS-es. You can get it without spending a single dollar.
No, it's a shell that lets you interact with the OS.
All the "clasical" UNIX shells were created with interactive use in mind and optimized for it,
but happen to be good enough at batch processing[1] to be conflated with programming languages (mostly these days, like, 40+ years later).
The focus on interactive use is the reason you don't have to
- surround command argument lists with parentheses
- put commas between command arguments
- put semicolons at EOL
- surround string literals with quotes (unless the content interferes with the syntax, like, sigils or IFS chars, and you want to escape it).
- surround variable names in braces (unless you want to use some advanced substitution)
- call commands to manipulate I/O; it's baked in.
And these are just the things that existed 40 years ago. Bash gives you so much more stuff that makes interactive use a bliss, but I'm not going to dump the man page here.
If you optimize a shell feature for general-purpose programming, interactivity will suffer (increased verboseness, usually), and vice versa.
If we try to bring shells closer to the real PLs, instead of just using those PLs when it matters, we'll lose some of things that made shells attractive in the first place.
Single-command environment variables, to be precise. The same thing that gets created when you use "export", but isn't created when you use "=" on a line on its own:
$ FOO=BAR env | grep FOO # Exists as an environment variable passed to env
FOO=BAR
$ env | grep FOO # But only for that command
$ FOO=BAR # Creates a variable (not an environment variable)
$ env | grep FOO # As shown by not being passed down
$ echo $FOO # But still accessible in this context
BAR
$ export FOO=BAR # Promotes it to an environment variable (the "=BAR" is optional since it's already defined)
$ env | grep FOO # And as such is now visibly passed down
FOO=BAR
(Yes, bash does mix these together so it's easy to accidentally replace something you don't intend to)
Most likely a command in your script (or one source-d into it) makes an assumption about your $SHELL or login shell that is true for bash/zsh but not for fish.
> having to retype the whole filepath when using mv can lead to errors.
If you use bash, or any readline-based command line (in emacs mode):
mv long.file.name |^W^Y^Y
results in
mv long.file.name long.file.name |
(| is the cursor).
Then, you just edit the second copy of the filename.
BTW, M-C-b/M-C-f will move by one whole "argument" (even if it contains escaped spaces).
edit: and if your filename has spaces, replace the ^W above with M-C-b C-k
That said, this is probably what any big enough company would do. So your point still stands, maybe car manufacturers are no different.