[TxMt Plugins] TmCodeBrowser as plugin problems

Allan Odgaard throw-away-1 at macromates.com
Thu Nov 3 11:26:45 UTC 2005

On 02/11/2005, at 22.16, Gerd Knops wrote:

> [...] The plugin is loaded to late, specifically after any  
> documents on the command line or any projects that are auto- 
> reloaded are instantiated [...] So is there any way you could load  
> the plugins earlier?

Sure -- I've moved the plug-in loading to before loading documents.

> Or alternatively (or in addition) provide enough for me to not need  
> to resort to hacks at all. All TmCodeBrowser would need is some  
> notifications:
> - when the current 'front' document changes (my hacks hook into  
> OakProjectController's setCurrentDocument: and windowDidChangeKey:  
> methods, as well as into OakDocumentController's setTextDocument:  
> method)

Instead of setCurrentDocument: and setTextDocument: I'd suggest  
overloading NSWindow's setRepresentedFilename: -- I use this with  
bindings, so it'll be called more than it needs to (i.e. check  
existing value before you start to recache stuff or similar), but it  
should be sufficient to give you notifications about when the user  
switches tab and when files are loaded, and when they are saved to a  
new location (I just tested it in the Clock Example PlugIn).

As for when it gets saved, this will trigger a setDocumentEdited: on  

Of course this is just provisional, until I provide a more official  
way to get these callbacks (I'm currently piecing together a more  
full featured API for all of this, incl. SCM support and will also  
make the HTML preview a plug-in, but it might be a week or so before  
I provide it -- actually, I may do 1.1 in 7-10 days and then offer  
the plug-in API as the first thing in the 1.2 builds (which of course  
should follow shortly after)).

> - and possibly when the current 'front' document's language changed  
> (I don't currently catch those, but would need it for my special- 
> cased Objective-C support)

I can fire a notification for this (in next build). I'll provide a  
user dictionary with:

    language name -- this is really just for display purposes
    scope name    -- this is what I'd suggest you use to match file  
types, since it also captures inheritance, like “source.ruby.rails”  
=> Ruby source
    path          -- most likely an NSURL to make it safe for the future
    window        -- I only want to put that in the dictionary if you  
need it, since I want documents associated with an interface that  
provide the necessary windows related methods (like  
addCellToStatusBar: etc.), and not a concrete object (especially not  
an NSWindow)

More information about the textmate-plugins mailing list