It's not a secret that the font picking dialogs in contemporary applications suck. They were designed back when graphical user interfaces were born, and when you had 5 different font faces available on your computer. The situation has changed dramatically since then, but the font selection interface only went through minor improvements, and that's not everywhere.
The task of designing a working, comfortable font chooser is hard. I don't know of any approach that would actually work in the wild. I was thinking about this for some time, however, and I seem to have some ideas. Most of them involve storing additional meta-information with the font files – probably in some additional font storage system. You just cannot present the variety of font faces efficiently with the limited amount of information.
This is the first observation, easy to make – for example – on a freshly installed Ubuntu system. If you look at the list of font, you will notice that there is about a dozen useful fonts installed, all the rest being fonts for various exotic scripts and languages. This is true even if your native language and script is pretty exotic – of course, you are grateful that the fonts for yours are there, but all the others are just littering the list. Yes, it's nice that you can go to some Chinese web site and see all the glyphs rendered properly, instead of empty boxes or random symbols. Even if you can't understand them. But the probability that you will ever want to actually select such a font face in your word processor or graphical editor is rather slim, and the effort of browsing through them – rather tedious.
That's why the first distinction that the system should make about the fonts is "will the user ever want to select them?" No point making them selectable if he won't. Note, that although you can do pretty good guessing based on the system's defaults and user's locale, this should be still configurable for the user – it should be possible to select the "system" fonts, just maybe with one click more than usual.
The "system fonts" would include:
The "user fonts" include:
"Divide and conquer" is a good way to tame complexity, so maybe we can continue in this direction. Have more font categories – for a start let's take the ones from @CSS@ specification: monospace, sans-serif, serif, fantasy, cursive. Make them tags, so that a font can be in multiple categories at a time. Add some more categories – the research and user testing will show which ones. Allow users to create their own categories, such as "beautiful" and "corporation's default".
Preselect some of the categories where it makes sense. For example, when picking a font for a terminal or plain text editor, it makes sense to only show the "monospace" category.
Today's font choosers will often have some form of font preview: usually, they will have the font's name written in the font itself. This doesn't work. Well, ok, it works sometimes, but not always. Consider a Japanese font – should its name be displayed in Kanji? It will be unreadable for most users. So in Romaji? it won't show how the font face actually looks!
The solution is more meta-data. Of course, when the user has selected some text and is picking a font for it – display that in the preview. But if not, you should display a "sample" that is configured per font. Some fonts will display their name, others will show the most characteristic letters, etc. The name should be displayed separately, with the system's default font.
Most modern font picking dialogs are getting it right already, but there are some that don't, so I will mention it. Don't display "Myriad", "Myriad Semibold", "Myriad Bold", "Myriad Italic", "Myriad Semibold Italic", "Myriad Semibodl Italic Extended", etc. as separate entries! Have checkboxes for these parameters, or at least a separate list for variants of the selected font.
That's all for now. I will probably come back to it, because it's something that bites me everyday, with GIMP's, Scribus' and Inkscape's completely unusable font management. I'm glad I don't use word processors.