[darcs-users] uber-interactive UI
Zooko Wilcox-O'Hearn
zooko at zooko.com
Mon Jan 18 17:32:14 UTC 2010
On Monday, 2010-01-18, at 3:15 , Eric Kow wrote:
> So my traditional response has been to resist this sort of thing
> (eg. Zooko's http://bugs.darcs.net/issue107, which obliterate
> during push; revert during record) on the grounds that while they
> would be very useful, they would also make the UI complicated and
> horrible.
A very cool thing about darcs's user interface (command-line
interactive) is that you can add extensions without complicating the
UI for the current behavior. Here is what I see when I run "darcs
push" with the latest version of darcs:
$ darcs push
Thu Jan 14 23:42:20 MST 2010 Brian Warner <warner at lothar.com>
* tahoe_add_alias.py: minor refactoring
Shall I push this patch? (1/1) [ynWsfvplxdaqjk], or ? for help:
There are 14 keys that I can press to do something, not counting
space bar, up-arrow or down-arrow. If a new option appeared at the
end of that list, such as 'o' for obliterate, I don't think it would
make the "darcs push" UI much less convenient or intuitive, even for
people who never want to obliterate a patch while pushing.
I really like darcs's "command-line interactive" UI, and I wonder if
some of the interesting new innovation of hunk-editing of could
somehow be implemented in the "command-line interactive" mode instead
of the "drop into an editor with a minilanguage" mode.
> One solution may be a sort of darcs shell that you could drop into
> from interactive mode (inspired from Florent's :revert).
Personally, I strongly resist learning new "shells" or "modes" that
are for specific tools. I will spend a lot of effort figuring out
how to do what I want with a single, synchronous command-line or by
configuring a configuration file before I will even consider learning
how to use a stateful interactive tool. This is because I know how
to record the history of what I have done with command-lines and text
files, how to make it reproducible and automated and to program it.
I can't do that with a stateful "shell", which means whatever I do in
there is lost to me -- I can't reliably look back in history to see
what I did and I can't necessarily reproduce it.
Also a stateful shell will often end up re-inventing features which I
already know how to do in bash, and it irritates me to learn a tool-
specific way to do what I can already do in a general way for all
unix tools (using bash).
I guess the darcs interactive command-line *is* such a thing already,
but it managed to sneak up on me by just asking a nice innocuous yes-
or-no question the first time and so I didn't realize until too late
that it was training me to use it as a stateful tool-specific UI.
Fortunately, on reflection, all of the things that I do with the
darcs interactive-command-line could also be done in a single non-
interactive invocation of darcs by passing the right command-line
options, so I don't feel like I'm trapped by relying on it.
Regards,
Zooko
More information about the darcs-users
mailing list