• Is there a GitHub Plugin

    2
    0 Votes
    2 Posts
    4k Views
    Michael VincentM
    @Firehold I use the Explorer plugin and have installed TortoiseGit. That gives me some integration: [image: 1633105018493-6a3b4e0c-f7cb-4cde-8da1-4cd29fe4b8bd-image.png] Cheers.
  • NppMenuSearch version 0.9.5 available

    12
    2 Votes
    12 Posts
    2k Views
    Vitaliy DovganV
    Please find a fully-working prototype of the C++ wrapper (proxy) plugin here: https://drive.google.com/drive/folders/1jsz0liLzrVw9H42p0vrZO9VNMQNv8P2j The README file is included, if you have questions. I haven’t create a project on GitHub because I’m not sure about the name of the project. NppMenuSearchCpp looks logical in terms of implementation, but it does not look so good as part of Notepad++'s plugins menu. Any suggestions are welcome - both regarding the name and the functionality. Feel free to use the sources of this plugin as a base of your own wrapper, if you want to create one for some other plugin.
  • 0 Votes
    2 Posts
    613 Views
    EkopalypseE
    For me this sounds like you either have a feature request or think there is a bug in the interface. If that is the case, then I would recommend to open an issue at the official github issues page. If this isn’t what you want, please explain in more detail what you are looking for.
  • NppExec v0.7.1 has been released!

    4
    5 Votes
    4 Posts
    1k Views
    Vitaliy DovganV
    @artie-finkelstein By default, NppExec’s Console becomes visible when any script is executed. To avoid it, npp_console ? should be used. (See NppExec Manual, section “4.1. NppExec’s Console behaviour”). I tried to reproduce the situation with npp_console local off under an if block within NppExec’s temporary script (Plugins -> NppExec -> Execute NppExec Script), and everything worked as expected: set local a = 123 if $(a) == 123 then npp_console local off // the Console becomes hidden endif strfind // produces an error "about to start a child process: "strfind"" sleep 2000 // the Console becomes visible
  • 0 Votes
    5 Posts
    1k Views
    Alan KilbornA
    @Walter-Di-Biase One thing to be aware of, though, with hiding lines: When you switch the active tab in Notepad++, Notepad++ itself will restore any lines you previously had hidden. So, if you want them to remain hidden (probably), you’ll have to capture the “buffer activated” event and then re-hide based on your saving of what was hidden before. Sounds a bit complicated? Yes, it is.
  • NppMenuSearch crashing as of Notepad++ commit 84c1505

    2
    1
    1 Votes
    2 Posts
    557 Views
    Michael VincentM
    @Michael-Vincent said in NppMenuSearch crashing as of Notepad++ commit 84c1505: I’ve opened a bug on the NppMenuSearch Github Issues - hoping to reach @peter-frentrup . FIXED!!! - see https://community.notepad-plus-plus.org/topic/21783/nppmenusearch-version-0-9-5-available
  • Python Script Regex replace with uppercase

    16
    0 Votes
    16 Posts
    6k Views
    EkopalypseE
    Sorry for the late and already too late reply, but I usually stay away from the computer on weekends. I assume that Python does its string processing before the boost::regex function gets a chance to interpret the string, but I’ve never really looked into it. The lambda or explicit function solution seem to be the way to solve this problem.
  • Capturing Scintilla notifications

    3
    0 Votes
    3 Posts
    896 Views
    S
    @dail this is exactly what I was looking for. Thank you so much!
  • PythonScript: Different behavior in script vs in immediate mode

    14
    1 Votes
    14 Posts
    4k Views
    PeterJonesP
    Status Bar Manipulation Allowing Extra Status Bar Section Complete example: implements a class for StatusBar manipulation includes a method which adds an extra StatusBar section includes an example callback to force it to a particular string (this could be changed so the callback puts some piece of particular info into the status bar) shows a 10sec example of it being used; note, because Notepad++ resets the status bar every time it changes tabs, you can see it flashing frequently. After that 10s, the callback will be cleared. You can take that concept and get rid of the clear-after-10s, which will mean that the status bar will continue to add that section as needed and display your information. Because it’s fighting Notepad++ for control of the status bar, things like toggling to a different tab or different view (or from one of the panels back to an editor tab) will cause Notepad++ to reset the status bar, then the UPDATEUI will trigger the callback to update the statusbar. This may cause unpleasant flashing of the status bar if you are changing tabs or panels frequently.0 # encoding=utf-8 """StatusBar Manipulation !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! USER WARNING: STATUS BAR MAY FLASH DURING UPDATE !!! !!! FLASH-SENSITIVE USERS SHOULD NOT USE THIS SCRIPT !!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Complete example: * implements a class for StatusBar manipulation * includes a method which adds an extra StatusBar section * includes an example callback to force it to a particular string (this could be changed so the callback puts some piece of particular info into the status bar) * shows a 10sec example of it being used; note, because Notepad++ resets the status bar every time it changes tabs, you can see it flashing frequently """ from Npp import * import ctypes from ctypes.wintypes import BOOL, HWND, WPARAM, LPARAM, UINT from struct import pack, unpack from time import sleep class _SB(object): """refer to these values as _SB.xxxx elsewhere""" LRESULT = LPARAM WNDENUMPROC = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM) WM_USER = 0x400 SB_SETPARTS = WM_USER + 4 SB_GETPARTS = WM_USER + 6 SB_SETTEXTA = WM_USER + 1 SB_SETTEXTW = WM_USER + 11 SB_GETTEXTA = WM_USER + 2 SB_GETTEXTW = WM_USER + 13 SB_GETTEXTLENGTHA = WM_USER + 3 SB_GETTEXTLENGTHW = WM_USER + 12 SBT_OWNERDRAW = 0x1000 ctypes.windll.user32.SendMessageW.restype = LRESULT ctypes.windll.user32.SendMessageW.argtypes = [ HWND, UINT, WPARAM, LPARAM ] _SB() # call it to initialize class NppStatusBar(object): """implement a class wrapper around the status bar""" def __init__(self): self._APP = None self._HANDLE = None def EnumCallback(hwnd, lparam): curr_class = ctypes.create_unicode_buffer(256) ctypes.windll.user32.GetClassNameW(hwnd, curr_class, 256) if curr_class.value.lower() == "msctls_statusbar32": self._HANDLE = hwnd #console.write("\t{:32s}0x{:08x}\n".format("sbWnd:", hwnd)) return False return True # console.write("\n" + __file__ + "::" + str(self.__class__) + "\n") self._APP = ctypes.windll.user32.FindWindowW(u"Notepad++", None) # console.write("\t{:32s}0x{:08x}\n".format("Notepad++ hWnd:", self._APP)) ctypes.windll.user32.EnumChildWindows(self._APP, _SB.WNDENUMPROC(EnumCallback), 0) # console.write("\t{:32s}0x{:08x}\n".format("StatusBar hWnd:", self._HANDLE)) self.__debugStatusBarSections() def __debugStatusBarSections(self): for sec in [STATUSBARSECTION.DOCTYPE,STATUSBARSECTION.DOCSIZE,STATUSBARSECTION.CURPOS,STATUSBARSECTION.EOFFORMAT,STATUSBARSECTION.UNICODETYPE,STATUSBARSECTION.TYPINGMODE]: self.getStatusBarText(sec) def getStatusBarText(self, sec): section = int(sec) retcode = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_GETTEXTLENGTHW, section, 0) length = retcode & 0xFFFF sbtype = (retcode>>16) & 0xFFFF assert (sbtype != _SB.SBT_OWNERDRAW) text_buffer = ctypes.create_unicode_buffer(length) retcode = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_GETTEXTW, section, ctypes.addressof(text_buffer)) text = '{}'.format(text_buffer[:length]) del text_buffer # console.write("\tSendMessage(0x{:08x}, 0x{:04x}, {:d}, {:d}) => 0x{:04x} 0x{:04x} \"{:s}\"\n".format(self._HANDLE, _SB.SB_GETTEXTLENGTHW, section, 0, sbtype, length, text)) return text def setStatusBarText(self, sec, txt): section = int(sec) if section <= 5: notepad.setStatusBar(STATUSBARSECTION.values[sec], txt) else: nChars = len(txt) text_buffer = ctypes.create_unicode_buffer(nChars) text_buffer[:nChars] = txt[:nChars] # console.write(repr(text_buffer)) retcode = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_SETTEXTW, section, ctypes.addressof(text_buffer)) del text_buffer # console.write("\t...\n") # sleep(1) # console.write("\t... done\n") def getStatusBarNumberOfSections(self): nParts = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_GETPARTS, 0, 0) return nParts & 0xFFFF def getStatusBarParts(self): nParts = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_GETPARTS, 0, 0) # console.write("getStatusBarParts() -> nParts = {}\n".format(nParts)) nBytes = 4 * nParts buf = ctypes.create_string_buffer(nBytes) retcode = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_GETPARTS, nParts, ctypes.addressof(buf)) #retcode = SendMessage(sb7_StatusBarCallback.STATUSBAR_HANDLE, SB_GETPARTS, nParts, buf) # console.write("\tretcode = {}\n".format(retcode)) ints = unpack('i'*nParts, buf[:nBytes]) # console.write("\tbuf = {:s} = {:s}\n".format(repr(buf[:nBytes]), ints)) del buf return ints def setStatusBarParts(self, *args): # console.write("setStatusBarParts({:s})\n".format(args)) nParts = len(args) nBytes = 4 * nParts buf = ctypes.create_string_buffer(nBytes) buf[:nBytes] = pack('i'*nParts, *args) # console.write("\tedit buf = {:s} = {:s}\n".format(repr(buf[:nBytes]), unpack('i'*nParts, buf[:nBytes]) )) retcode = ctypes.windll.user32.SendMessageW(self._HANDLE, _SB.SB_SETPARTS, nParts, ctypes.addressof(buf)) # console.write("\tretcode = {}\n".format(retcode)) def addStatusBarSection(self, text, width): # console.write("addStatusBarSection({:s})\n".format(text)) oldParts = self.getStatusBarParts() nParts = len(oldParts) subtract = int(width / nParts) scaled = map(lambda x: x-subtract, oldParts) scaled.append( oldParts[-1] ) self.setStatusBarParts( *scaled ) self.setStatusBarText( nParts, text ) def example_setSeventhSection(self, txt, width): """ If there are 7 sections, update text; if less, add a section and """ n = self.getStatusBarNumberOfSections() if n==7: self.setStatusBarText(n-1, txt) else: self.addStatusBarSection(txt, width) if __name__ == '__main__': def example_callback(args): sb.example_setSeventhSection("Example", 360) console.show() sb = NppStatusBar() editor.callback(example_callback, [SCINTILLANOTIFICATION.UPDATEUI]) example_callback(None) # call it once to update the UI manually console.write("For the next 10s, should say Example... \n") console.write("... even if you UpdateUI (change tabs, etc)\n") sleep(10) editor.clearCallbacks(example_callback) console.write("... DONE. The next UpdateUI will clear it.\n") -- edit: added if __name__ == '__main__': and indentation, to make it importable
  • The Plugin Hex converter doesn't appear to be correct?

    8
    0 Votes
    8 Posts
    5k Views
    Alan KilbornA
    @IRI I agree with @artie-finkelstein – I’ve never “installed” HxD to use it.
  • Looking for ideas/suggestions

    11
    1
    1 Votes
    11 Posts
    2k Views
    EkopalypseE
    @Vitaliy-Dovgan said in Looking for ideas/suggestions: In case of further questions, feel free to contact me. Thx, I did.
  • Speech Plugin 64 bit

    4
    2 Votes
    4 Posts
    1k Views
    Ralph Spencer SteenblikR
    It looks like the speech plugin is now working in the latest version.
  • Customize Toolbar - New Version 5.3

    1
    0 Votes
    1 Posts
    930 Views
    No one has replied
  • Customize Toolbar - New Version 5.2

    2
    0 Votes
    2 Posts
    700 Views
    dave-userD
    CORRECTION Win32 and x64 Unicode variants are available for download at: https://sourceforge.net/projects/npp-customize/files/Customize Toolbar v5.2/CustomizeToolbar_5_2_Win32_UNI.zip/download https://sourceforge.net/projects/npp-customize/files/Customize Toolbar v5.2/CustomizeToolbar_5_2_x64_UNI.zip/download
  • [c#] how to set/change current filename/fileextension

    4
    0 Votes
    4 Posts
    877 Views
    MarioRosiM
    Hello Ekopalypse and PeterJones, thanks for your suggestions. Now i create a new tab and copy the new format into that tab. Then can decide the user how to save the file. regards Mario
  • NppExec v0.7 has been released!

    2
    3 Votes
    2 Posts
    865 Views
    Vitaliy DovganV
    An early access build of the next version of NppExec is available! It fixes a few things in v0.7 and contains the following changes: changed: now IF/IF~/ELSE IF use delayed $(var) substitution. It means that IF “$(var)” != “” will work even when the value of $(var) contains inner " quote character(s). added: now npe_debuglog supports the keyword “local”. changed: $(var) substitution has been reworked and improved added: set <var> ~ strexpand <s> Get it here, NppExec20210804_dll: https://sourceforge.net/projects/npp-plugins/files/NppExec/NppExec Plugin (dev)/ Please let me know if there are any issues.
  • Bug: Style Token not working on selected substring

    2
    0 Votes
    2 Posts
    867 Views
    EkopalypseE
    @Louis-Jordan There are now settings for this… [image: 1627900637799-e63e852d-4e75-4b6a-b9e5-1faf38e70613-image.png]
  • NPPFTP with NPP v8.1.2

    4
    0 Votes
    4 Posts
    1k Views
    Dominique CharbonnelD
    Hello, I’ve find the cause : the proxy of my job. Thanks for your help.
  • 1 Votes
    3 Posts
    725 Views
    KnIfERK
    Opened a bug report for you on the github :)
  • Update the MultiClipboard plugin to support NPP's new darkmode!

    1
    1
    2 Votes
    1 Posts
    766 Views
    No one has replied