Jump to content
Sign in to follow this  
AndyS01

Conditional user context menu contents

Recommended Posts

AndyS01
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.
 
 

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
AndyS01

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

 

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
AndyS01

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?

Share this post


Link to post
Share on other sites
AndyS01

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?

Share this post


Link to post
Share on other sites
AndyS01

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.

Share this post


Link to post
Share on other sites
AndyS01

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

 

Share this post


Link to post
Share on other sites
Jos

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 Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Share this post


Link to post
Share on other sites
AndyS01

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.

 

Share this post


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

Share this post


Link to post
Share on other sites
AndyS01

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

Share this post


Link to post
Share on other sites
AndyS01

I changed the OnStartUp event handler to OnOpen and it works the first time and every time I switch documents :D

Thank you for your help.

Andy

Share this post


Link to post
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
Sign in to follow this  

  • Similar Content

    • Pagi
      By Pagi
       
      <a href="index.php=4143b27b41db0a40c499202865c3e24d" class="menuitem " target="\_self"> "Menu Item 1" </a>
      Can you tell me if it´s possible to click this menu button? If yes, how? Cause I have no idea, I think i should use _IETagNameGetCollection
    • nacerbaaziz
      By nacerbaaziz
      Hello
      I have an inquiry please
      when i use the control get focus
      it don't detect the menu item
      there are any Method to do that?
      i'll use that to make a custom screen reader in my program
      please help me to do that
      I am waiting for your answers
      greetings to you
      Thank you in advance
       
    • nacerbaaziz
      By nacerbaaziz

      Hello all
      I have a question please
      this  a question is about the context menu
      When i create a list box  Or combo box
      if i create a context menu for this list
      When i press the application key or the shortcut shift + f10
      the menu options is appear normally
      but When i create a List view
      if i create a context menu for this list
      When i press the application key or the shortcut shift + f10
      the menu options isn't appear
      But the right mouse button works normally
      I need a solution please because I deal with the screen readers users
      Unfortunately They can not use the mouse to navigate
      So I have to find a solution to activate keyboard shortcuts
      am waiting  for your help
    • SteveJM
      By SteveJM
      I have a working program currently driven largely through menu selections. I would like to add a toolbar where most of the tollbar button actions are basically the same as menu items, but quicker to access. I have been wading around in toolbar examples, MSDN pages etc, it's clearly going to be a bit of a slog to get everything right, including tooltips etc. I thought I would start with something simple to prove the principle.
      Using bits from the help file examples I have a small program that successfully displays a toolbar. However, what seemed like the most elegant way to deal with the button commands does not seem to work. My understanding was that a toolbar button fires a WM_COMMAND message, with the command Id set by the second parameter in the call to
      _GUICtrlToolbar_AddButton ( $hWnd, $iID, $iImage)
      so I though it would be a good idea to set this Id to the same value as my menu item Id; then it would run the same task which is what I wanted. This did not work. I am using message loop mode and would like to stick with this because some of my scripts run hardware at the same time as the gui; it is easier if I don't have to worry about code being interrupted with the hardware in an unknown state . So I added a handler for WM_COMMAND, with some cribbed display code to try and see why. The toolbar button defintely fired a WM_COMMAND message and the Id looked the same, so no explanation there.
      I guess the issue is with GUIGetMsg() which may be constructed to ignore all but a limited number of control handles, i.e. those made with the GuiCtrlCreate... commands; this is speculation.
      I would dearly love to find a tidy way to get around this. Having some controls handled in the message loop and some in a WM_COMMAND handler, performing the same task, feels ugly. I would be very grateful for further insight from someone experienced with handling a toolbar. Perhaps I should be trying to fire the menu item. I have attached a code snippet to try and illustrate the issue.
       
       
       
      ToolbarTrial.au3
×