These programs haven't gotten past the "alphabetical ordering" completion - where all completion strings are just sorted alphabetically. This, regardless of the fact that my usage is quite different.
For instance,
- Code completion
- when I write std::c, 99% of the cases I want to type std::cout.
- when I write some_container.b, 99.9% of the cases I want to type some_container.begin()
- Email completion
- when I type ovi (as email address), 99% of the time I mean ovidiu.deac@...
- I have 4 email addresses I commonly use. They are quite separate from one-another - you can consider them 4 different businesses. So, when using a certain email account, email completion should prefer the emails that first wrote me to that account.
Assume you want to go to Bucharest, and you type it as destination ("Bucuresti"). Since it's such a "smart" site, it will give you a combobox with all destinations starting with "Bucuresti". I think there are about 7 or 8 such destinations, and 99.99% of the time you want to go to the main station ("Bucuresti Nord"). However, you have to manually select it, because the combobox is alphabetically sorted and the first found element is "Bucuresti Baneasa" (and by the way, almost no one goes there).
Finally, I want to give you a good example, a solution to this "alphabetical ordering" problem, one that I like. I'm sure there are others as well.
Microsoft Word - the "Fonts" combobox. First few entries are the last entries you've selected. After that, there's a separator line, and then items are arranged alphabetically. It served me fine over the years.
And yes, this could be applied to completion as well - first entries shown should be those you use most.