Community
    • Login
    1. Home
    2. Popular
    Log in to post
    • All Time
    • Day
    • Week
    • Month
    • All Topics
    • New Topics
    • Watched Topics
    • Unreplied Topics
    • All categories
    • PeterJonesP

      POLL / Discussion: taking over a plugin

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      7
      3 Votes
      7 Posts
      189 Views
      ThosRTannerT

      I’m not entirely sure how to vote on this because - if with the permission of the original author, I don’t think a new name would be required. However, any other option should have a new name

    • Michael Goessmann MatosM

      Notepad++ replacing '!='

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
      6
      1 Votes
      6 Posts
      470 Views
      PeterJonesP

      @Michael-Goessmann-Matos said,

      @PeterJones

      Actually, I configured Notepad++ to update as soon as an update is available so I wonder how this could have happend.

      As I said above,

      or you previously had an older version that got upgraded without changing your setting (if you originally had DirectWrite off, and upgraded to a version that had it on by default, it would not generally overwrite your previously-saved setting).

    • Jonathan JohansenJ

      Hi and I'm working on a WPF fork of NppCSharpPluginPack

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      18
      1 Votes
      18 Posts
      2k Views
      Jonathan JohansenJ

      I figure I’d better document the solution(s) for others that may tread this path. A summary of some of the steps needed (of course built on top of Mark’s work!):

      Ensure you register your modeless dialog with NPP (NPPM_MODELESSDIALOG, in Main.cs we call NppFormHelper.RegisterFormIfModeless(Form, bool)) The WPF System.Windows.Controls.UserControl should be in an System.Windows.Forms.Integration.ElementHost, which is in a System.Windows.Forms.Form. I’ve subclassed the ElementHost to handle WM_SHOWWINDOW to update the Visible property, and to trigger a (slightly delayed) refresh of the visuals when we get a WM_SIZE. There I invalidate the visuals and update layouts. There may be a way to skip this, but it’s working, so I’m not trying to fix it. In the WPF UserControl, when it’s Loaded, we have to get the presentation source (as a HwndSource) and add a hook to respond to the WM_GETDLGCODE and tell the source that we DLGC_WANTCHARS and DLGC_WANTARROWS, and maybe we also need DLGC_HASSETSEL.

      I’ve pulled most of it into a method called MakeModelessDialog. And now for a short recording of it working!

      2025-06-28 Typing in Notepad++ modeless WPF dialog works.gif

    • deleeleeD

      Npp website spelling error

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      7
      3 Votes
      7 Posts
      803 Views
      deleeleeD

      @mkupper said in Npp website spelling error:

      FWIW, this Google search gets zero hits other than this forum thread.

      site:notepad-plus-plus.org "featurs"

      I’m guessing that the misspelling, if it ever existed, was corrected a while back.

      Yes, it was fixed within a few days of me posting 😁👍

    • Nostra DamusN

      Create File? message

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
      6
      0 Votes
      6 Posts
      521 Views
      PeterJonesP

      @Nostra-Damus said in Create File? message:

      but don’t have a ‘contextMenu’ folder in the Notepad++ folder, is there anywhere I can download it from? I have got the latest portable version off github but it is not in that either.

      The portable edition does not come with the Shell Extension DLL because the Shell Extension is by definition not portable (it gets registered with your OS; one of the primary points of portable editions of software is to keep them from making changes to your OS configuration and to keep themselves limited to whatever directory you happen to be running them from)

      The only way I have ever tried getting the shell extension is to run the installer (unfortunately, the installer is not one of the ones where you can change the filename to xyz.zip and just browse it like a zipfile, so you cannot easily extract from the installer without running it). And you seem to want the portable, not the installed version. However, it should be noted: you can still use the installer, and give it your alternate install directory of C:\Utils\Notepad++\ and you can choose Don't use %AppData% in the options on the last page of the installer:
      7dae6d44-f65e-4048-872d-cd58d2b61a26-image.png

      However, if you don’t want to run the installer at all, the repo for the Shell Extension is publicaly visible at https://github.com/notepad-plus-plus/nppShell/ … its “releases” only seems to share the source code, not the built DLL, but if you go to the most recent GitHub Actions CI_Build (https://github.com/notepad-plus-plus/nppShell/actions/workflows/CI_build.yml) – click on the most recent (topmost) run in the main list: if it is recent enough, it should have some artifacts attached, and you could grab the 64-bit artifact (the one with x64 in the name). You can extract the DLL from that artifact zipfile, and then create C:\Utils\Notepad++\contextMenu\ folder and put the extracted DLL there.

      But honestly, that’s a lot of work when really all you needed was to add the quotes to get "%1" in your existing registry entries. Since you’ve already confirmed that works, I’d probably recommend just sticking with that.

    • Vitalii DovganV

      XBrackets Lite v1.4.0 has been released!

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      5
      2 Votes
      5 Posts
      117 Views
      Michael VincentM

      @Vitalii-Dovgan said in XBrackets Lite v1.4.0 has been released!:

      The uniqueness of XBrackets is in its external simplicity and internal complexity.

      Thank you. I get 3) from the SurroundSelection plugin. Notepad++ has “Go To Matching Brace” in Search menu, but I think it only includes { [ ( ) ] }, not quotes.

      Cheers.

    • Tom SassonT

      Cannot change Encoding to correct encoding of UTF-8

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
      5
      0 Votes
      5 Posts
      164 Views
      Tom SassonT

      @Coises said in Cannot change Encoding to correct encoding of UTF-8:

      Open Settings | Preferences… | MISC. and look for Autodetect character encoding.

      Thank you for your suggestion, this liitle “trick” with unchecking Autodetect fixed the issue for me

    • B

      Security of Legacy Notepad++ Versions (CVE-2025-49144)

      Watching Ignoring Scheduled Pinned Locked Moved Security
      5
      1 Votes
      5 Posts
      548 Views
      xomxX

      @Bhaalthazar said in Security of Legacy Notepad++ Versions (CVE-2025-49144):

      patching older vulnerable versions

      It could be fun, now without the public CA cert available…

    • B

      Editor displays "!=" token as "≠" symbol - how to turn off?

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      5
      0 Votes
      5 Posts
      227 Views
      B

      Many thanks to @PeterJones and @Coises, for the answers, perspective, and (in Peter’s case) updating the User Manual.

      You are right, it was Cascadia Code; changing it to Consolas, for example, got rid of it. My “exhaustive” font testing was… only Cascadia Code and Fira Code, so I literally hit both of the two. I’ve been mostly using Hack font for such a long time, I just haven’t really noticed any of this ligature-supporting fonts. I just got a new PC and hadn’t installed Hack yet.

      I like finding out where I was ignorant and wrong. It makes me less so.

      Cheers and thanks again!
      –BrBill

    • David RiffetD

      KNOWN ISSUE: The digital certificate is not available in version 8.8.2.

      Watching Ignoring Scheduled Pinned until 8/1/25, 4:30 PM Locked Moved Security
      5
      0 Votes
      5 Posts
      533 Views
      PeterJonesP

      I pinned this and added KNOWN ISSUE to the title, to hopefully make it plainer to people that they don’t need to report it here.

    • FraF

      Replace 2nd occurrence in string per line, then nth occurrence Npp v8.8.1

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      5
      0 Votes
      5 Posts
      289 Views
      FraF

      @PeterJones thanks a lot for the nuances. Indeed, I first wondered about the difference from the group indexing starting at 1. Then also about the difference from the quantifier ( {n} where n is an integer >= 1 https://www.regular-expressions.info/refquick.html).
      Thanks for the $0 group placeholder mention, I wondered about that too, now I understand what it captures.

      I understand the regex as this:

      Find:

      Put everything that preceeds the occurence of interest into a group (1st group referenced by the placeholder with the starting index at 1 ($1) — though there is a placeholder 0 ($0) which references the whole set/string instead of any subgroup of it)). Exclude the occurence of interest from the that group, but state is a the search delimiter for the regex just outside the group.

      Replace with:

      Capture the group with it’s placeholder (make a copy of it and store it: $1 = foo / ^((?:.?foo){0}.?) for the 1st occurence (N+1) with index 0). Use the 2nd/next occurence as external delimiter reference to stop the regex search at (^((?:.?foo){0}.?)foo). Then append the new value (XOO) to the copied unchanged group.

      I think I see what you mean when considering there must always be a 2nd /next occurence for the regex to work so it can’t be starting at zero? While in the background the engine uses a zero based indexing for the 1st element of the occurences series.
      0 is the 1st element in the indexes series, 1 is the 2nd and so on.
      While for the groups placeholders, 0 isn’t an ordinal reference, it’s an arbitrary reference to the set. The ordinal reference starting at 1 in this case.

      I need to check the doc and do more practice to get over the confusing parts!

      The quantifier also starting at 1 though index 0 is still valid but return no value (or the whole set but with empty values)?

      For example:

      19 empty string matches:

      0.gif

      [A-Z]{0} goo A greAS gir PE

      https://regex101.com/r/dYnJmE/1

      / [A-Z]{0} / gm Match a single character present in the list below [A-Z] {0} matches the previous token exactly zero times (causes token to be ignored) A-Z matches a single character in the range between A (index 65) and Z (index 90) (case sensitive) Global pattern flags g modifier: global. All matches (don't return after first match) m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string) 0-0 empty string 1-1 empty string 2-2 empty string 3-3 empty string 4-4 empty string 5-5 empty string 6-6 empty string 7-7 empty string 8-8 empty string 9-9 empty string 10-10 empty string 11-11 empty string 12-12 empty string 13-13 empty string 14-14 empty string 15-15 empty string 16-16 empty string 17-17 empty string 18-18 empty string No match/invalid:

      1.gif

      [A-Z]{} goo A greAS gir PE

      https://regex101.com/r/CtqQ0D/1

      / [A-Z]{} / gm Match a single character present in the list below [A-Z] A-Z matches a single character in the range between A (index 65) and Z (index 90) (case sensitive) {} matches the characters {} literally (case sensitive) Global pattern flags g modifier: global. All matches (don't return after first match) m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string) Your regular expression does not match the subject string. 5 matches:

      2.gif

      [A-Z]{1} goo A greAS gir PE

      https://regex101.com/r/MImsNL/1

      / [A-Z]{1} / gm Match a single character present in the list below [A-Z] {1} matches the previous token exactly one time (meaningless quantifier) A-Z matches a single character in the range between A (index 65) and Z (index 90) (case sensitive) Global pattern flags g modifier: global. All matches (don't return after first match) m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string) 4-5 A 9-10 A 10-11 S 16-17 P 17-18 E 2 matches:

      3.gif

      [A-Z]{2} goo A greAS gir PE

      https://regex101.com/r/p1WOWQ/1

      / [A-Z]{2} / gm Match a single character present in the list below [A-Z] {2} matches the previous token exactly 2 times A-Z matches a single character in the range between A (index 65) and Z (index 90) (case sensitive) Global pattern flags g modifier: global. All matches (don't return after first match) m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string) 9-11 AS 16-18 PE
    • Alexander AnisimovA

      Notepad++ lags when text files are on FTP

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      11
      0 Votes
      11 Posts
      767 Views
      mkupperM

      @Alexander-Anisimov said in Notepad++ lags when text files are on FTP:

      You may be right. In my understanding, WebDAV is another way of connecting protocol but still is FTP, although different.
      May be I am wrong.

      You are wrong. :-)

      WebDAV is a protocol that is similar to HTTP that web browsers use with web servers. As WebDAV looks like HTTP on the network it works with NAT, firewalls, web proxies, etc. Accessing a WebDAV server is just like accessing a web server. Many web browsers have built-in support for WebDAV.

      That said, if there are bandwidth or latency issues accessing a particular WebDAV server then all applications, including Notepad++ will be impacted.

      WebDAV itself is not slow or laggy.

      If I was stuck with needing to edit files that are on a slow or laggy server then I probably would create script that first copies the file to the local hard drive, runs Notepad++ on the file, and then keeps an eye on both the local and remote copies of the file. If the local copy changes then I push it out to the remote server. If it changes on the remote side then pop-up a warning. A tricky aspect is that Notepad++ allows people to exit Notepad++ and then resume editing. Thus I can’t depend on Notepad++.exe going away as a signal that I no longer need to monitor and synchronize that file but also need to watch Notepad++'s session.xml file.

    • Thomas ZitoT

      Prefix custom title option or hide filename entirely so Alt+Tab shows just the custom title

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      4
      0 Votes
      4 Posts
      56 Views
      Alan KilbornA

      @Alan-Kilborn said:

      I think it should be an absolute requirement that the title bar always starts with Notepad++ -

      Hmm, this is what I get for posting when I don’t have Notepad++ right in front of me (i.e., I get it wrong). :-(

      Now that I have it in front of me, the Notepad++ title bar shows pathname - Notepad++ or filename - Notepad++.

      My point was mainly about Notepad++ remaining somewhere in the titlebar, because this bit of consistency aids in other programs in locating the N++ main window, via the FindWindow Win32 API call. I do this a fair amount, and thus I’m projecting that I’m not alone and that others do this as well.

      Here’s a bad example; some PythonScript code:

      notepad.hwnd = user32.FindWindowW(u'Notepad++', None)

      (It’s “bad” because it isn’t necessary any longer, because newer versions of PythonScript have the notepad.hwnd variable predetermined for you – but for a long time this was not the case)

      But, if Notepad++ weren’t in the title bar text, it would not be as “easy” to locate the window, for those that need to.

      Note that the OP made no suggestion to drop Notepad++ from the title bar text; I was just thinking if the original idea was extended (as tends to happen), I’m sure someone would come up with that idea. And @Coises did call the text redundant, so that could be construed as a first step at “removal” – in quotes because of course all of these suggestions would be for optional things.

    • Murray Sobol 1M

      Does Notepad++ support Language Server Protocol (LSP)

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      9
      0 Votes
      9 Posts
      1k Views
      EkopalypseE

      @notdodgeball

      thanks - I’ve changed it accordingly.

    • N

      is thier any posibilities to find and replace multiple words at once ?

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      4
      0 Votes
      4 Posts
      100 Views
      CoisesC

      @neeraj10786:

      While I don’t use it myself (and so can’t give detailed advice), it seems like the MultiReplace plugin by @Thomas-Knoefel would be easier to use than built-in methods. If this is a single-time problem, then the built-in methods others have given make sense; but if it is something you’ll need to do repeatedly, I’d check out that plugin.

    • Kunal MehtaK

      Open text files present in Onedrive directly without downloading to a sync folder

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
      10
      0 Votes
      10 Posts
      612 Views
      EkopalypseE

      @Kunal-Mehta

      Everything is possible if someone with enough time and desire can tackle this.
      Unfortunately I personally don’t have the necessary time to realize this, the little free time I have at the moment is not even enough to maintain my own plugins with the necessary love and care.

    • Chris GorringeC

      KNOWN ISSUE: 8.8.2 doesn't appear to be digitally signed

      Watching Ignoring Scheduled Pinned until 8/2/25, 12:32 PM Locked Moved General Discussion
      4
      0 Votes
      4 Posts
      414 Views
      TragenT

      It’s even worse that you now need a USB stick / HSM for code signing certificates which makes it even more complicated and expensive.

    • Евгений КЕ

      Regex find and replace string in different types of brackets

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · · regex group replace
      4
      0 Votes
      4 Posts
      389 Views
      Евгений КЕ

      @PeterJones said in Regex find and replace string in different types of brackets:

      @Евгений-К ,

      One way to do it simultaneously is

      FIND = (>Some String<)|("Some String")
      REPLACE = (?1>New String<)(?2"New String")
      SEARCH MODE = Regular Expression

      But that’s “annoying” because you have to repeat the Some String and New String in the FIND and REPLACE.

      There are some fancy tricks using capture groups, either named or numbered, and control-flow assertions, to make sure that things balance correctly, and it will only match .

      FIND = (?'startwrap'(?'angled'>)|(?'quoted'"))\KSome String(?'endwrap'(?=(?('quoted')")(?('angled')<)))
      REPLACE = New String
      SEARCH MODE = Regular expression

      But as you can see, the FIND becomes rather complicated to save the “expense” of having Some String and New String twice. (You could theoretically do it with numbered capture groups instead, but getting the counts right, especially as you edit to make a third pair like {Some String}, would cause problems, so I used named groups so there was no ambiguity in the future. I will leave the “numbered group” version as an exercise to the interested reader.)

      So that’s two ways. Which is best depends on which you understand, and whether it’s going to be expanded in the future and/or done often. The most important thing with regex is that you understand what it’s doing, so that you don’t mess up your data.

      If you don’t understand a “single regex version” but can get it done in two simple search-and-replace that you fully understand, then two simple is probably better for you. (If it’s something you will be doing often, you can record the two search-and-replace into a macro, so that you can just play that macro in the future.)

      @PeterJones, thank you very much for your advice!
      I look at the options you suggested and once again I am convinced that RegEx was definitely not created by people and not for people :):):)
      Way #1 (captured group) is absolutely clear to me. I myself thought that it was necessary to act somehow through the groups, but I could not understand how.

      And as you correctly noted - this way in terms of labor costs is not much more efficient than the method without RegEx. The old and new lines have to be written twice.

      The second way is also clear to me, but only in general terms. This option is a very good warm-up for the mind. And I will definitely save this option for the future.

    • Kees AlderliestenK

      Closing np++ closes program behind it.

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      3
      0 Votes
      3 Posts
      88 Views
      xomxX

      @Kees-Alderliesten

      @Alan-Kilborn is right, e.g. #15639 or #15557.

      Notepad++ needs to be a Per-Monitor (V2) app.

      You can try this workaround:
      https://github.com/notepad-plus-plus/notepad-plus-plus/issues/14337#issuecomment-1835791674

    • Black WorkgroupB

      Digital certificate for open source projects

      Watching Ignoring Scheduled Pinned Locked Moved Security
      3
      0 Votes
      3 Posts
      91 Views
      xomxX

      @PeterJones said in Digital certificate for open source projects:

      be able to trace that signature to a Certificate Authority in the windows certificate manager store

      IMO - not an option for N++.
      Even the GitHub does not recognize the sign, so I doubt the MS will, moreover the needed x509 cert is a short-lived one (expires immediately?):

      https://docs.sigstore.dev/about/faq/#i-signed-my-commit-with-gitsign-but-it-shows-up-as-unverified-in-my-github-repository-page-why

      The Sigstore CA root is not a part of GitHub’s trust root. Gitsign’s ephemeral keys are only valid for a short time, so using standard x509 verification would consider the certificate invalid after expiration. Verification needs to include validation via the transparency log to verify that the certificate was valid at the time it was used.