You might also be able to use the old extension.FilePattern property to set up a script that runs at the end of every ReadProperties.
Any interest in an OnLoad handler that runs right before the extension script gets evaluated, so that you can set up that sort of thing from within the startup script? (This would require some changes outside of LuaExtension - e.g. ReadProperties would have to call Load with an empty string if there is no matching extension.FilePattern property.) Any interest in per-buffer event handlers stored in the buffer table, e.g. buffer.OnChar so that you can set up buffer-specific functionality? Or better to keep the buffer table as completely user-defined, do-whatever-you-want-with-it type of thing? Bruce "Kein-Hong Man" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Neil Hodgson wrote: >> Kein-Hong Man: >> >>> editor.Lexer = SCLEX_PERL; >>> ... >>> My question is, shouldn't the green operator style appear >>> immediately, the first time test() is called? I have taken a >>> cursory look at the various calls involved, like RefreshStyleData, >>> InvalidateStyleRedraw and InvalidateStyleData, but so far I >>> haven't found out why this happens. Any ideas? >> >> This behaviour is caused by refreshing settings from properties >> after running the macro. A IDM_FINISHEDEXECUTE is sent after runing >> the macro which checks the needReadProperties flag. This has been >> reset by the call to set the WindowID in CheckEnvironment called from >> the extension code upon opening the file. Its likely this could be >> fixed by checking to see if the WindowID is the same before setting it >> and thus changing needReadProperties. > > Thanks, here is a follow-up. The following works for CheckEnvironment (no > longer flashes, green operators appears on first call): > > [scite/win32/DirectorExtension.cxx] > static void CheckEnvironment(ExtensionAPI *host) { > ... > char number[32]; > const char *oldNumber = host->Property("WindowID"); > sprintf(number, "%0d", reinterpret_cast<int>(wReceiver)); > if (strcmp(number, oldNumber)) { > host->SetProperty("WindowID", number); > } > ... > > However, various events (e.g. when we switch buffers) cause properties to > be reloaded again. Since ReadProperties resets based on file extension, > the lexer is changed back. When the document's styling needs refreshing if > we continue to edit, the custom styling is lost as the display reverts > back to the usual styling. > > Setting custom lexer/properties during OnOpen/OnSwitchFile kinda works > (exception is when closing a window.) So ReadProperties don't have to be > changed. Using OnOpen/OnSwitchFile doesn't look pretty, but I haven't > given better solutions much thought yet. The following example code uses > extman.lua: > > scite_OnOpen(function() > editor.Lexer = SCLEX_PERL > editor.StyleFore[10] = 255*256 > end) > scite_OnSwitchFile(function() > editor.Lexer = SCLEX_PERL > editor.StyleFore[10] = 255*256 > end) > > So, it looks a bit tricky, but custom styles, or custom lexing using > SCLEX_CONTAINER in Lua seems feasible. There might be some obscure > applications for this thing. Ideally of course, the Lua extension will > need to have some kind of OnStyle() for this to happen. SCLEX_CONTAINER > appears to reset its styles on ReadProperties, but this is no big loss if > we are modifying styles on a per-buffer basis anyway. There are probably > better ways of doing these things... > > -- > Cheers, > Kein-Hong Man (esq.) > Kuala Lumpur, Malaysia _______________________________________________ Scite-interest mailing list [email protected] http://mailman.lyra.org/mailman/listinfo/scite-interest
