• Login
Community
  • Login

Bookmark line becomes unchecked on reopening application

Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
bookmarks
7 Posts 4 Posters 1.7k 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.
  • M
    Mario Chávez
    last edited by Feb 11, 2022, 6:18 PM

    Bookmark line issue.PNG

    Hello, I run searches on large text files at work. Whenever I need to bookmark my searches on lines of text, I naturally check the parameter Bookmark line. The problem? If I restart the application or if I install a Notepad++ update and restart the application, all my customized preferences, such as Backward direction, the font size, Wrap around, etc. are maintained, except Bookmark line, which appears unchecked.

    This is a bit annoying because I need it to be checked permanently so that I can copy the bookmarked lines on the searched text file.

    Any suggestions? Maybe it’s a bug. Thank you.

    P A 2 Replies Last reply Feb 11, 2022, 6:30 PM Reply Quote 0
    • P
      PeterJones @Mario Chávez
      last edited by Feb 11, 2022, 6:30 PM

      @mario-chávez said in Bookmark line becomes unchecked on reopening application:

      Maybe it’s a bug.

      It’s not a bug. It’s just not a feature I’ve heard of anyone asking for, and maybe not one that the developers have thought of to implement. If you would like Notepad++ to remember the “Bookmark line” checkbox like it remembers the other checkboxes, you can follow the FAQ instructions for making a feature request

      1 Reply Last reply Reply Quote 3
      • A
        Alan Kilborn @Mario Chávez
        last edited by PeterJones Feb 12, 2022, 5:37 PM Feb 11, 2022, 7:09 PM

        @mario-chávez

        If you’re willing to use the PythonScript plugin, I have a solution in the form of…a script!

        I call the script BookmarkLineCheckboxTick.py and it looks like this:

        # -*- coding: utf-8 -*-
        from __future__ import print_function
        
        #-------------------------------------------------------------------------------
        
        from Npp import *
        import inspect
        import os
        import ctypes
        from ctypes import wintypes
        
        #-------------------------------------------------------------------------------
        
        user32 = ctypes.WinDLL('user32')
        
        LRESULT = wintypes.LPARAM
        
        SendMessageW = user32.SendMessageW
        SendMessageW.restype = LRESULT
        SendMessageW.argtypes = [ wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPARAM ]
        
        #-------------------------------------------------------------------------------
        
        IDC_MARKLINE_CHECK = 1616
        BM_SETCHECK = 0x00F1
        BST_CHECKED = 1
        
        #-------------------------------------------------------------------------------
        
        class BLCT(object):
        
            def __init__(self):
                notepad.menuCommand(MENUCOMMAND.SEARCH_MARK)
                find_dlg_hwnd = user32.FindWindowExW(None, None, u'#32770', u'Mark')
                bookmark_checkbox_hwnd = user32.GetDlgItem(find_dlg_hwnd, IDC_MARKLINE_CHECK)
                SendMessageW(bookmark_checkbox_hwnd, BM_SETCHECK, BST_CHECKED, 0)
        
        #-------------------------------------------------------------------------------
        
        if __name__ == '__main__': BLCT()
        

        It can be set to run at Notepad++ startup by setting the scripting plugin’s Initialisation parameter to ATSTARTUP and then putting the following lines into the startup (User) script:

        import BookmarkLineCheckboxTick
        BookmarkLineCheckboxTick.BLCT()
        

        The result of this will be that the Bookmark line checkbox will always be ticked when Notepad++ starts.

        M 1 Reply Last reply Feb 11, 2022, 8:53 PM Reply Quote 3
        • M
          Michael Vincent @Alan Kilborn
          last edited by Feb 11, 2022, 8:53 PM

          @alan-kilborn said in Bookmark line becomes unchecked on reopening application:

          If you’re willing to use the PythonScript plugin, I have a solution in the form of…a script!

          I’m willing - but I don’t want that use case. I want to check the “Highlight all” in the Search => Incremental Search “window”.

          I modified your script, but having some issues. The Incremental Search windows is “attached” to Notepad++ so I don’t see a new Windows class name (#32770 like for the “Mark” pop-up). Also, for the Window title - “Mark” works nicely for the Mark window popup - what do I use for the Incremental Search “window” which is “attached” to Notepad++ - the Notepad++ “title” I have changes based on the open filename. I think i got the other stuff done:

          • replace IDC_MARKLINE_CHECK with IDC_INCFINDHILITEALL (1690, from ScintillaComponent/FindReplaceDlg_rc.h)
          • MENUCOMMAND.SEARCH_MARK replaced with MENUCOMMAND.SEARCH_FINDINCREMENT

          So my script does open the Incremental Search “window”, but it does not check the “Highlight all” checkbox. Any pointers?

          Cheers.

          A 1 Reply Last reply Feb 11, 2022, 9:47 PM Reply Quote 2
          • A
            Alan Kilborn @Michael Vincent
            last edited by Alan Kilborn Feb 11, 2022, 9:50 PM Feb 11, 2022, 9:47 PM

            @michael-vincent said in Bookmark line becomes unchecked on reopening application:

            but it does not check the “Highlight all” checkbox. Any pointers?

            It’s all about having that control’s handle (hwnd).

            Cobbling some code together by stealing a lot from THIS THREAD, I came up with this:

            # -*- coding: utf-8 -*-
            from __future__ import print_function
            
            import ctypes
            from ctypes.wintypes import BOOL, HWND, LPARAM
            
            WNDENUMPROC = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM)
            
            FindWindow = ctypes.windll.user32.FindWindowW
            SendMessage = ctypes.windll.user32.SendMessageW
            EnumChildWindows = ctypes.windll.user32.EnumChildWindows
            GetClassName = ctypes.windll.user32.GetClassNameW
            GetWindowText = ctypes.windll.user32.GetWindowTextW
            GetWindowTextLength = ctypes.windll.user32.GetWindowTextLengthW
            create_unicode_buffer = ctypes.create_unicode_buffer
            
            curr_class = create_unicode_buffer(256)
            
            BM_SETCHECK = 0x00F1
            BST_CHECKED = 1
            
            incr_search_highlight_all_hwnd = [ 0 ]
            
            def EnumCallback(hwnd, _):
                GetClassName(hwnd, curr_class, 256)
                length = GetWindowTextLength(hwnd)
                if length:
                    buff = create_unicode_buffer(length + 1)
                    GetWindowText(hwnd, buff, length + 1)
                    print('class:', curr_class.value, '|', 'text:', buff.value)
                    if buff.value == u'&Highlight all':
                        incr_search_highlight_all_hwnd[0] = hwnd
                else:
                    print('class:', curr_class.value)
                return True  # let enumeration continue
            
            notepad.menuCommand(MENUCOMMAND.SEARCH_FINDINCREMENT)
            notepad_hwnd = ctypes.windll.user32.FindWindowW(u'Notepad++', None)
            if notepad_hwnd:
                EnumChildWindows(notepad_hwnd, WNDENUMPROC(EnumCallback), 0)
                if incr_search_highlight_all_hwnd[0]:
                    SendMessage(incr_search_highlight_all_hwnd[0], BM_SETCHECK, BST_CHECKED, 0)
            

            It’s instructive to look at the PythonScript console as it runs – although for me it seems to write to the console very slowly and I don’t know why this is…

            A 1 Reply Last reply Feb 11, 2022, 9:52 PM Reply Quote 2
            • A
              Alan Kilborn @Alan Kilborn
              last edited by Feb 11, 2022, 9:52 PM

              @alan-kilborn said in Bookmark line becomes unchecked on reopening application:

              if buff.value == u’&Highlight all’:

              Also not sure why this text seems to have a Alt+h keyboard accelerator as I don’t see how you can use it in Notepad++'s UI.

              A 1 Reply Last reply Dec 18, 2023, 11:34 AM Reply Quote 1
              • A
                Alan Kilborn @Alan Kilborn
                last edited by Dec 18, 2023, 11:34 AM

                @Alan-Kilborn said in Bookmark line becomes unchecked on reopening application:

                not sure why this text seems to have a Alt+h keyboard accelerator as I don’t see how you can use it in Notepad++'s UI.

                One more thing I’m not sure of: Why I had said that.
                If a control in the Incremental Search window has input focus, e.g. the Find edit box, then Alt+h will focus and toggle the Highlight all checkbox setting.

                1 Reply Last reply Reply Quote 1
                • M markran referenced this topic on Jan 12, 2024, 9:17 PM
                • First post
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors