How does the classic Win32 ListView handle incremental searching?
devblogs.microsoft.com
devblogs.microsoft.com
What! This is crazy! There can't be that many people who expect type-to-search to work that way.
That assumes, of course, that the website isn't using some ridiculous drop-down component that doesn't support keyboard interaction or tab handling. Sadly, that's about 50/50 these days.
It's a little less useful when you're searching for Ireland, Republic of Ireland, or occasionally Éire.
And there's also the case of dropdowns putting some most frequent countries at the top, so you spend ages scrolling to find the correct spelling, when listed above "Afghanistan".
Also fun when you're given flag emojis to choose from, sorted by country name, and you don't know which of UK/GB/EN they have used to sort with, and whether you should look for St. George's cross or the Union Jack.
SS only works when the field is using the mechanism described in the blog, therefore it doesn't work every time
I understand that it's too exceptionalist / nationalist to give the USA a special slot at the top, but ... If I'm on an English page registering for something run by an American company, there's really good odds that I'm in the USA.
Could we just do the top 3 by population, before switching to alphabetic? I'm willing to hit Down twice to get past India and China.
I think using geo IP is borderline spyware behaviour.
Becouse the databases are derived from some sort of spyware, right? Or are ip ranges public on country level? The city location has to be spyware derived?
On my personal laptop, I have en-US, because I don't know why. Maybe it is the default for Chrome?
I have en-AU set on macOS at a system level but Chrome seems to have ignored that.
I just reconfigured Chrome to add en-AU before en-US, so now my Accept-Language header is en-AU,en-US,en
My work laptop has macOS set to en-AU but Chrome set to en-GB. I'm not sure how en-GB happened, possibly something my employer did for whatever reason.
E.g. German would be like 3 countries, unless Austria and Schweiz have their own language code. Uk and US got different codes.
Diaspora languages could just have 0 added top items, etc.
I also have us-en, to avoid these crappy machine translations you get sometimes.
Officially, we have de-DE for German German, de-AT for Austrian German, de-CH for Swiss German, de-LI for Liechtenstein German – Chrome knows all of those. Plain "de" means German of unknown variant/dialect, but statistically is more likely Germany than any other country.
German is also a secondary official language in Belgium (de-BE), Luxembourg (de-LU), Namibia (de-NA), and also in one region of Italy (de-IT), but software awareness of those German variants is less common (Chrome doesn't know about them, but some other software packages do, e.g. ICU and Microsoft .NET).
With corporate VPNs it often doesn't work anyway. Even though I'm not in the US, I sometimes am forced to use the US VPN access point (e.g. because someone forgot to add the IP range for the non-US VPN access points to the firewall rule for internal service X, and if I complain it will be fixed in a day or two, but I need to use internal service X right now). While I'm doing that, websites will think I'm in the US, even though I'm on the other side of the planet.
For city-level it gets more complicated. Every provider of IP geo-localization has its own way of doing it. I guess google uses aggregated information from web searches to figure out the city/region for a given IP range... and sometimes it blatantly fails, because ISPs might allocate IPs in unexpected ways for their algorithms, or move them around to different cities/regions. I'm often getting geolocalized (by IP) to a totally different part of the country. I've seen similar behaviours in other countries and with other ISPs, so it's not something that can fail relatively easily.
Then there might be another source of information, which is more spyware-like. Android devices (via the Google play services, I think) participate in constructing a database of cell tower IDs and WiFi access point MAC addresses along with their GPS-derived estimated geographic position (see more: https://console.cloud.google.com/apis/library/geolocation.go...). Apple has a similar service, too. Theoretically the could use the submitted information to geolocalize the source IP range, but I'm unsure whether they actually do it.
Pet peeve: when the website obviously has 99% of users who will pick "United States" for country, but they use an alphabetical list of all the countries in the world.
Not exactly those words, but I’ve seen it.
- Cabo Verde - Cambodia - Cameroon - Canada
So if you were typing 'can' instead, you would always be correct (today) even if one of the earlier ones were removed.
And it especially doesn't make sense for such an long-standing core UI toolkit to not have these kinks ironed out. These behaviours are already handicapped by their obscurity, no reason to make them behave counterintuitively on top of that
The behaviors also aren’t that obscure, assuming you learn that you can select by typing a character in the first place. When used regularly, you then rather quickly learn what happens when you type multiple characters.
Suppose you have a list:
- jaguar
- llama
- lorax
- manatee
Typing 'l' should position the cursor on 'llama'.Typing another 'l' would signal that you want the next 'l' element and move the cursor to 'lorax'.
To correct the position, you'd either have to hit backspace to go to the first 'l' item, press 'a' to move to the first 'lla' item (I'd hope... but if the control went to the first 'la' item - ignoring the second 'l' I typed, then I'd say the control has gone out of the ballpark)
Or maybe the user moves the cursor with one of the cursor keys to position the cursor on the desired item.
In practice, the amount of actual words that have the same first letter as the second letter is minuscule. Even words that have the same letter appearing twice in sequence.
It's just optimized for the most convenient scenario.
In the enable1.txt wordlist of 172,823 English words, there are 126 starting with a double letter, and those are largely the variations of oohs, aahs, oomphs, oozes, aardvarks, eels, eerinesses, and oodles of oocytes, oolites, oophytes and oologists near oomiaks.
Tested with some text files on Windows Explorer on Win11, typing lla actually moves from llama, to lorax and back to llama. I also put alpha on the list to see if it would jump to that, but it didn't.
That method requires you to very explicitly look at what is selected each time you press 'B', as opposed to just typing 'bagend' or 'bilbo'. Maybe it makes sense if you can't type? In any case, I added a secret preference to do it the right way, and then quit.
Imagine if the web browser incremental search worked that way...
That's the behaviour that I programmed for the listbox in the Address Book for Microsoft's email product, which you should see in MS Outlook (they might have changed the behaviour since then).
The main difference for that address listbox versus most listboxes/listviews is that the address listbox will update the display to show the sublist of matching items (and do the hard work of updating the scrollbar to show the size of this sublist and how many items are in view).
The expectation was the user would move the cursor with arrow keys or type more or the desired substring if the cursor wasn't placed on the desired item.
This is also the case when navigating folder hierarchies in Explorer, which, using letter navigation, is similar to navigating nested menus. After a while I know that a certain folder is L Enter C Enter S S Enter P P Enter, and that way is offen quicker than going by prefix sequence (second method), also because you can hit the same key in sequence faster than different keys.
Especially not on systems where companies think your file system and the start menu are advertising space. That gets you multiple entries starting with “Microsoft ”, “Adobe ”, “Google ”, etc.
Yes, it may (still) be possible to rename those (for third party applications, you can on MacOS, for example), but I bet most users won’t do that.
Another more intuitive solution for menus with long common prefix is to simply type the next unique letter: pa or pb in
PrefixA
PrefixB
No need to type the full PrefixA
If you run out of accelerator keys, any key you type will activate an accelerator, so you wouldn't even have a way to do a sequence? So there is simply mode 2 possible
And folder hierarchies aren't stable unlike menus, so you loose precision if another folder is created /deleted.
Though if you really have to frequently use such long sequences it might be easier to add this folder to a custom favorites panel and use two keys: shortcut to invoke a panel, P accelerator for the name
It's harder to do these sort of guerrilla things when every line is code-reviewed. Or maybe you snuck it past your peer?
sudo dtrace -qn 'pid$target::getenv:entry { printf("getenv ( %s )\n", copyinstr(arg0)); }' -c "/bin/ls -l"
It makes sense if you can type: that is, if you can type while looking at the screen instead of the keyboard because why would you look at the keyboard? To find the keys you want to press, one by one?
Of course, you can still keep both with a fix to this issue unless there is some other more intricate one
The first mode is also crucial for menus.
If the user can press "c","a","t" and see "cat" somewhere, then it makes sense that the "catapult" is selected, and that typing "t" might to go "cattle".
However if you don't have that meta-state and a way to display it, then each individual keypress becomes a matter of picking a new selection based on the current selection. Hence the ruleset of "if the selected item starts with the same letter, go to the next item with the same starting letter, otherwise go to the first item that starts with the letter."
That's why you can match llama by typing "lla"
windows 9x was probably the last time any user interface tried to be this efficient, now it's just click the arrow and it will make sure to slide the next photo in very slowly in case you forgot that you're waiting for the next photo to appear
It's a pity this kind of attention to detail is becoming obsolete in favor of flashy but unconvenient UI
I expect this behaviour on any list I find in a Windows app. I also expect keystroke consistency, like press F2 to edit... but all this UI things seems old fashioned.
I assume I don't get that on web apps, but "modern" Windows Apps are also deprecating these conveniences
I wonder if in the apple sphere they're suffering this kind of degradation.
Here is how Microsoft recommends you do find-and-replace in their simple user-friendly ~20 year old note-taking app, OneNote [0]:
1. On a blank page, type the replacement text to use, or find it on a page.
2. Select the replacement text, and press Ctrl+C (⌘+C on Mac) to copy it to the clipboard.
3. Press Ctrl+F (⌘+F on Mac) to find on page, or Ctrl+E (⌘ + Option + F on Mac) search all open notebooks.
4. In the search box on the top left for Windows, top right for Mac, type the text to find.
5. In Windows, you can select Pin Search Results at the bottom of the results list, or press Alt+O to pin the list. Mac is already pinned.
6. In the Search Results pane on the side of your window, select a search result (a text link next to a page icon) to jump to the page where OneNote has highlighted the text it has found.
7. On the page, double-click or select each highlighted occurrence of the text, and press Ctrl+V (⌘ + V on Mac) to paste your replacement text over it.
Note: When you replace a word or phrase in a sentence, you might need to type a space after the new text is pasted.
8. Repeat steps 6-7 for each additional page in the search results list.
Tip: If you've got a lot of replacements on a single page, copy your text to Word, find and replace the text, and then paste back into OneNote.
[0] https://support.microsoft.com/en-us/office/find-and-replace-...
Definitely, it’s an industry-wide ailment caused by a focus on the web and neophyte users.
The irony is that this power user functionality didn’t impede new users, it’s just been gradually forgotten by folks only raised on the web, where almost everything had to be reimplemented from scratch.
We gained a lot but lost a lot as well.
The UI’s of the 1990s were often designed using actual user studies, with years of hard-fought learning on how to do things in a way that is discoverable, Accessible, and with effective shortcuts for power users. I worry we’re losing all of this as we reinvent the UI without understanding what we’re rewriting.
Relevant XCKD: https://xkcd.com/1053/
Gen Z, or Gen Alpha, or whatever you call teenagers these days, aren't born knowing how to use a desktop computer. They're born knowing how to use smartphone apps. From what I hear, many of them are terribly ill-equipped to be actually productive with desktop.
They're no different from just an office guy who never used a computer in the 90s or from a kid or got a PC from his parents in the 00s.
Why would the GUI have to adapt to modern users when a new user now is no wiser in practice than a new user back then?
One of the easiest first steps when creating your own identity as the new generation is to refuse your predecessors wholesale. This goes triple for something that is about fashion, which GUIs to some extent are a fashion statement.
It would get rediscovered in the future same way old ideas are recycled and are new again.
I'm afraid the prevalence of touch-screen use and the lack of focus on power users by UX designers is making the degradation permanent.
Even if you assume the same level of skill and effort will be used (it won’t) there are still many paths and forks to take.
Consider that most “ui designers” come from graphic design or psychology backgrounds, while 90s UI was designed by engineers. Those groups have different values and make different decisions.
And, like others said, the existence of these niceties does not detract from the experience for non-power users. It's simply a bonus for more experienced users, and these bonuses are slowly going away as more and more developers choose the "give up once the thing kind of works" strategy.
Everything is about minimizing expense to an extreme degree to drive “growth” in the current tech economy, so there’s little focus put into things that do not test as an immediate boost to marketability.
Everything will be optimized towards the clueless.
But to be honest, trying to sell any kind of "advanced software tools" (like compilers or other very specialized tools that provide small gains compared to existing free ones) for "power users" is extremely hard. Was involved in something similar in ~2010 and many power user think they don't need it or they can do it better themselves but anyhow does not want to pay for a complex tool.
Probably the web interfaces is exactly a manifestation of that, many users trying to implement things themselves because they know better. But I prefer writing interfaces with React than with Win32 so I think there is progress.
Which advanced UX do you implement? MacOS? Windows? Gnome or KDE behaviour? CDE?
One could sniff the user-agent and adapt to a recognized OS behaviour but we all see how superficially shallow the UX on the web is. I've given up on expecting anything advanced.
Which advanced UX do you implement? MacOS? Windows? Gnome or KDE behaviour? CDE?
Browser advanced UX. Not current browser UX, but a hypothetical one which doesn’t suck.
Also, I focused mostly on the web, but things like Apple/Gnome removing menus and titlebars are a problem as well.
From another fellow grumpy old-timer who appreciates details, this looks more like "undiscoverable alternate mode that is invisible to the user, hacked in by a too clever engineer" than power user nicety
This whole discoverability bs is what has driven UI into intuitive uselessness for everyone, when there’s actually two groups: first (/one) time users and just users (“power” or not). For some reason modern UX designers think everyone is in the first group. Even if an app is naturally multi-time heavy-use.
there's practically infinite space on screen since that space has a time dimension and can also be tied to context which also varies. Like with this feature: you can show a tip on the first few searches within a list, you don't need to permanently keep the explanation on screen. Or you can show a hint with ll by having a different style of the second l or something similar
Undiscoverability is precisely one big reason why these things get axed since they're not used, so forgotten about in other contexts (web, new UI framework etc)
And yes, needing to reading random articles like this is a major fail in discoverability as you decrease reach and increase cost for the many poor users
And while we are at it, "lack of use" is not a good reason to axe features. Some things, by their nature, just don't get used as much but when they are needed they are needed. Product designers have become slaves to their telemetry and metrics, and are letting the tail wag the dog.
> expects everything on the platform to behave predictably and consistently.
and poor discoverability makes this expectation even less likely to be met
Similarly
> "lack of use" is not a good reason to axe features.
But it is a great reason not to implement features in the new framework since you're not even aware of them because they're undiscoverable! (I know, I know, not to you, you've already wasted time doing the discovery the hard way by reading some obscure blog, but then you go teach the devs of those new frameworks!)
Also, what is this imaginary telemetry that is able to track that I want ll to land on llama instead of blindly following invisible-mode#1? It would be awesome if product designers were that competently informed, we would've gotten universally great UIs!
The constant praise for web UI despite the issues always irritated me deeply.
It's like you're supposed to only say nice things about where we are because other people are saying that. And the more impressionable among us believe that because the Thought Leaders are saying that, then it is truth. And the circle continues.
Take a simple link navbar with a menu of links on a webpage. This has existed since forever. It should be that you can open the menu with your keyboard and use up/down to navigate it. But that means writing JS code. So devs who did it from scratch didn't do it, and only those who used an UI library with that already programmed in by someone else got it.
IDK man, every project from a single developer who uses Win32 widgets is infinitely better, more predictable, more usable, and more professional looking than any shitty electron app.
(this is not Emacs boosterism. I could have used any other text editor there)
The Spy (or was it Spy++) app from the Windows SDK was very useful to figure out the best place to subclass the control, along with logging Windows messages and params sent to your subclassed control's WndProc.
The following is an account as an end-user. It is an old Win32 program from the 90s. Remember the theme styling controls from Desktop->Properties etc? For example you could change the white Control background to something else. Even if it never worked well enough everywhere, it was supported by native Controls. And in this application too. Recently the developer must have migrated the app to a new SDK (I guess). Not only did the clickable buttons lose all their borders, making them harder to eye-track, but all those native Controls? Lost their legacy theming support. Changing the background color no longer applies in the new version, it remains white.
And that's unlikely developer's own work. I assume the SDK adheres to newer guidelines itself.
Unfortunately there is no user-level documentation.
where on a save as dialog you rename an unrelated file, then it defaults the save filename to that renamed file, so you change it, and hit save, then it says "this will replace x file"
similarly on that same dialog with deleting the file something similar happens.
Some people forget or don't realize that Microsoft was pumping out software hand over fist like this, creating UX that flowed when most software worked like Word Perfect and you needed a giant cheat sheet to get anything done.
When I need to get anything done/fixed/working on windows, I first type "control panel", to get the age-old settings UI that was unbroken in win7. From there, it is still possible (on win10 - I have avoided win11 so far) to configure most things in a sane way. Whenever I land on one of the newer tools, they present a mix of - "you can't/shouldn't view/see that" - "you should not be able to change that". - "some settings have been hidden/are managed by your organisation"
When I hit the newer screens, I cannot see my IP address, I cannot see my DNS providers, I cannot change my DNS providers, I cannot enable/disable my networks.
Also, to get back on track: Search/incremental keyboard handling/sorting on lists of stuff is horrendously "I eat crayons, and my product manager eats crayons!" bad. Some of microsoft's own system list screens no longer allows you to easily navigate or search your lists. So you are presented with rubbish like having to page through () hundreds of items, presented 3 or 5 elements at a time (really, on a monitor with a resolution exceeding HD??)
A pet rant, truncating list text fields to arbitrary "let's just show the first 16 characters, and then ...", still on the super-HD screen.. sigh.
On some of them, no variant of incremental keyboard search works, so with the destroyed scrollbars, you are left with manually moving through them.
() assuming the "scroll" interface even allows paging or using the cursor keys.. The modern scrollbar is the crucified victim of what modern crayon-eating humans have lost: - the size of the scrollbar thumb used to indicate the size of the list and the page size, so you could feel if you were scrolling a list of 20.000 or 300 items. - clicking beside the scrollbar thumb used to jump one page at a time, possibly with one single item overlap, so you could "tell" that you had jumped an exact page. - scrollbars used to have little arrows to let you jump 1 item/row at a time. - scrollbars used to be VISIBLE, so you could orientate yourself in the document ("I see, I am near the bottom of the document/list"). - nowadays, instead, you have to play a mix of "hide the mouse" and "gee, I wonder if you can spot WHICH rectangles in this window have extra available scrollbars, IF YOU HOVER IN THE RIGHT PLACE?"
One of the most common place name prefixes is "Llan" which means "church", as in that Llanfair... place with a long name for the tourists.
If you were to load a list of community wards in Wales and type L, that would get you to Laleston (near Bridgend), and typing L again this way would make you step through a few more before the "Llans" start.
Worse still, this way there doesn't seem to be a way to type "Llanberis" (near Snowdonia/Eryri, highly recommended for hiking trips!) because it will interpret the second L as a sign to jump from Laleston to Lampeter, and then the A will put "La" not "Lla" in the box? Or does it remember that you typed "Lla" and fill this in when you press the A key?
EDIT: read it again and this is actually in the last paragraph. It _does_ remember the second L you typed.
I'm positive it was MS software, but I can't recall now. I only see the memory.