• Is there a GitHub Plugin

    2
    0 Votes
    2 Posts
    2k Views
    Michael VincentM

    @Firehold

    I use the Explorer plugin and have installed TortoiseGit. That gives me some integration:

    6a3b4e0c-f7cb-4cde-8da1-4cd29fe4b8bd-image.png

    Cheers.

  • NppMenuSearch version 0.9.5 available

    12
    2 Votes
    12 Posts
    597 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
    176 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.

  • Announcing Perl-based automation of Notepad++

    16
    6 Votes
    16 Posts
    3k Views
    PeterJonesP
    v0.008 released to CPAN add notepad->showDocList, notepad->isDocListShown, and notepad->docListDisableColumn for working with the Document List panel (previously “Doc Switcher” panel) incorporate the new messages and menu commands thru v8.1.4 (#80) add notepad->getStatusBar(), which will get the text of one of the sections of the status bar (#65) add notepad->getDebugInfo(), which (for new-enough Notepad++) includes the ‘Command line’ entry from Debug Info (#74) add %WINMSGBOX for use with notepad->messageBox (#73)
  • NppExec v0.7.1 has been released!

    4
    5 Votes
    4 Posts
    392 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
    283 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 Votes
    2 Posts
    158 Views
  • Python Script Regex replace with uppercase

    16
    0 Votes
    16 Posts
    3k 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
    249 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
    938 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
    2k Views
    Alan KilbornA

    @IRI

    I agree with @artie-finkelstein – I’ve never “installed” HxD to use it.

  • Looking for ideas/suggestions

    11
    1 Votes
    11 Posts
    713 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
    533 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
    464 Views
    No one has replied
  • Customize Toolbar - New Version 5.2

    2
  • [c#] how to set/change current filename/fileextension

    4
    0 Votes
    4 Posts
    186 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
    396 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
    432 Views
    EkopalypseE

    @Louis-Jordan

    There are now settings for this…

    e63e852d-4e75-4b6a-b9e5-1faf38e70613-image.png

  • NPPFTP with NPP v8.1.2

    4
    0 Votes
    4 Posts
    360 Views
    Dominique CharbonnelD

    Hello,

    I’ve find the cause : the proxy of my job.

    Thanks for your help.

  • 1 Votes
    3 Posts
    194 Views
    KnIfERK

    Opened a bug report for you on the github

    :)