You already stated your reasoning, and I understand it. I was just
making noise for people like Stef and me, who never use Shift unless
they HAVE TO.
I like that I'm not alone.
The short list of implementors at the top level is usually noise
and might have confused Stef. It becomes relevant once the message
is fully specified.
Diving in should be done with right arrow when at the end of the
command line.
Diving out with left arrow at the start of the command line.
I was wondering what is the benefit to have cmd - shit arrow vs arrow
Not overloading unmodified right/left arrows sounds like an obvious
good idea.
But as you already mentioned, Spotter is a special context, so one
needs to take a step back to evaluate the interaction possibilities.
Typically, in the Spotter command line, I never use left-right arrows,
and I think this is common. If people mistype something, and have
immediate feedback, they tend to use backspace to fix it, instead of
in-line editing.
Spotter is also very similar to a class browser like Nautilus, where
left-right arrows are the primary way to dive in and out of packages,
classes, protocols, methods. That makes right and left arrows
intuitive to dive in and out in Spotter.
If right and left arrows dive in and out, it's very easy to cancel a
mistake, just immediately press the opposite arrow. That also means
that dive-out should remember what was the search line, so immediately
diving back in does not lose the previous input, as is the current
behaviour. Can you fix that?
Cmd-arrows and Cmd-shift-arrows is uncommon, and it takes a conscious
effort to remember, it's not intuitive in any way.
Yes luc told me that he never remembers. Me too :)
And I would not say that luc is a newbie more a power user.
Cmd-arrows and Cmd-shift-arrows are slow and hard to reach combinations. T
100% right
hey require me to move my left arm from the shoulder so left hand goes
to the modifier keys corner. Reaching arrows already requires me to
move my right arm so my right hand gets over the arrow pad. So every
time I want to dive in or out, I need to move both arms and completely
lose kinaesthetic connection with the home row. Then to continue
filtering I need to find the home row again. Repetitive switching
between home row and cmd-shift-arrows is frustrating at a deep, motor
level. That kind of frustration leads to angry people and the Dark Side.
Me too :)
No Luc I'm not your father (sorry a personal joke - ... luc will not
read because of bandwidth problem but still).
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.
o "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:
o "if else" should find ifNil:else:, ifTrue:else: etc.
o "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.
o "menu morph items" should find "#Implementors: MenuMorph>>#items"
Here's another few, unrelated, suggestion. For the top-level list:
* When the line is empty:
o 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.
o That should explain # words and important action keys.
o That should provide a way to immediately dive into categories.
o 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
o 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.
o 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.
Which one? We should kill them.
So I am rather happy to just provide feedback for enhancements, so I
can spend more time fixing the actual bugs. :-)
Regards.