AndyS01 Posted January 27, 2014 Posted January 27, 2014 I want to create a user context menu that's different for .au3 files than it is for .js files but I cannot get the "if" part to work. I tried modifying the SciTEUser.properties file with these lines: user.context.menu=||xxx Def|1138|xxx Ref|1139|xxx Del| if $Language = "au3" user.context.menu=||$(au3) Def|1138|$(Language) Ref|1139|AU3 Del| if $Language - "cpp" user.context.menu=||$(au3) Def|1138|$(Language) Ref|1139|AU3 Del| But this doesn't work. I always see the first menu (xxx) when I right click in either the .au3 file or the .js file.
Developers Jos Posted January 27, 2014 Developers Posted January 27, 2014 Not sure where you got these "If $language" statements from, but I think the "user.context.menu" isn't configurable per lexer. It probably could be done via a LUA function. Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 27, 2014 Author Posted January 27, 2014 I just made those up - it's pseudo code. So if there's no way to configure a conditional menu, I'll have to do it in LUA. The LUA code shouldn't be a problem, but how do I spring it? Is there a hook I can put in so my LUA code runs at the time I do the right click to bring up the context menu? I'd do something like this: user.context.menu = "def-D|111|ref-D|222|del-D|333|" if lexer.language = "au3" then user.context.menu = "def-A|111|ref-A|222|del-A|333|" if lexer.language = "cpp" then user.context.menu = "def-C|111|ref-C|222|del-C|333|"
Developers Jos Posted January 27, 2014 Developers Posted January 27, 2014 Just to get you started: Edit PersonalTools.LUA in your %USERPROFILE$ directory and add this for demo: function PersonalTools:OnStartup() if self:IsLexer(SCLEX_AU3) then print("AutoIt3 lexer.") props['user.context.menu'] = "def-A|111|ref-A|222|del-A|333|" else print("Other lexer.") props['user.context.menu'] = "" end end Have fun, Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 27, 2014 Author Posted January 27, 2014 OK, I removed the user.context.menu from the SciTEUser.properties file, then I created a file called C:UsersAndyPersonalTools.LUA. In it, I put your code, then restarted the editor. Nothing changed, I still get the default menu Is there a configuration I have to make so the editor parses the PersonalTools.LUA file?
Developers Jos Posted January 27, 2014 Developers Posted January 27, 2014 You need to use the full SciTE4AutoIt3 installer which has all the extras including support for this lua file. SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 27, 2014 Author Posted January 27, 2014 I completely uninstalled SciTE4Autoit3 and reinstalled it, but I still have the default user context menu. The SciTE4Autoit3 that I downloaded was 14.01.22.21 and after installing it, the Help About reported Version 3.3.7 Dec 12 2013 20:45:19 Is there something else I need to do?
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 Wait! After I rebooted, I started getting the following error: C:\Users\Andy\PersonalTools.lua:1: attempt to index global 'PersonalTools' (a nil value) >Lua: error occurred while loading startup script Here is the contents on the C:UsersAndyPersonalTools.lua file: function PersonalTools:OnStartup() if self:IsLexer(SCLEX_AU3) then print("AutoIt3 lexer.") props['user.context.menu'] = "def-A|111|ref-A|222|del-A|333|" else print("Other lexer.") props['user.context.menu'] = "def-B|111|ref-B|222|del-B|333|" end end If I cleared the contents of the C:UsersAndyPersonalTools.lua file, and moved the lines that were between the 'function' line and the last 'end' line, to the beginning of the "AutoItTools:OnStartup()" function in the C:Program FilesAutoIt3SciTELUAAutoITTools.lua file, the code works! However, editing files in the C:Program Files directory violates the UAC rules, so I need to find out why the PersonalTools object is a 'nil' value so I can safely put my function there. BTW: I put other functions in the PersonalTools.lua file that use other objects (like AutoItTools:addConsoleWriteStr()), and the worked OK. It's just functions that use the PersonalTools objects that cause the error.
Developers Jos Posted January 28, 2014 Developers Posted January 28, 2014 You need to leave this line at the top of the file: PersonalTools = EventClass:new(Common) Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 That got me further, thank you I loaded a .au3 file and a .js file and at startup I got this error: C:\Program Files\AutoIt3\SciTE\Lua\Common.lua:20: Editor pane is not accessible at this time. >Lua: error occurred while loading startup script At this time, the user context menu does not have my stuff. However, each time I switch docs (Ctrl-TAB), I see the new context menus that are different for the .au3 file than for the .js file,and I don't get any more errors. Each time I load a new file in the same session, the menu stays where it was before loading it. Switching to another doc, then back to the loaded doc creates the correct context menu. I'm almost there
Developers Jos Posted January 28, 2014 Developers Posted January 28, 2014 (edited) I am sailing in the dark here... Please show me your PersonalTools.lua content and assume all other files are unmodified? Jos Edited January 28, 2014 by Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 Here is my PersonalTools.lua content: PersonalTools = EventClass:new(Common) function PersonalTools:OnStartup() print("hi") if self:IsLexer(SCLEX_AU3) then print("AU3 lexer") props['user.context.menu'] = "|" .. "|Find Definition | 1138" .. "|Find References | 1139" end if self:IsLexer(SCLEX_CPP) then print("CCP (JS) lexer") props['user.context.menu'] = "|" .. "|Function List | 1140" .. "|Find Selected Text in the Current Doc | 1141" .. "|Find Selected Text in All Opened Docs | 1142" end end I restored the AutoITTools.lua to it's original state and still have the same problem.
Developers Jos Posted January 28, 2014 Developers Posted January 28, 2014 Copied your content of PersonalTools.lua in a clean install and works fine for me. Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 I completely uninstalled/reinstalled SciTE4AutoIT3 and I put the hooks for the Demo() function in the PersonalTools.lua file and it didn't cause any errors at startup. I replaced the code in the Demo() function with my context menu code and did not get any errors at startup, and when I pressed Ctrl-Shift-F, I get the appropriate user context menu. The problem appears to be when I put it into the PersonalTools:OnStartUp() function I get the errors.
Developers Jos Posted January 28, 2014 Developers Posted January 28, 2014 Ahh... Got it now. Change the first line to: function PersonalTools:OnSwitchFile() Sorry about that Jos SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 (edited) That worked better, but if I'm only editing 1 file, I can't do a document switch. So I'm left with having to do something at startup time. I moved my context menu code to a separate function called xxx(), and I call it from the OnSwitchFile() and the OnStartUP() functions. I put in print statements to see what gets called. Here's my code: function PersonalTools:OnStartup() print("OnStartUp") xxx(self) end function PersonalTools:OnSwitchFile() print("OnSwitchFile") xxx(self) end function xxx(self) print("xxx") if self:IsLexer(SCLEX_AU3) then print("AU3 lexer") props['user.context.menu'] = "|" .. "|Find Definition | 1138" .. "|Find References | 1139" else if self:IsLexer(SCLEX_CPP) then print("CPP (JS) lexer") props['user.context.menu'] = "|" .. "|Function List | 1140" .. "|Find Selected Text in the Current Doc | 1141" .. "|Find Selected Text in All Opened Docs | 1142" else print("Not AU3 or CPP (JS) lexer") end end end When I start the editor for a single ,au3 file, I get this error: C:\Program Files\AutoIt3\SciTE\Lua\Common.lua:20: Editor pane is not accessible at this time. >Lua: error occurred while loading startup script OnStartUp xxx Not AU3 or CPP (JS) lexer It looks like at OnStartUp time,the editor is not completely created. Perhaps a different Onxxx trap. Is there a list of events I can hook into? Edited January 28, 2014 by AndyS01
AndyS01 Posted January 28, 2014 Author Posted January 28, 2014 I changed the OnStartUp event handler to OnOpen and it works the first time and every time I switch documents Thank you for your help. Andy
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now