Yet another software archaeology failure
I have this nice little utility program called
menupick .
It's a filter that reads a list of items on standard input, prompts
the user to select one or more of them, then prints the selected items
on standard output. So for example:
emacs $(ls *.blog | menupick)
displays a list of those files and a prompt:
0. Rocketeer.blog
1. Watchmen.blog
2. death-of-stalin.blog
3. old-ladies.blog
4. self-esteem.blog
>
Then I can type 1 2 4 to select items 1, 2, and 4, or 1-4 !3 (“1
through 4, but not 3”) similarly. It has some other features I use
less commonly. It's a useful component in other commands, such as
this oneliner
git-addq
that I use every day:
git add $(git dirtyfiles "$@" | menupick -1)
(The -1 means that if the standard input contains only a single item,
just select it without issuing a prompt.)
The interactive prompting runs in a loop, so that if the menu is long
I can browse it a page at a time, adding items, or maybe removing
items that I have added before, adjusting the selection until I have
what I want. Then entering a blank line terminates the interaction.
This is useful when I want to ponder the choices, but for some of the
most common use cases I wanted a way to tell menupick “I am only
going to select a single item, so don't loop the interaction”. I have
wanted that for a long time but never got around to implementing it
until this week. I added a -s flag which tells it to terminate the
interaction instantly, once a single item has been selected.
I modified the copy in $HOME/bin/menupick , got it working the way I
wanted, then copied the modified code to my utils git repository to commit
and push the changes. And I got a very sad diff, shown here only in part:
diff --git a/bin/menupick b/bin/menupick
index bc3967b..b894652 100755
--- a/bin/menupick
+++ b/bin/menupick
@@ -129,7 +129,7 @@ sub usage {
-1: if there is only one item, select it without prompting
-n pagesize: maximum number of items on each page of the menu
(default 30)
- -q: quick mode: exit as soon as at least one item has been selected
+ -s: exit immediately once a single item has been selected
Commands:
Each line of input is a series of words of the form
I had already implemented almost the exact same feature, called it
-q , and completely forgotten to use it, completely failed to install
it, and then added the new -s feature to the old version of the
program 18 months later.
(Now I'm asking myself: how could I avoid this in the future? And the
clear answer is: many people have a program that downloads and
installs their utiities and configuration from a central repository,
and why don't I have one of those myself? Double oops.)
[ Previously; previouslier ]
[Other articles in category /oops]
permanent link
|