Hi,
But, there is a problem. I invoke this command by writing a tmCommand which calls BASH. The used NSSpellChecker has no info about TM's spelling language and there's also no unique inSpellDocumentWithTag. In other words you loose the nice feature of having a ranked output and you have to set the language by yourself.
Not sure what you mean by "ranked output", but yes, you would have to pass the appropriate language setting as an argument. For the tag, I think you should use [NSSpellChecker uniqueSpellDocumentTag] instead of passing 0, but it may not matter; it's not clear to me if you should use closeSpellDocumentWithTag: when done.
By 'ranked output' I meant the following: If I type, for instance, 'beef' and call the autocompete function. It will list: beef beef's beefcake beefcake's ....
Then I choose 'beefsteak'. After writing further stuff I type 'beef' again and call autocomplete. Now it will list: beefsteak beef beef's beefcake ...
'beefsteak' will listed at the top because NSSpellChecker remembers my last choice. And this is done via an unique inSpellDocumentWithTag.
If I write in 'a.m':
int utag = [NSSpellChecker uniqueSpellDocumentTag]
it causes an error because the program is started outside of a cocoa application; and there is no SpellDocument referring to. Furthermore if the a.out is executed the NSSpellChecker is also closed, so there is no way to memorise my choices. (?)
I have no idea to pass the tag and language info from TM to a.out!
The same for language: If I type language:nil NSSpellChecker takes the language which is set in the document. But there is no document for a.out.
I don't know whether I'm right, but I believe that NSSpellChecker can only invoke inside of TM or, maybe, by putting it into a tmPlugin to get this nice feature.
Sure, there are numerous features of the spelling system that won't be integrated correctly unless it's in the application, and maybe a tmPlugin would solve that. I was just suggesting a possible way for someone to get dictionary completions.
Here is my humble test script 'a.m':
#import <AppKit/AppKit.h>
[...]
Interesting...did you need [NSApplication sharedApplication]?
Well, I don't know. If I leave it out the program doesn't run.
You can replace this command within the Ruby script. Hint: This code (Ruby) is not utf-8 save!
If you're referring to my example, I borrowed the Ruby script from elsewhere in TextMate. What part of it isn't UTF-8 safe?
I tried it out with language "de". I wrote 'Vermö' but nothing returns because the Ruby line:
word = Word.current_word(/\w./)
interprets the 'ö' as word boundary. If I type 'Vermög' it lists all words beginning with 'g'.
If I use TM directly and type
/PATH/TO/a.out "Vermö" "de"
it works perfectly.
To solve this problem you have to write within the Ruby script instead of
word = Word.current_word(/\w./)
word = `cat`
and set the input behaviour of the command to 'Selection' or 'Word'
###########
I don't know but it seems to me that the easiest way to use this functionality is to wait for Allan. I guess to implement this in TM directly is the cleanest way (?)
Cheers,
Hans