Hi Allan,
nice coding (I'm learning Ruby step by step ;) )
Here my comments:
1) ESC behaviour If I press ESC while the pull-down menu is shown it takes Google's first suggestion. By my opinion it's more logically that pressing ESC will change nothing. Thus I wrote: ... res = TextMate::UI.menu(items.flatten) correction = (res) ? res['string'] : org ...
2) \n\n problem There's is still the problem if the selected text contains '\n\n' I managed it by relpacing all \n with a non-used character
3) Google returns only one suggestion
When there is only one suggestion, the command uses that, and makes the word a tab-stop.
By my opinion it would be better to show always a pull-down menu with the original and the suggestion. Google hasn't always right.
4)
Personally I think the menu is generally not wanted, so that part should probably be removed (and the first suggestion should always be picked).
As you mentioned the popping up of many pull-down menus is a bit confusing because I don't know which word is currently checked. But how about that way:
- If a single word will be checked - same behaviour (except the command doesn't return a snippet; it returns it as exit_replace_text)
- If a text is selected meaning at least one space is in it the command only returns a snippet of misspelled word without any changes. After that you can navigate with TAB through the snippet (misspelled words) and if you find a really misspelled word you can invoke the command again and so forth.
5) For security reason the command returns the snippet: new_str + "${0:}"
Attached is my version of gspell.
Hans