• Login
Community
  • Login

List of all assigned keyboard shortcuts

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
47 Posts 17 Posters 32.3k 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.
  • W
    William Rutkowski
    last edited by Nov 12, 2016, 11:16 PM

    https://drive.google.com/file/d/0B86nuTd5nMTKaENHcmliUC1kdnc/edit?usp=sharing

    This comes from the Notepad++ sites homepage. Scroll down to the bottom it is the last option. Hope it helps…Peace…

    1 Reply Last reply Reply Quote 1
    • I
      IvyNo
      last edited by May 22, 2019, 4:27 PM

      Hi,
      I know these posts are pretty old, but I hope I can still get the list.
      Would you please send it to my email ivy.noname@web.de
      Thanks a lot

      1 Reply Last reply Reply Quote 0
      • G
        guy038
        last edited by May 23, 2019, 10:21 AM

        Hello, @IvyNo,

        These next days, I’ll try to update the old list of Notepad++ and Scintilla commands, which I talk about in my first post of this thread, above. So, from the v7.2 version you’ll get the last v7.7 version of this file.

        Remember that this file is, simply, a personal synthesis of some data from the 3 files Parameters.cpp, keys.h and menuCmdID.h, normally located in folder notepad-plus-plus-7.7\PowerEditor\src of the archive notepad-plus-plus-7.7.zip

        So, please, let me a couple of days to get it right and I’ll send you this Synthesis.cpp file, as well as the default complete list of N++ v7.7 shortcuts, bye-mail ;-))

        Best Regards,

        guy038

        1 Reply Last reply Reply Quote 4
        • I
          IvyNo
          last edited by May 24, 2019, 5:04 PM

          Hi Guy038,
          Thanks a lot for your fast answer.
          There is no hurry, take your time, I am happy to get the list, no matter when :-)
          Kind regards

          1 Reply Last reply Reply Quote 0
          • G
            guy038
            last edited by Jun 14, 2019, 10:34 AM

            Hi, @IvyNo,

            Sorry for the long delay :-( First, I spent a week on vacation for a family celebration ( at the seaside !), then I helped a friend of my wife’s for computer problems and I had to prepare for my daughter’s future move, next Saturday ! And, of course, I delved into the source files of Notapad+++ 7.7.0 !

            I sent you a mail, some minutes ago, with 6 attached files :

            • Synthesis.cpp, which recapitulates all Notepad++ 7.7.0 internal commands and corresponding Scintilla messages

            • SCI_list.cpp, which contains all messages and values of the ...\Scintilla\include\Scintilla.h file

            • Shortcuts_list.cpp, which lists all default shortcuts of Notepad++ 7.7.0

            and, for information :

            • Define_list.cpp, which recapitulates all #define statements, referring to a numeric or string value, found in all the source files

            • Enum_List.cpp, which contains all enumerations from the ...\Scintilla\include\Scintilla.iface file

            • Keys_US.cpp, which lists all the scan codes of a traditional US keyboard

            Note :

            • These .cpp files could have been renamed as simple .txt files. But, by doing so, we just take advantage of the highlighting of numerical values and strings and of the folding, due to the pair { and } :-))

            I just hope that you’ll find useful some part of all that stuff, anyway !

            Best Regards,

            guy038

            1 Reply Last reply Reply Quote 3
            • Д
              Дмитрий Рыжов
              last edited by Aug 11, 2019, 6:35 PM

              Hi @guy038
              I have been looking for a similar table for a long time. Can I see the results of your labors? jang.spb@gmail.com

              1 Reply Last reply Reply Quote 0
              • E
                Ekopalypse
                last edited by Aug 12, 2019, 11:45 AM

                If I could iterate through it in a python code snippet would work

                Just in case some else has the same requirement

                import ctypes
                import ctypes.wintypes as wintypes
                
                user32 = ctypes.WinDLL('user32', use_last_error=True)
                
                NPP_HANDLE = user32.FindWindowW(u'Notepad++', None)
                
                MIIM_SUBMENU = 4
                MIIM_STRING = 64
                
                class MENUITEMINFO(ctypes.Structure):
                    _fields_ = [ ("cbSize"       , wintypes.UINT),
                                 ("fMask"        , wintypes.UINT),
                                 ("fType"        , wintypes.UINT),
                                 ("fState"       , wintypes.UINT),
                                 ("wID"          , wintypes.UINT),
                                 ("hSubMenu"     , wintypes.HMENU),
                                 ("hbmpChecked"  , wintypes.HBITMAP),
                                 ("hbmpUnchecked", wintypes.HBITMAP),
                                 ("dwItemData"   , wintypes.LPVOID),  # ULONG_PTR
                                 ("dwTypeData"   , wintypes.LPWSTR),
                                 ("cch"          , wintypes.UINT),
                                 ("hbmpItem"     , wintypes.HBITMAP),]
                
                npp_menu_handle = user32.GetMenu(NPP_HANDLE)
                
                def get_configured_shortcuts(menu_handle):
                    menu_items = user32.GetMenuItemCount(menu_handle)
                    for item in range(menu_items):
                        uitem = item
                        fByPosition = True
                        mii = MENUITEMINFO()
                        mii.cbSize = ctypes.sizeof(mii)
                        mii.fMask = MIIM_STRING | MIIM_SUBMENU
                        lpmii = ctypes.byref(mii)
                
                        user32.GetMenuItemInfoW(menu_handle,
                                                uitem,
                                                fByPosition,
                                                lpmii)
                
                        if mii.hSubMenu:
                            get_configured_shortcuts(mii.hSubMenu)
                
                        mii.dwTypeData = ctypes.cast(ctypes.create_unicode_buffer(mii.cch+1), ctypes.c_wchar_p)
                        mii.cch = mii.cch+1
                        mii.cbSize = ctypes.sizeof(mii)
                        user32.GetMenuItemInfoW(menu_handle,
                                             uitem,
                                             fByPosition,
                                             lpmii)
                
                        if '\t' in mii.dwTypeData:
                            shortcuts.append(mii.dwTypeData.split('\t'))
                
                
                shortcuts = []
                for i in range(user32.GetMenuItemCount(npp_menu_handle)):
                    submenu_handle = user32.GetSubMenu(npp_menu_handle, i)
                    get_configured_shortcuts(submenu_handle)
                
                _max_length = len(max([x[0] for x in shortcuts], key=len))
                notepad.new()
                editor.setText('\r\n'.join(['{0:<{2}} : {1}'.format(x[0], x[1], _max_length) for x in shortcuts]))
                
                A 1 Reply Last reply Aug 12, 2019, 12:34 PM Reply Quote 2
                • A
                  Alan Kilborn @Ekopalypse
                  last edited by Aug 12, 2019, 12:34 PM

                  @Ekopalypse

                  Interesting approach to get some of the shortcuts. :)

                  E 1 Reply Last reply Aug 12, 2019, 12:34 PM Reply Quote 0
                  • E
                    Ekopalypse @Alan Kilborn
                    last edited by Aug 12, 2019, 12:34 PM

                    @Alan-Kilborn

                    Why some? What did I miss?

                    A 1 Reply Last reply Aug 12, 2019, 12:39 PM Reply Quote 0
                    • A
                      Alan Kilborn @Ekopalypse
                      last edited by Aug 12, 2019, 12:39 PM

                      @Ekopalypse

                      Well, just as one example, most (if not all) Scintilla commands that have shortcuts in Shortcut Mapper are not output by the script.

                      E 1 Reply Last reply Aug 12, 2019, 12:42 PM Reply Quote 2
                      • E
                        Ekopalypse @Alan Kilborn
                        last edited by Ekopalypse Aug 12, 2019, 12:42 PM Aug 12, 2019, 12:42 PM

                        @Alan-Kilborn

                        You are right, how could I miss those?
                        Damn it.

                        A 1 Reply Last reply Aug 12, 2019, 12:47 PM Reply Quote 1
                        • A
                          Alan Kilborn @Ekopalypse
                          last edited by Aug 12, 2019, 12:47 PM

                          @Ekopalypse

                          I have seen this thread before, but didn’t have any new ideas about it. When I saw your recent efforts, I thought it was interesting as I hadn’t thought about that kind of approach. So now I’m thinking, if the Shortcut Mapper info is left in memory (after being invoked once?), could some ctypes magic find it and report it? I don’t know enough about the internals, IIRC doesn’t it use something called BabyGrid or something like that?

                          E 2 Replies Last reply Aug 12, 2019, 12:54 PM Reply Quote 2
                          • E
                            Ekopalypse @Alan Kilborn
                            last edited by Aug 12, 2019, 12:54 PM

                            @Alan-Kilborn

                            if the Shortcut Mapper info is left in memory (after being invoked once?), could some ctypes magic find it and report it

                            Not sure about it, digging in npps memory seems to be a dangerous place :-D

                            1 Reply Last reply Reply Quote 1
                            • A
                              Alan Kilborn
                              last edited by Aug 12, 2019, 12:59 PM

                              Maybe it would be best if N++ itself had a feature to export this infos. :P

                              E 1 Reply Last reply Aug 12, 2019, 3:58 PM Reply Quote 1
                              • E
                                Ekopalypse @Alan Kilborn
                                last edited by Ekopalypse Aug 12, 2019, 1:16 PM Aug 12, 2019, 1:15 PM

                                @Alan-Kilborn

                                the shortcut mapper dialog seems to be the trusted source in this situation, isn’t it?
                                As it is a blocking dialog we start it in a different thread and then searching for the tabsyscontrol
                                and then with some magic ctypes we should be able to get the shortcuts currently configured.
                                Hmm, fun project - I guess I’ll give it a try :-)

                                1 Reply Last reply Reply Quote 2
                                • E
                                  Ekopalypse @Alan Kilborn
                                  last edited by Aug 12, 2019, 3:58 PM

                                  @Alan-Kilborn

                                  unfortunately TCM_SETCURSEL doesn’t trigger babygrid to be updated therefore I had to use keybd_event but seems to work.

                                  import ctypes
                                  import ctypes.wintypes as wintypes
                                  from threading import Thread
                                  import time
                                  
                                  user32 = ctypes.WinDLL('user32', use_last_error=True)
                                  
                                  def start_sk_dialog():
                                      notepad.menuCommand(MENUCOMMAND.SETTING_SHORTCUT_MAPPER)
                                  
                                  
                                  sk_mapper = Thread(target=start_sk_dialog)
                                  sk_mapper.start()
                                  time.sleep(1)
                                  
                                  WM_USER = 1024
                                  WM_CLOSE = 16
                                  
                                  TCM_FIRST = 4864
                                  TCM_GETITEMCOUNT = (TCM_FIRST + 4)
                                  TCM_SETCURSEL = (TCM_FIRST + 12)
                                  
                                  BABYGRID_USER = (WM_USER + 7000)
                                  BGM_GETCELLDATA  = BABYGRID_USER + 4
                                  BGM_GETROWS  = BABYGRID_USER + 23
                                  
                                  class BGCELL(ctypes.Structure):
                                      _fields_ = [('row', wintypes.INT),
                                                  ('col', wintypes.INT)]
                                  
                                  cell_buffer = ctypes.create_unicode_buffer(1000)
                                  
                                  bgcell = BGCELL()
                                  
                                  sk_mapper_hwnd = user32.FindWindowW(None, u'Shortcut mapper')
                                  sys_tab_hwnd = user32.FindWindowExW(sk_mapper_hwnd, None, u'SysTabControl32',None)
                                  item_count = user32.SendMessageW(sys_tab_hwnd, TCM_GETITEMCOUNT, 0, 0)
                                  babygrid = user32.FindWindowExW(sk_mapper_hwnd, None, u'BABYGRID',None)
                                  
                                  shortcuts = []
                                  for tab in range(item_count):
                                      rows = user32.SendMessageW(babygrid, BGM_GETROWS, 0, 0)
                                      print 'rows', rows
                                  
                                      for i in range(1, rows+1):
                                          shortcut = []
                                          for j in range(1,3):
                                              bgcell.row = i
                                              bgcell.col = j
                                              res = user32.SendMessageW(babygrid,
                                                                BGM_GETCELLDATA,
                                                                ctypes.byref(bgcell),
                                                                cell_buffer)
                                              shortcut.append(cell_buffer.value)
                                          shortcuts.append(shortcut)
                                  
                                      user32.SetForegroundWindow(sk_mapper_hwnd)
                                      user32.SendMessageW(sys_tab_hwnd, TCM_SETCURSEL, tab, 0)
                                      user32.keybd_event(0x27,0,0,0)
                                      user32.keybd_event(0x27,0,2,0)
                                  
                                  user32.SendMessageW(sk_mapper_hwnd, WM_CLOSE, 0, 0)
                                  
                                  _max_length = len(max([x[0] for x in shortcuts if x[1]], key=len))
                                  notepad.new()
                                  editor.setText('\r\n'.join(['{0:<{2}} : {1}'.format(x[0], x[1], _max_length) for x in shortcuts if x[1]]))
                                  
                                  A 1 Reply Last reply Aug 12, 2019, 5:23 PM Reply Quote 2
                                  • A
                                    Alan Kilborn @Ekopalypse
                                    last edited by Aug 12, 2019, 5:23 PM

                                    @Ekopalypse

                                    Hmmm, poking around this a little bit…

                                    I get zero returned from the FindWindowW call, even though the window is opened by the script. Looking closer, I see in the call it is looking for Shortcut mapper but my window title is Shortcut Mapper. But changing the script to have a capital M makes no difference; zero still returned…

                                    E 2 Replies Last reply Aug 12, 2019, 5:29 PM Reply Quote 1
                                    • E
                                      Ekopalypse @Alan Kilborn
                                      last edited by Aug 12, 2019, 5:29 PM

                                      @Alan-Kilborn

                                      strange, which npp version do you use?

                                      1 Reply Last reply Reply Quote 0
                                      • E
                                        Ekopalypse @Alan Kilborn
                                        last edited by Aug 12, 2019, 5:40 PM

                                        @Alan-Kilborn

                                        I tried it with 7.6.6(64bit) and 7.7.1(32bit).
                                        And title is on both Shortcut mapper

                                        A 1 Reply Last reply Aug 12, 2019, 5:59 PM Reply Quote 1
                                        • A
                                          Alan Kilborn @Ekopalypse
                                          last edited by Aug 12, 2019, 5:59 PM

                                          @Ekopalypse said:

                                          And title is on both Shortcut mapper

                                          In answering this question, I went down a road with a fork in it. I took the fork.

                                          Seriously, though, I’m using 7.7.1 32-bit.

                                          At first I thought, well, okay, maybe I changed Shortcut mapper to Shortcut Mapper in my english_customizable.xml file. So I grabbed a fresh portable 7.7.1 32-bit and ran it and I see Shortcut mapper. Then I change the Localization setting to English and I see Shortcut Mapper. Trying English (customizable) I also see Shortcut Mapper.

                                          Note: In my real copy of N++ I also run with english_customizable.xml.

                                          So I suppose I now know where the M versus m appears from. Re-running my fresh copy of N++ after choosing English from the menu results in Shortcut mapper again, so I’m not sure but really would like to understand what it takes to make a Localization choice “stick”… But that’s another issue. Maybe if one chooses anything besides English, it sticks, but if you choose English nothing happens on the next run, because the default language is supposed to be that, and in reality the base localization and the english.xml file, which probably should be the same…aren’t. Little, subtle differences… But all that, as I said, is a different issue…

                                          I dabbled a bit more with the script and I think I see why I’m getting zero for the hwnd. If I increase the sleep time to something like 5 seconds and run the script, it seems like I should see the Shortcut Mapper window pop up fairly quickly and then somewhat of a delay before the rest of the code runs. In reality the window popping up seems to be delayed by the 5 seconds as well. So I suspect that maybe the window really isn’t there yet for FindWindowW to find it…?

                                          E 1 Reply Last reply Aug 12, 2019, 6:13 PM Reply Quote 1
                                          • First post
                                            Last post
                                          The Community of users of the Notepad++ text editor.
                                          Powered by NodeBB | Contributors