Allright y'all. We're reinventing the command line, and we should do it right - with human-readable and -rememberable command names. Let's add a new goal to the project goals: to finally address Donald Norman's criticism in his classic article "The trouble with UNIX" (http://www.linux.org.uk/~dan/rumor/rumor.shrink). Along this line, I suggested to Steven on Twitter that TermKit could have an optional layer that replaces standard command names (cp, mv, etc) with human-readable versions (copy, rename, and so on); he suggested I compile a list of replacement names.
The aim, I think, is to eliminate the need for manuals (and Googling) in 80% of cases. Obviously, manuals will never become obsolete, but we need to make a system where a casual user can simply type in what they want and get the right result in most cases.
Here are some ideas for command names:
show should do what cat does in Steven's current screenshots - ie., display a file - when applied to a file; this might be implemented with less. When applied to a directory, it should be ls. It should still have the functionality of ls when passed multiple files as arguments - ie., it should list them - because it isn't cat: it won't combine files. Combining files is a much less popular action than showing them.
copy for cp -r. I think being able to move directories should be the default, and the dir/ syntax for moving all the files in a directory (see http://en.wikipedia.org/wiki/Cp_(Unix)) should be removed; users should have to type dir/* to do that.
rename and move for the two different functions of mv
delete for rm -r. Users shouldn't have to remember a separate option for directories here, either.
goto for cd and home for cd ~
now for date and here for pwd
set-system-time for the system-time-changing functionality of date
link for ln. Remove the real link.
- possibly
wait for sleep, though as @hach-que points out below this conflicts with another command.
as-admin for sudo
open for open on Mac OS X, and something similar on other platforms.
edit, which would be like open is on OS X, but geared towards editing rather than viewing - eg. it would open your text editor for HTML files, your image editor for JPGs, and so on.
I think most commands should be verbose when in user-facing mode: for example, rename should show the new file(s), wait should have a countdown, etc.
Keep in mind this layer will be optional, so please don't comment pointing out that this would be annoying for experienced users. A nice user experience might be to have TermKit ask whether the user would like traditional or user-friendly commands when first launched, and to have the option be toggle-able in the Preferences thereafter. Per @cafarm below, it would also be nice to have an option that echos the underlying commands being performed, which you could toggle on for debugging and/or learning the old commands.
Two challenges that I'm not sure how best to handle are 1) creating files and directories (perhaps create dir/ for mkdir and create file (without the trailing slash) for touch?) and 2) searching for things: the problem is that grep and find are distinctly different, but both are expressed by the concept of 'search' or 'find'. What's the best way to distinguish between the two?
Allright y'all. We're reinventing the command line, and we should do it right - with human-readable and -rememberable command names. Let's add a new goal to the project goals: to finally address Donald Norman's criticism in his classic article "The trouble with UNIX" (http://www.linux.org.uk/~dan/rumor/rumor.shrink). Along this line, I suggested to Steven on Twitter that TermKit could have an optional layer that replaces standard command names (
cp,mv, etc) with human-readable versions (copy,rename, and so on); he suggested I compile a list of replacement names.The aim, I think, is to eliminate the need for manuals (and Googling) in 80% of cases. Obviously, manuals will never become obsolete, but we need to make a system where a casual user can simply type in what they want and get the right result in most cases.
Here are some ideas for command names:
showshould do whatcatdoes in Steven's current screenshots - ie., display a file - when applied to a file; this might be implemented withless. When applied to a directory, it should bels. It should still have the functionality oflswhen passed multiple files as arguments - ie., it should list them - because it isn't cat: it won't combine files. Combining files is a much less popular action than showing them.copyforcp -r. I think being able to move directories should be the default, and thedir/syntax for moving all the files in a directory (see http://en.wikipedia.org/wiki/Cp_(Unix)) should be removed; users should have to typedir/*to do that.renameandmovefor the two different functions ofmvdeleteforrm -r. Users shouldn't have to remember a separate option for directories here, either.gotoforcdandhomeforcd ~nowfordateandhereforpwdset-system-timefor the system-time-changing functionality ofdatelinkforln. Remove the reallink.waitforsleep, though as @hach-que points out below this conflicts with another command.as-adminforsudoopenforopenon Mac OS X, and something similar on other platforms.edit, which would be likeopenis on OS X, but geared towards editing rather than viewing - eg. it would open your text editor for HTML files, your image editor for JPGs, and so on.I think most commands should be verbose when in user-facing mode: for example,
renameshould show the new file(s),waitshould have a countdown, etc.Keep in mind this layer will be optional, so please don't comment pointing out that this would be annoying for experienced users. A nice user experience might be to have TermKit ask whether the user would like traditional or user-friendly commands when first launched, and to have the option be toggle-able in the Preferences thereafter. Per @cafarm below, it would also be nice to have an option that echos the underlying commands being performed, which you could toggle on for debugging and/or learning the old commands.
Two challenges that I'm not sure how best to handle are 1) creating files and directories (perhaps
create dir/formkdirandcreate file(without the trailing slash) fortouch?) and 2) searching for things: the problem is thatgrepandfindare distinctly different, but both are expressed by the concept of 'search' or 'find'. What's the best way to distinguish between the two?