Community
    • Login

    Finding available shortcut keys (originally "Where's the 'New Window' command?")

    Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
    53 Posts 7 Posters 5.8k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • TBugReporterT
      TBugReporter @Ekopalypse
      last edited by TBugReporter

      @Ekopalypse

      !
      (When the only tools you know about are hammers, all your problems tend to look like nails.)


      And now, question number umpteen-plus-one, regarding this part of your script:

          sk_mapper_hwnd = user32.FindWindowW(None, u'Shortcut mapper')
          if not sk_mapper_hwnd:
              print('Shortcut mapper was not found')
              return
      
          sys_tab_hwnd = user32.FindWindowExW(sk_mapper_hwnd, None, u'SysTabControl32', None)
          if not sys_tab_hwnd:
              print('SysTabControl32 was not found')
              return
      
          item_count = user32.SendMessageW(sys_tab_hwnd, TCM_GETITEMCOUNT, 0, 0)
          if not item_count:
              print('TCM_GETITEMCOUNT returned 0')
              return
      
          babygrid = user32.FindWindowExW(sk_mapper_hwnd, None, u'BABYGRID', None)
          if not babygrid:
              print('BABYGRID was not found')
              return
      

      I’d like to add “Abort, Retry, Ignore?” dialogs to these, but I’m getting tripped up on the “Retry” part. What would you consider to be the best practice for this?

      EkopalypseE 1 Reply Last reply Reply Quote 0
      • EkopalypseE
        Ekopalypse @TBugReporter
        last edited by

        @TBugReporter

        something like this

        while True:
            result = notepad.messageBox('','', MESSAGEBOXFLAGS.ABORTRETRYIGNORE)
            if result != MESSAGEBOXFLAGS.RESULTRETRY:
                break
        
        Alan KilbornA 1 Reply Last reply Reply Quote 1
        • Alan KilbornA
          Alan Kilborn @Ekopalypse
          last edited by

          It boggles the mind that someone would ever think to use the Stop Script menu item, in code, to “bail out”. Just write code that nicely returns, like @Ekopalypse 's main example from earlier. Stop Script should only be run from the menus as a last resort, a “kill my script” kind of thing. And I don’t think I’ve ever had a need to use it.

          TBugReporterT 1 Reply Last reply Reply Quote 1
          • TBugReporterT
            TBugReporter @Alan Kilborn
            last edited by

            @Ekopalypse said in Finding available shortcut keys (originally “Where’s the ‘New Window’ command?”):

            while True:
                result = notepad.messageBox('','', MESSAGEBOXFLAGS.ABORTRETRYIGNORE)
                if result != MESSAGEBOXFLAGS.RESULTRETRY:
                    break
            

            Okay, but where do I put the code that I want it to retry, and where do I put the code that tests whether to show the MessageBox? (without having to duplicate either of those?)

            @Alan-Kilborn said in Finding available shortcut keys (originally “Where’s the ‘New Window’ command?”):

            It boggles the mind

            Yeah, but isn’t it nice to know that your mind can still be boggled? 😁

            Stop Script should only be run from the menus as a last resort

            This was a stopgap measure for me - a placeholder until I could understand my difficulties with scope for variables. I think I got that under control; I just need to test it out and then I’ll do like you said.

            PeterJonesP 1 Reply Last reply Reply Quote 0
            • PeterJonesP
              PeterJones @TBugReporter
              last edited by PeterJones

              @TBugReporter said in Finding available shortcut keys (originally “Where’s the ‘New Window’ command?”):

              Okay, but where do I put the code that I want it to retry

              while True:
                  result = notepad.messageBox('','', MESSAGEBOXFLAGS.ABORTRETRYIGNORE)
                  if result != MESSAGEBOXFLAGS.RESULTRETRY:
                      break
                  # code to redo goes here
              

              or alternately, if it makes more sense to you,

              while True:
                  result = notepad.messageBox('','', MESSAGEBOXFLAGS.ABORTRETRYIGNORE)
                  if result == MESSAGEBOXFLAGS.RESULTRETRY:
                      # code to redo goes here
                  else:
                      break
                  # code to redo goes here
              
              TBugReporterT 1 Reply Last reply Reply Quote 0
              • TBugReporterT
                TBugReporter @PeterJones
                last edited by

                @PeterJones

                It seems to me that that structure won’t do the “code to redo” a first time without first putting up the A/R/I box…?

                PeterJonesP 1 Reply Last reply Reply Quote 0
                • PeterJonesP
                  PeterJones @TBugReporter
                  last edited by

                  @TBugReporter ,

                  It seems to me that that structure won’t do the “code to redo” a first time without first putting up the A/R/I box…?

                  Then put the code in whatever order you think is logical for your needs.

                  while True:
                     # code to do every loop goes here 
                     result = notepad.messageBox('','', MESSAGEBOXFLAGS.ABORTRETRYIGNORE)
                     if result != MESSAGEBOXFLAGS.RESULTRETRY:
                          break
                  
                  TBugReporterT 1 Reply Last reply Reply Quote 0
                  • TBugReporterT
                    TBugReporter @PeterJones
                    last edited by

                    @PeterJones
                    I’ve now tried this …

                    def bailout(msg):
                        print(msg)
                        user_response = notepad.messageBox(msg, "Error", MB_CANCELTRYCONTINUE | MB_ICONWARNING)
                        if user_response == MB_RESULTCANCEL:
                            notepad.runPluginCommand('Python Script', 'Stop Script')
                        else:
                            return user_response
                    
                    def main():
                        # ...
                        while True:
                            sk_mapper_hwnd = user32.FindWindowW(None, u"Shortcut mapper")
                            if not sk_mapper_hwnd:
                                action_to_take = bailout("Mapper window not found!")
                            if action_to_take != MB_RESULTTRYAGAIN:
                                break
                        # ...
                    

                    … but that gives me …

                    UnboundLocalError: local variable 'action_to_take' referenced before assignment
                    

                    Where did I go wrong?

                    EkopalypseE 1 Reply Last reply Reply Quote 0
                    • EkopalypseE
                      Ekopalypse @TBugReporter
                      last edited by

                      @TBugReporter

                      Scope problem. An if-block introduces a new scope and the variables defined there are only valid within this scope. Either the comparison with MB_RESULTTRYAGAIN is indented to have it in the same scope, or action_to_take must be defined at the same scoping level as the comparison.

                      1 Reply Last reply Reply Quote 1
                      • Alan KilbornA
                        Alan Kilborn
                        last edited by

                        I don’t know that I like the trend of this thread. It seems we’re teaching Python??

                        1 Reply Last reply Reply Quote 1
                        • Mendella ReplacementM
                          Mendella Replacement @Alan Kilborn
                          last edited by

                          @Alan-Kilborn please can i get your attention? I need help pls

                          Mendella ReplacementM 1 Reply Last reply Reply Quote 0
                          • Mendella ReplacementM
                            Mendella Replacement @Mendella Replacement
                            last edited by

                            @Mendella-Replacement said in Finding available shortcut keys (originally “Where’s the ‘New Window’ command?”):

                            @Alan-Kilborn please can i get your attention? I need help pls

                            PeterJonesP 1 Reply Last reply Reply Quote 0
                            • PeterJonesP
                              PeterJones @Mendella Replacement
                              last edited by

                              This discussion has stopped being about “new window” or about “shortcut keys”, and really ceased even being about Notepad++. And now it’s even attracting random posts as well.

                              This topic is being locked. If anyone has Noteapd++ related discussion, a new topic can be started quite easily; if you need to, provide a link back to this discussion for reference.

                              1 Reply Last reply Reply Quote 3
                              • PeterJonesP PeterJones locked this topic on
                              • Alan KilbornA Alan Kilborn referenced this topic on
                              • First post
                                Last post
                              The Community of users of the Notepad++ text editor.
                              Powered by NodeBB | Contributors