Jump to content

Conditional user context menu contents


AndyS01
 Share

Recommended Posts

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.
 
 
Link to comment
Share on other sites

  • Developers

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.
  :)

Link to comment
Share on other sites

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|"

 

Link to comment
Share on other sites

  • Developers

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.
  :)

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

  • Developers

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.
  :)

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • Developers

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.
  :)

Link to comment
Share on other sites

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  :)
 

 

Link to comment
Share on other sites

  • Developers

I am sailing in the dark here... ;)

Please show me your PersonalTools.lua content and assume all other files are unmodified?

Jos

Edited 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.
  :)

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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.
Link to comment
Share on other sites

  • Developers

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.
  :)

Link to comment
Share on other sites

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 by AndyS01
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...