• New API to fix eventual regression regarding SCN_MODIFIED for some plugins

    Pinned
    12
    2 Votes
    12 Posts
    695 Views
    donhoD

    @Coises said in New API to fix eventual regression regarding SCN_MODIFIED for some plugins:

    Should a plugin care what the default mask is? I mention it because I personally don’t see any advantage to plugins being dependent on the default; it doesn’t hurt anything to specify every event that will be used. Once we give plugins the responsibility to declare which events they need enabled, why not routinely declare all of them instead of relying on a particular set of defaults?

    you’re not wrong about this point.

    However, the authors of concerning plugins won’t understand why SCN_MODIFIED works with their plugins work under v8.7.5 & previous versions but not under v8.7.6 & later version.
    So the 5 events used by Notepad++ are listed to address to the regression for the historic reason,

    With the example you provided, plugins use SC_MOD_INSERT | SC_MOD_BEFOREDELETE or only SC_MOD_BEFOREDELETE will get the same effect. I don’t see any inconvenience about it.

    Of course, you’re encouraged to improve the document of this message to make your point clearer, if it’s not too redundant.

  • Read This First

    Pinned Locked
    1
    5 Votes
    1 Posts
    2k Views
    No one has replied
  • Populate "Find in Files" - Result Window

    5
    0 Votes
    5 Posts
    52 Views
    EkopalypseE

    @R0binBl00d

    as Alan already wrote, it’s not a good idea to rely on Npp’s internal non-public data structure, that screams problems in the future.
    If you want something similar with your own scintilla control, without writing a lexer that does the coloring, you can use SCI_ADDSTYLEDTEXT which basically means you iterate the bytes of the string and create a new string where the even byte is the style byte.

    Pseudo code

    style_id = 1 new_content = "" for i,c in "Hello" new_content[i*2] = c new_content[((i*2)+1)] = style_id
  • Getting Markdown headers in the function list panel

    2
    0 Votes
    2 Posts
    25 Views
    PeterJonesP

    @Bill-M said in Getting Markdown headers in the function list panel:

    I installed this under my functionlist folder for notepad++

    Did you also update your overrideMap.xml to point to that file? or did you just put your XML in that folder? https://npp-user-manual.org/docs/config-files/#function-list describes

    And when you do, make sure that you have the userDefinedLangName attribute in the new tag in overrideMap.xml match the exact name of the UDL. For example, the pre-installed Markdown UDL that ship with Notepad++ are named Markdown (preinstalled) and Markdown (preinstalled dark mode). If you set userDefinedLangName="Markdown", it would not properly associate with either of the actual UDL that ship with Notepad++.

    For my UDL header list,

    <!-- Other parser definitions here -->

    That’s surprising, and might also be causing you a problem. Since v7.9.1 in 2020, the old functionList.xml was split into separate files in the functionList\ directory; each XML file in that directory should only have one <parser>.

    For example, in my %AppData%\Notepad++\functionList\ directory, I have a file called udl_markdown.xml which looks like,

    <?xml version="1.0" encoding="UTF-8"?> <!-- ==========================================================================\ | | To learn how to make your own language parser, please check the following | link: | https://npp-user-manual.org/docs/function-list/ | \=========================================================================== --> <NotepadPlus> <functionList> <parser displayName="Markdown (preinstalled)" id="Markdown (preinstalled)" commentExpr=""> <function mainExpr="(?x-s)(^\h*\K[#]+\h*(.*?)$|^(.*)(?=[\r\n]+^([-=])\4{2,}\s*$))"/> </parser> </functionList> </NotepadPlus>

    and then in my override map, alongside the example UDL overrides that ship with the default, I added

    <association id= "udl_markdown.xml" userDefinedLangName="Markdown (preinstalled)"/>

    After saving those files, and restarting Notepad++, I successfully have FunctionList show me the # header lines (as well as header lines that have a line of plain text followed by a line of 3 or more --- or ===, as that’s an alternative header nomenclature in some markdown variants) – I’ve been successfully using that for years now.

    commentExpr="(#+)"

    Oh, that might be another gotcha. When the function list parser is looking, if it matches the comment expression, things found within that comment will not be searched for function names. So by saying that #+ is your comment, the FunctionList parser will ignore anything that’s one or more # characters. This means it will probably not ever be able to match your #{1,6} in your function’s mainExpr… I would highly recommend using commentExpr="" rather than giving it a value.

    If I update my <assocation ...> to point to the new definition, and modify your definition to be

    <?xml version="1.0" encoding="UTF-8"?> <NotepadPlus> <functionList> <!-- Markdown headers: Match any line starting with 1-6 "#" characters --> <parser id="md_headers" displayName="Markdown (preinstalled)" ext="md" commentExpr=""> <function mainExpr="(?-s)^[ \t]*(#{1,6}[ \t].+)$"> <functionName> <nameExpr expr="(#{1,6}[ \t].+)" /> </functionName> </function> </parser> </functionList> </NotepadPlus>

    … then it works for me.

    So, to sum up the things I’ve seen:

    you must set an <association ...> tag in your overrideMap.xml, making sure that userDefinedLangName’s value is the exact name of your UDL (probably Markdown (preinstalled) or Markdown (preinstalled dark mode)) and that id is the exact name of your file in the functionList\ directory you should only have one <parser> per functionList\_____.xml file if you define commentExpr, then the parser will not look for function names (or in your case, markdown headers), so make sure you don’t set that to something that interferes with recognizing your headers (I would recommend commentExpr="" , because you don’t need the parser to ignore anything)
  • [New Plugin] NppOpenAI

    40
    8 Votes
    40 Posts
    23k Views
    Richárd StockingerR

    Hi @Tibor-Baráth,

    You may be using an older version of NppOpenAI (e.g. v0.4.0.0) that does not yet support long API keys. :(

    Please check for updates, or try updating the plugin manually. You can find more details about these in this issue:
    The problem with the gpt chat keys (#32)

  • Adding TCL to functionlist panel

    2
    0 Votes
    2 Posts
    33 Views
    PeterJonesP

    @Bill-M ,

    A Perl script to create a powershell script to create and copy an XML file? That seems a bit indirect. If you’re going to invoke the perl interpreter, why not have your Perl code write the XML to the right location directly? And if you don’t know how to accomplish the same thing in Perl (which it definitely can do), why not just share the powershell script directly instead of “dynamically” generating it using static strings in Perl?

    But that’s neither here nor there, so nevermind.

    Could somebody at notepad++ please add this by default to notepad++:

    The script is obviously not going to be added to Notepad++, nor anything that behaves like that script. If you wanted to take the XML that’s generated by your nested script and have that functionList XML added to the Notepad++ distribution by default, the User Manual has an entire section on how to "Contribute your new or enhanced parser rule to the Notepad++ codebase. So follow those instructions if you want Notepad++ to ship with your TCL functionList definition.

  • Some more options for search & replace dialog

    9
    0 Votes
    9 Posts
    290 Views
    CoisesC

    @Mark-Olson said in Some more options for search & replace dialog:

    I assume that the text portion of the StyledTextFull buffer is UTF8-encoded (if you discard the style bytes), right?

    Not necessarily. I looked at the Scintilla code a bit; there are, internally, two buffers, one containing the text and one containing the style bytes. While there is an API to access the text buffer directly (which I use), there is nothing I can find that does the same for the style bytes. Instead, SCI_GETSTYLEDTEXTFULL steps through both buffers simultaneously, copying first the text byte and then the style byte to the output buffer supplied in the call. (Unless I have misread the code — which is possible, since I didn’t spend a lot of time looking at it — though the documentation for SCI_GETSTYLEDTEXTFULL says it interleaves text characters and style bytes, it actually interleaves text bytes and style bytes.)

    The text could be ANSI or UTF-8 — you have to check SCI_GETCODEPAGE, which in Notepad++ will be either zero (system default code page, aka “ANSI”) or CP_UTF8.

    I had temporarily forgotten that you won’t be working in C++. I doubt that it is practical (maybe not even possible) to write a Boost::Regex iterator in “managed” code. It would probably make more sense to reverse what Scintilla does and split the returned value into a text buffer and a style buffer. Then you could scan the style bytes to determine what ranges to search, and either use whatever regex facilities are available in C# to scan the text, or just ignore the text bytes and use Scintilla find and replace to scan the ranges you identified from the style buffer.

    Given the way Scintilla stores styles (as bytes that correspond one-for-one with the text — unlike indicators, which the documentation says “are stored in a format similar to run length encoding which is efficient in both speed and storage for sparse information”), there is probably no way much faster than scanning byte for byte — it’s just a trade-off between speed (getting it all with one Scintilla call) and memory (getting it byte by byte, so you don’t have to make large copies).

  • Avoid "Document changed outside, reload?" message box

    3
    1 Votes
    3 Posts
    94 Views
    mkupperM

    @Henrik-Haftmann, when you do Ctrl+S from within Notepad++ are you always or nearly always then immediately getting a file-modified pop-up, This may well be something we can look into.

    I had thought that when you do Ctrl+S that Notepad++ writes the file to disk and it then immediately gets the file’s mtime and size from the disk to use as a baseline for the file-modified logic. If your file system is then changing the mtime to better match someone’s granularity standard then can that behavior be changed? How do applications know when the file system is done with fiddling with the mtime?

    Your proposal about comparing the file content means that Notepad++ would need to first make a copy of the file the instant someone starts making changes to the file. Notepad++ probably would start making the copy the moment you open the file. We need a copy of the original file to do the comparison you proposed.

    Computing a hash would have less overhead

    If it were my problem to deal with and I was forced to deal with a file system that keeps fiddling with the mtimes then I would set it up so that I use Notepad++ with local on-disk copies of files and I’d have a background application that synchronizes the local disk files to the external file system. That background application would only change the local disk mtime if and only if the content of the file on the external file system is modified. Basically, I would make my machine part of the AFS network but it would hide the part about that mtimes change.

  • Undo preserving file's mtime

    2
    0 Votes
    2 Posts
    66 Views
    PeterJonesP

    @Henrik-Haftmann ,

    moderator aside:

    Does this “thought” really need a separate discussion from your other two topics? All three of your topics are, to my mind, about essentially the same thing – the mtime/ctime of a file, and how Notepad++ interacts with it (both in deciding whether document-has-been-changed and in how Notepad++ sets one or both of those times). If they are really all related, please keep everything in one of the existing topics, instead of creating a new topic for each thought. It makes it really hard to follow, and hides the fact that other people have replied to other of your thoughts, so eliminates or obfuscates context.

    Let me know which of the three you want as the “parent” conversation, and I can merge them all into one, unless you really believe they are completely distinct conversations which don’t rely on each other for context.

  • Preserve creation file date&time (ctime)

    3
    0 Votes
    3 Posts
    63 Views
    xomxX

    @Henrik-Haftmann

    I tried on my network NAS (webdav), created date/time did not change when I opened, updated & saved an old file using N++:

    npp-NAS-webdav-created-not-changed.png

  • 0 Votes
    6 Posts
    237 Views
    Mojtaba RezaeianM

    Hello Peter

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    So is your account the account named “Administrator”, or is it a normal user account that has administrator privileges? Because my Windows account is a normal user with Admin privileges. The two might not behave the same, depending on circumstances.

    No my account name is user, but with administrator privilages.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    I am curious exactly what steps you took to “update” Notepad++ if it installed a version that’s 2 years old

    Looking at Settings > Preferences > MISC, is the ☐ Enable Notepad++ auto-updater checkmarked or not?

    Thats because I forgot that I disabled auto updates for this reason and I did not expect its more than two years from that time now, but auto updates was enabled at first and selcted template changing was happening after updates so I disabled auto update and after disabling that option I remember notepad++ many times asked me for updating at begining of program and I remember I updated it manually (by accepting that update message) for a few times after disabling update but I decided to accept updates less often specially because of fear of loosing some options and requiring to set them again as like as selecting my prefered theme; and yes Auto update is disabled in my prefrences now, but this background loss was happend recently for a few time, and once exactly when I opened a ticked I thought my auto update option is on and it happend because of update but now I conclude that there must be somethingelse happening separate from updating of program which causes the templates reset too. but I can assure you I haven’t cleared my %appsdata% or restoring or cleaning windows manually and it must be very rare to automatically this happens in my system because I do not install such softwares to clean files or system for me and I do most of the things manually if I see a problem.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    When you updated to v8.4.8, which of the following happened?

    Notepad++ popped up a dialog telling that an update was available, and that update was v8.4.8

    oh yes recenly this happend and I ignored update I think this template change happens even if I ignore it !! I’m not sure about this but I can tell you for next time if such message come up and I ignore to see what happens.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    You went to Notepad++'s ? menu and chose Update Notepad++, and it downloaded and installed v8.4.8

    no I did not updated this way recently

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    You already had a copy of npp.8.4.8.Installer.x64.exe in your downloads directory, so you just ran that one

    No

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    You went to https://notepad-plus-plus.org/downloads/ , and instead of going to the first entry on that page, which would be v8.7.5, you instead scrolled way down on the page to “Download Notepad++ v8.4.8”

    No
    No
    No

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    You went to some other website other than notepad-plus-plus.org or github.com and downloaded Notepad++ v8.4.8 installer from there

    No because notepad++ have an update option in application and its easier than all.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    the version before that one would have been v8.7.4 from earlier in Dec 2024.

    Yess you giving me clues that the template reset is not depending my selection to update or not it always reset my template options after this update warning and make me think the program was automatically updated (Because I trust this app I do not care very much if it update now or later and some time I think I selected yes but in real I was selecting no because of fear of loosing options again and I was focusing to continue reading text file)

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    This still boggles my mind

    It was a suprise for me too, I really didn’t knew I havn’t updated this app for such long time (mostly because of template reset which was my logical address to conclude application is updated again so I must do select template again)

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    L:\Programs\Notepad\notepad++.exe

    Its correct! in my system “L:” means Large volume drive and I always create big L: partition on my partitionings, keep static large files and medias including small applications and every other things which not depends on harddisk speed and OS and can run on any computers and on slow and old hard disks, which are much cheaper and larger than new M.2 and fast volumes. The L: also is very unique letter and helps me to never loose application addresses and file locations after system change. I just change the old volume drive letter on my hard disk to L: which is rarely happens to be occupid on different systems so its kind of portable. Also V: is a similar unique drive letter for me which is always my chosen Vistual drive just for not mistaking with other drives for example DVD/CD drive or connected portable ones. And my windows drive is mostly C: or D:.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    As I said above, when you are a normal user who happens to have Admin power, you don’t have to run Notepad++ “As Administrator” – I almost never do, except when I need to edit a file in the c:\windows or c:\program files hierarchies. (Which is very rare, for me.) I believe that not using “As Administrator” is less likely to give you problems like what you’re having.

    Oh peter, You know a lot!! This is my case too… I’ll tell you why I did this. I sometime code in AHK(autohotkey) so I managed to setup notepad++ to open/edit some files and codes with just pressing a hotkey! saying more clear I have a large AHK file manually written to manage custom hotkeys on my windows and I open/edit many files even itself with its own hotkeys too. For acheiving this I need to run notepad++ from another application(Autohotkey.exe) which would be the parent for notepad++ on that moment and this caused to limit my access to edit some system files from hotkeys. For example when I want to add a line of code to windows system files (like “hosts” file) it gave me error of restricted user so I managed to do something to run notepad++ as adminstrator.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    That’s fine. I frequently run with a true portable. And, in fact, at work, I often used a portable copy but set my file associations and paths so that Windows could associate files with that portable, during a period when my employer made it a hassle to update Notepad++ when it was in C:\Program Files. (They eventually relented, so I went back to a normal installation.)

    I do not prefer this because after uninstall/reinstall I need to do my customizations windows and its apps relations to notepad++ again and they are too many, and I even can not remember all things I did after these years. For example now I can not remember what I did to give notepad++ administrator privilages when it is started from another app, I just searched google and used some tricks guys used and suggested to do this.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    Yes. That is Notepad++'s default behavior. But when you ran the installer, it did ask you whether you wanted to use AppData or not. You are the one who agreed to let it install there.

    So I can reinstall it again and choose right option. I think I can handle it now.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    I disagree vehemently with that statement. I’ve been using the same AppData directories on this computer through its original Windows 10 and all the Win10 updates, through the Windows 11 and all the updates there, and it has correctly maintained those settings. And the %AppData%\Notepad++ setting that I put in on Win10 were the ones I copied over from my previous computer, and probably from the computer before that. My AppData literally has a legacy on the order of a decade. If you think of a decade as being “temporary”, I am impressed with your longevity.

    I really respect your decition and opinion, I can not say anything other than thank you for your helpful messages guiding me a lot.

    @PeterJones said in Selected theme (in style configurator) resets back to default after every program update!:

    From step 4 on, all of Notepad++'s settings will be stored in L:\Programs\Notepad` instead of in the AppData hierarchy

    Now I ran to step 4 and downloaded latest install version after that but I could not find “AppData” checkbox in step after choosing “L:\Programs\Notepad” (and it was “c:\program files\notepad++” by default) so I stopped. Isn’t it better to copy and replace all files from zipped protable version to “L:\Programs\Notepad”??

  • New (incomplete) LSP client plugin

    59
    4 Votes
    59 Posts
    7k Views
    EkopalypseE

    @mpheath

    Thank you very much - and disabling it again in my init routine seems to solve the current problem, but I’m not sure if there isn’t an underlying issue here. I mean, why does this only happen when multiple documents are used in a single window? I will do some tests in the next few days.

  • Message box with specific icon

    4
    0 Votes
    4 Posts
    84 Views
  • My plugin's toolbar sometime looses it's trigger to be drawn

    1
    0 Votes
    1 Posts
    49 Views
    No one has replied
  • 3 new themes

    4
    5 Votes
    4 Posts
    218 Views
    benelaciB

    The themes have been uploaded to the n++ theme repo at GitHub. Thank you @PeterJones.

    One setback: The “Tangara” theme depends on some fonts being installed (because of the use of 4 different font weights), and the repo hosts single theme files, so I can’t supply the fonts there. (I don’t think there’s ever been a font-dependent theme in history.) So I created a “Tangara (Font-free version)” theme, that’s the one being uploaded there. While it functions as a theme, it looks much poorer than the Original that’s linked on this page.

  • Rust Syntax Highlighting

    8
    1 Votes
    8 Posts
    171 Views
    PeterJonesP

    Moderator Note: this was taking over the LSP discussion, which would make it harder for people in the future to use the LSP Topic for LSP-focused discussion. I moved this portion of the discussion to a separate Topic, so that it can stay focused on syntax highlighting.

    The first two posts needed to be merged into one, because somehow the original fork swapped the order of the two posts, which made this topic confusing.

  • Delphi/Lazarus plugin template - update info about probs with Lazarus

    10
    2 Votes
    10 Posts
    483 Views
    K

    Not many more topics came up meanwhile. Two little things:

    “TPopupMenu” won’t be drawn well in dark mode (thick light border; separators unnicely drawn). I’d assume this belongs to the amount of gui elements not yet individually handled by the code as mentioned above, right?
    For the separator a quick hack could be to set it’s caption to spaces, and to disable the item. Looks better.
    Did i miss something about the TPopupMenu? How does it behave in Delphi?

    I have a sub-dialog (sub form) invoked from the docking form (via tool button here) and noticed it stayed light. I learnt it has to be exposed in the app-plugin as exposed func for to be subjected by the NPP theme layer. Then i call this sub-dialog via invocaton of the plugin func. Did so, and it worked fine.
    But now iz’s callable from the plugin’s menu too - what might not be wanted always. Sometimes the exposure of functionality depends on a config setting though.
    In short: is it possible, and how, to disable items from the plugin’s menu conditionally?

  • 1 Votes
    5 Posts
    130 Views
    K

    Yep. works perfectly … NPPN_READY gave the solution …

  • Display markdown outline view through Functionlist

    14
    2 Votes
    14 Posts
    3k Views
    PeterJonesP

    @Dan-Ignat-0 ,

    For non-programming langauges, like Markdown, there’s probably less concensus among users as whether “headers” or something else is the most likely “function” to include, which is probably why the developer hasn’t included such. But asking the developer (follow our Feature Request / Bug FAQ) to include the FunctionList would be reasonable at this stage (though someone would likely have to create the unitTest for him as well, otherwise he might not include it on his own).

  • Dictionary plugins

    8
    0 Votes
    8 Posts
    591 Views
    PeterJonesP

    @Peter-Oates said in Dictionary plugins:

    However, it does not tell you what to do if the app cannot/will not create the folders it requires.

    I must also admit that I find Windows folder / file permissions an almost impregnable forest

    The latter causes the former issue.

    Assuming that the user knows how to deal with Windows OS permissions is not an unreasonable assumption, since you have to deal with them to do a normal Notepad++ installation. For the vast majority of users, whatever process they take that allows the Notepad++ installation will be sufficient to allow the plugin to work correctly – in all the complaints about DSpellCheck, this is the first time that I remember seeing permissions issues be the cause of the problem.

    Every once in a while, a Notepad++ user will find that, because of their non-standard, personal customizations of the OS and/or UAC settings and/or Notepad++ and/or the combination, something weird happens with permissions in the user’s AppData (which is what I’m guessing happened to you). But given how infrequent the reports are here, I don’t think it’s a highly common situation.

    I suppose the plugin author could put a note in his README and/or Online Manual to explain that “if you follow all the steps for installing a Hunspell dictionary, and it doesn’t show up, you should chcek the permissions on your %AppData%\Notepad++\Plugins\Config\ hierarchy” or similar – you could even put in a request for the author to do that – but I wouldn’t have necessarily expected a plugin author to have realized that such a comment would be necessary, since AppData permissions issues are reasonable rare.

    And even if the author had already documented that, you have admitted that you wouldn’t’ve seen the note on your own or even gone looking for it when you had a problem. So is it really worth the effort for a plugin developer to note that edge case – even if they know about it – when the people who run across that edge case are not likely to try to look up the documentation for it anyway?

    For the documentation that I work on, including Notepad++'s manual itself and FAQs for this forum, I most likely would, once it was pointed out to me, because I like to pretend that at some point, people will figure out how to look for documentation; but I don’t know that I expect other people to waste their time in the same ways I waste my own time.

    update: Rereading my post, I guess I could say, since it’s a permission issue, I would have expected the plugin to have received an error from the OS when it tried to write the dictionary to the right folder, and they could have popped up a dialog informing you… I’m actually surprised there wasn’t one. So either the OS was silently erroring out (in which case the plugin cannot do much if the OS doesn’t admit to the failure), or the plugin author was trying to shield you from error messages or something. But it would be a good idea for somebody (you) to put in a request for the plugin to check the status of the dictionary download/install, and if they cannot write it, to let you know about the problem.