One could consider using Tab and Shift-Tab
instead, but that would be a bad choice. Tab should mean
"autocomplete this", and in the context of Spotter you cannot
overload this with navigation. (I could expand on that)
I am not sure what you mean by "not contextual": I
type some words, use up/down arrows to choose the line I want,
which is often not the first one, then use right arrow to dive
in. That is contextual: I am looking at the list, I already
have my hand on the arrow pad, I did a vertical motion action
and now I want to do an horizontal motion action.
If you insist right-left arrow should not be
overloaded in the search line, then you could use the first
down arrow to move out of "command context" �and into "matches
context". Other actions like Enter and Backspace need not
depend on the context. But I am convinced it is not necessary
to make a distinction between command context and matches
context.
At the very least, I would like some reassurance
that the Spotter UI machinery would make it easy for people
like me to hack in the interaction behaviour they expect from
arrow keys.
When a list of paginated (only first N items), then the
category line should be accessible with arrows, so we can
dive into a category just with arrows.
We explicitly chose not to do that because we did not want to
mingle different kinds of elements in the same list. So, like
this, when you press�Cmd+Right, you will always dive in one
single element, and not in many by mistake.
I understand that. But I think it is the wrong
trade-off.
Diving into the wrong element with right arrow is
cheap, just press left arrow to dive out. That's easy to do
and totally intuitive.
To prevent a cheap, easily corrected mistake, you
make one of the most common actions significantly harder. That
is bad UI design, sorry to be harsh.
Actually, our original goal was
to have a way to expand the list in place (not only to dive in
category). For this we wanted a � line and clicking on
that�would expand the list in place. We did not get to do it
yet, but I think this would solve quite some of the reported
problems.
Expanding in place is a bad idea. Please do not do
that.
Categories often have dozens, sometimes hundreds
of items. Once you have expanded such a category, the rest of
the list is essentially lost, you need an easy way to cancel
that, and that easy way is diving out. Also when you are
scrolling a long expanded list, you do NOT want to scroll past
the end and into another category, that would be annoying, and
not useful.
What you do need is to make it easier NOT to have
browse the full categories at all. For that:
- Prefix matches should be sorted in
lexicographic order of the thing being
matched�first, and its container second.
- "items" in the top search, should show
implementors only for "#items", there are a lot of them,
and not things like
DialogGroupManagerUI>>#itemSelected.
- When a category is fully specified by #word
("items #i"), it should display the full list. There
should still be the ability to dive into the category
(retaining "items" in the command line), But there is NO
benefit in adding a layer of indirection.�
- Non-prefix matches, or matches for a line
containing multiple words need fuzzy search relevance
sorting with history sensitivity. For exemple:
- �"if else" should find ifNil:else:,
ifTrue:else: etc.�
- "m m" should find MenuMorph as one of the
first results. Only other classes whose two first two
words start with M should come before.
- "menu morph items" should find
"#Implementors: MenuMorph>>#items"
Here's another few, unrelated, suggestion. For
the top-level list:
- When the line is empty:
- Display a short graphic cheat sheet. Not a
wall of plain text, something pretty with boxes and
small bits of text that the eye wants to read.
- That should explain # words and important
action keys.
- That should provide a way to immediately
dive into categories.
- Provide an easy way to disable the cheat
sheet: a button "Do not show me this"
- Do not use separate lists per category, but
one list with all matches, sorted by search proximity
and with history sensitivity
- History sensitivity here is very
beneficial, it effectively lets one define custom
shortcuts, by always using the same letters to reach
to frequently used items. For example in Alfred on my
Mac, "sl" finds "Sleep" first and "Slack" second.
- Categories can be displayed again by typing
a single #.
- Keep the categories separated in the list
after diving in, it is essential for things like
senders/implementors.
And some suggestion for all lists:
- Please, please, GET RID OF VERTICAL WRAP
AROUND, thanks. When I hit the bottom of the list, I
want to know I got there.
- When a non matching #word is typed ("#x"),
the available #words should be displayed, not the empty
list.
- When moving into category with arrow up/down,
please scroll more. If the category list is long
compared to the scroller viewport, at 50-75% of the
viewport should display the category I just moved in.
- Scrolling should probably be a bit
optimistic. Unless we are at the end of the list, the
current line should never be the first or last
displayed, unless the viewport is very small.
- When the current category name is out of the
viewport, it should stick at the top, maybe with some
transparency gradient over the first item, I need to
know what category I am in. It is especially important
when scrolling up, after overshooting.
I hope you are familiar with Alfred (Mac only) and
Sublime Text. They both provide very useful fuzzy search with
history sensitivity.
But, please do keep
challenging. And give it a try with writing your own
processors. It would help us a lot.
Right now, I keep bouncing in all sorts of bugs in
other packages.