Since you asked to keep challenging…

Preamble: Sorry, I did one of those long messages again. I hope I am not 
annoying people with that.

> On 19 Jan 2016, at 22:40, Tudor Girba <[email protected]> wrote:
> 
> Hi,
> 
>> On Jan 19, 2016, at 9:18 PM, stepharo <[email protected]> wrote:
>> 
>> 
>> 
>> Le 19/1/16 20:25, David Allouche a écrit :
>>> BTW, thanks for the explanations for Spotter.
> 
> You are welcome. Please keep challenging. This is how good design happens.
> 
> 
>>>> On 19 Jan 2016, at 18:37, Tudor Girba <[email protected]> wrote:
>>>> 
>>>> And then, in Spotter we have another discovery mechanism: Shift. When you 
>>>> press it, all clickable things get highlighted (including the arrow). We 
>>>> chose Shift because it is something that you type often as part of a text, 
>>>> so it will be very likely that you will press it when working with Spotter 
>>>> as well. And this will get you to see that something happens.
>>> I am lazy and fearful of RSI. If I can avoid using the shift key at all, I 
>>> am quite happy. So I did not notice that the arrows where clickable.
>> 
>> :)
>> Same here.
> 
> What is RSI?
> 
> Most people I know use Shift to type an upper case, and we observed that when 
> people search, they often tend to still use uppercase. Not all, but many. 
> That is why we put this functionality on Shift. This does not mean that it is 
> enough, but we just wanted to increase the chance of people stumbling across 
> this without any documentation. It only partially succeeded.

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.

> Anyway, we should externalize the key bindings. Another thing on the to do 
> list :)

Sure, great!


>>> Here are a few suggestions that would fit my workflow.
>>> 
>>> I also think that "Selectors" should appear after classes and before 
>>> packages, and be called "Messages". Typically I want to open a specific 
>>> class, or a specific message in a specific class.
> 
> #Messages is not a bad name, but then again I also thought that #Selectors 
> was explicit enough :). What do others think?

Any interest in putting "Messages" after "Classes" and before "Packages"?

Another advantage of "Messages" is that "#m" is unambiguous. Currently, "#se" 
is ambiguous (#senders and #selectors), that is a serious annoyance.

>>> 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
> 
> Left/Right is used to move inside the text area (there is only one text field 
> in the whole UI), and that is why you cannot consistently use it for 
> navigating through results.
> 
> Navigating when the cursor is at the end is a tempting idea, but it implies a 
> mode that is not contextual (you need to things to look at). That is why I 
> would not want to have it in this interface.

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.

Cmd-arrows and Cmd-shift-arrows are slow and hard to reach combinations. They 
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.

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. So I am 
rather happy to just provide feedback for enhancements, so I can spend more 
time fixing the actual bugs. :-)

Regards.

Reply via email to