• 2 Minor Requests

    2
    0 Votes
    2 Posts
    2k Views
    PeterJonesP

    @JCB said in 2 Minor Requests:

    It would be nice to have a cancel option in the Create File dialog when trying to open NP++ with a nonexistent file.

    In what way is the “no” button not sufficient for your needs?

    a60caeed-04ac-48d1-b18d-186caea59100-image.png

    Also (since Windows is not real wonderful about restoring all my drive mappings on startup) if a file in the recently used list is on one of those drives, please do not remove it from the recently used list (or give me the option to keep it). Thanks.

    As described in User Manual > Preferences > Recent Files History:
    1340b2c4-4dbb-4fa0-9d9a-64a0ff6077bd-image.png

    Checkmark that option. Then, when Notepad++ launches, it will not remove missing files from the Recent Files History list.

  • JSON String Escape / Unescape

    12
    0 Votes
    12 Posts
    24k Views
    Alexander VerbitskyA

    @Ilia-Nenashev said in JSON String Escape / Unescape:

    Such possibility I have found only in https://github.com/RolandTaverner/npp-json-escape-unescape-plugin but there is some risk of installing compiled plugin from outside of community.

    Well, I’m (the author of the npp-json-escape-unescape-plugin) not that far outside the community. Also, I’ve finally fixed the plugin solution so anyone can build it from source (see the instructions in the README).

  • NppExec v0.8.10 has been released!

    1
    5 Votes
    1 Posts
    449 Views
    No one has replied
  • ViSimulator Not supported anymore?

    10
    0 Votes
    10 Posts
    9k Views
    Dave HouserD

    @PeterJones Thanks for the reply been waiting for something like this for years! Just set up the latest 1.2 version (released yesterday coincidentally) . NppVim is wonderful! It does everything ViSimulator did, it also fixes a few minor issues I have delt with in ViSimulator and added features.

    Fixes:

    Works in newest versions of Npp + 64 bit. Using v $ actually selects to the end of the line now. ViSimulator went to end selection minus one character at the end. Can use Ctrl+f to NP++ find in regular or edit mode. In ViSimulator I needed enter edit mode to use Ctrl+f to find.

    Added feature:

    Can use : <integer> to jump to line numbers now, had to use Ctrl+g to use Npp’s one becuase ViSimulator did not support it. Can now use inputrc commands I used in the past like c i w, and y i w to cut or yank a whole word while in the middle of it

    This is great, I’m really glad this exists now!

  • 0 Votes
    3 Posts
    511 Views
    Revs DeeR

    @PeterJones
    Thank you, that was useful :) I’ve updated shortcuts.xml so Alt+F6 now ignores selected text.

    <Command name="Open new instance" Ctrl="no" Alt="yes" Shift="no" Key="117">$(NPP_FULL_FILE_PATH) -nosession -multiInst</Command> <Command name="Open selected file path in new instance" Ctrl="no" Alt="no" Shift="no" Key="">$(NPP_FULL_FILE_PATH) $(CURRENT_WORD) -nosession -multiInst</Command>

    da188c0f-2184-4898-ae3a-b65a5ba09cf8-image.png

    I hadn’t taken a moment before posting to find what Alt+F6 was labelled as. I’ve been using this command via the keyboard shortcut for a long time and not via the Run menu.

    For basic users, I think it could be useful to have this as an out of the box option e.g. File > New Window (Ctrl+Shift+N).

    Thanks again!

  • New plugin: VirtualFolders

    3
    1 Votes
    3 Posts
    636 Views
    Fatih CoşkunF

    @PeterJones,

    As I see it you can only add actual files from the disk to the projects in Project Panel. In VirtualFolders “files” can be just buffers you created in Notepad++. They don’t have to be saved. Most of my buffers are not saved . They are just notes.

    Also you are right new files (saved or unsaved) automatically added in this panel. When you close it, it is automatically removed. Just like in Document List.

  • Looking for Scintilla examples for a Notepad++ plugin

    3
    0 Votes
    3 Posts
    781 Views
    CoisesC

    @John-HUANG-0 said in Looking for Scintilla examples for a Notepad++ plugin:

    I want to write a Notepad++ plugin that can change the font color and background color of certain specific text.

    Depending on your needs, the first thing you should consider is whether you really need a plugin, or whether a User Defined Language could do what you want.

    However, using a method like this:

    SendMessage(hSci, SCI_STYLESETFORE, SCE_USER1, RGB(255, 0, 0));

    is not very efficient, especially when dealing with very large files.

    When making many calls to Scintilla, it is best to use Direct Access. Even better, if you are writing in C++, is to use the ScintillaCall interface. Annoyingly, that interface does not seem to be documented anywhere. You can read the relevant section in the help for my Visual Studio template and, if it makes sense, either use that template or look at the code (start here) to see how it’s done.

    I asked ChatGPT about this, and it suggested that using Lexilla could be much more efficient. I found the Lexilla source code here:
    https://github.com/notepad-plus-plus/notepad-plus-plus/tree/master/scintilla

    I have never attempted to write a lexer, so I can’t give advice there, except to say that unless you are trying to implement full syntax highlighting for a computer language that doesn’t already have a lexer, it’s probably not the way to go. The efficiency problem can be solved by using the direct access interface or ScintillaCall.

  • 4 Votes
    68 Posts
    35k Views
    PeterJonesP

    Notepad++ v8.8.6 Plugins Admin links to CollectionInterface v1.2.0

    comes with Dark Mode support and bulk-mode download (actually from v1.1, which I mentioned over here) v1.2.0 has better handling of -settingsDir and Cloud Directory. (It was implementing the -settingsDir handling which lead to the new v8.8.6 plugin message NPPM_GETNPPSETTINGSDIRPATH , which my plugin uses when Notepad++ version is new enough (though it does have a workaround that works even if you manually install it on an older N++).)

    CollectionInterface v1.3.0 is now available for manual installation:

    When downloading functionList defitions(s) (either on the FunctionList tab, or in bulk along with the UDL), the plugin will ask if you want to update the overrideMap.xml, which allows the functionList to be fully installed through the automatic process, so that functionList will immediately start working, without requiring you to manually update overrideMap.xml to link to the definition. I wasn’t fast enough with this feature to get it in the v8.8.6 Plugins Admin, so it’s manual installation only, for now.
  • Add additional command line parameter for plugins

    2
    1 Votes
    2 Posts
    2k Views
    Vitalii DovganV

    There is one more thing that requires an explicit mentioning in the documentation:

    When exactly NPPN_CMDLINEPLUGINMSG is sent to plugins? In particular, is it sent before or after NPPN_READY? (Currently it is sent before NPPN_READY. But will it be so in the future?)
  • 3 Votes
    1 Posts
    484 Views
    No one has replied
  • SCI_GETCODEPAGE is NOT always either 0 or 65001

    3
    4 Votes
    3 Posts
    4k Views
    CoisesC

    I wrote in SCI_GETCODEPAGE is NOT always either 0 or 65001:

    When I did a test by changing my system default character set to Japanese, I started a new file, set it to ANSI, and pasted in some Japanese text. SCI_GETCODEPAGE was 932. I saved it that way. When I opened it again, the encoding was set to Shift-JIS — not ANSI — and SCI_GETCODEPAGE was 65001.

    For future reference:

    This only happens if Settings | Preferences | MISC | Autodetect character encoding is checked. When it is not checked, the file opens, as expected, as ANSI (SCI_GETCODEPAGE returns 932).

  • Handling Ctrl+C in a c++ plugin dialog

    7
    0 Votes
    7 Posts
    5k Views
    CoisesC

    @PeterJones said in Handling Ctrl+C in a c++ plugin dialog:

    I interpreted as wanting to have a keyboard shortcut specific to an action inside the dialog.
    […]
    It would very much surprise me if it weren’t possible for a plugin to do that (though I cannot think of any off the top of my head that do so). But whether “subclassing” or some other strategy is the right way to implement the shortcut capture is beyond me.

    (Following based on theory/understanding. I have not actually tried to do this.)

    Subclassing the NPP window would be horrific way to go about this (if it would even work at all). Making shortcuts work specifically in a plugin window is a bit of an awkward problem, because (as far as I can tell) there is only one accelerator table for an entire running program — and Notepad++ already “owns” that table.

    In a modal dialog or a non-modal window that was registered with NPPM_MODELESSDIALOG it wouldn’t work at all, because messages for those don’t go through TranslateAccelerator. The message would get sent to the window/dialog. This is actually the right way to go, but subclassing the main NPP window would be irrelevant, because the message would never get to that window; it would be dispatched to the plugin window or one of its controls.

    For a non-modal window without NPPM_MODELESSDIALOG, the shortcut key would still send whatever menu command was assigned to it. In that case, a subclass procedure could check whether the keyboard focus is in a window belonging to the plugin. If it is, process it; if it isn’t, pass it through normally. But note that you’d be catching the command, not the shortcut. Your command would always take over from the NPP command, regardless of whether it was by menu, by tool button, or by whatever shortcut key the user assigned to the NPP function.

    For modeless dialogs that don’t register, NPP now works around this for cut, copy and paste by sending WM_CUT, WM_COPY and WM_PASTE to the window/control with keyboard focus when one of those commands is invoked and focus is not in an NPP-managed window or control. Note that if you change the shortcut for one of those commands, the dialog will respond to the new shortcut. (It will respond to the “normal” shortcut as well if and only if that shortcut isn’t assigned to a Notepad++ command. Scintilla assignments don’t count; that’s why the problem didn’t show up until the shortcuts were moved from Scintilla to Notepad++.)

    So to get it right, you have to register the window if it is modeless, and you have to pick up the key combination in your plugin code. How to pick it up is a bit of a pain in the butt, because usually the main window (typically a dialog box) won’t have focus, so the keystrokes will go to whatever control does have focus — unless the dialog manager captures it and applies its own logic (such as it does for the tab key and for Alt+ accelerators).

    I still haven’t found a clear and complete description of what the dialog manager does when the message loop calls IsDialogMessage. Part of it is bound up with WM_GETDLGCODE, which is sent to controls — not the dialog procedure — which further complicates things. Subclassing every control which could have focus when you want your key combination to work would probably be necessary. I suspect some key combinations cannot be captured, but I don’t know that for a fact.

    It’s messy. Finding another way — like adding a button for your action and then underlining a letter so that Alt+letter will activate it — is likely to be a lot easier and less fragile. (If the action is control-based, rather than independent of which control in your plugin has focus, then of course the way you did it is correct.)

  • 0 Votes
    6 Posts
    5k Views
    Lycan ThropeL

    @PeterJones ,
    Good point. Luckily, it’s still one of a handful of functionList files…at least until you figure out how to mass produce those. :-)

  • Display markdown outline view through Functionlist

    16
    2 Votes
    16 Posts
    11k Views
    A

    New try: Now it works, like you described it. Seems I set it up wrong!

  • .Net versions

    6
    0 Votes
    6 Posts
    5k Views
    Guido ThelenG

    @General-Coder
    I had the same issue when I installed a new Visual Studio 2022 and forgot to install the packages for C++ development.
    Regards
    Guido

  • How dynamic-ID menu commands are executed and relation to macros

    7
    0 Votes
    7 Posts
    6k Views
    ?

    @PeterJones said in How dynamic-ID menu commands are executed and relation to macros:

    There is no “universally constant value” necessary for Notepad++ to store for it to be working the way it is.

    And creating a new identifier rather than using menuCmdID is not likely to happen (nor should it, IMO)

    That scheme (even if hypothetical) seems to work very well as long as it’s not a problem that the IDs change when you remove menu entries.
    But we do know that it is in fact a problem for recording macros.
    Here are 2 approaches I can think of (besides the “shut up and hack the XML files” one :) ) :

    A. Constant IDs version

    Still have a linked list to represent the structure of the (dynamic) menus, but whose contents are just the IDs of those commands. Can still be in same range as current IDs, if needed.
    Add a dictionary (hashmap) to map from those IDs to the respective actual commands, or in case of macros - list of actions , as you describe in your post above.
    Npp getting command 20001 for ex, involves looking up in the dictionary - most often a constant time operation.

    Deleting an menu entry involves deleting the respective entry in the linked list and also the ID-value pair in the dictionary.

    In addition to that, to ensure that generated IDs stay within a given range: Several schemes are possible, one of the simplest can be just generate a key in range and test that it is not present in the dictionary.

    B. Dynamic IDs, but synchronized in every saved macro

    Basically, keep the scheme as it is at present, but add a way to update, for each macro, every stored referenced menu command ID in an Action record:
    at every removal of a menu entry, compute how the rest of entries’ IDs would change (if located After those removed, the ID would decrease by one) and traverse the linked list of all macros and update that ID in every action that refers to a menu-command in the range of the dynamic-IDs types (Run, Plugin and Macro commands).
    Thus on Npp closing, the macros written in XML will also contain updated IDs.

    But don’t pretend the niche [for a more powerful macro system ] doesn’t already have a plethora of entries.

    I think there is plenty of room for a macro system to grow in power and STILL be much easier to do a lot of common tasks, than the same tasks in any scripting language.
    Because with macros you don’t have to learn and remember syntax.

  • [New Plugin] NppOpenAI

    47
    8 Votes
    47 Posts
    69k Views
    Richárd StockingerR

    @erik-neyman
    Hi,

    first of all, please hide/change your secret_key setting (or remove the image), as this is a public forum and others may misuse it. :(

    Unfortunately, there may be bugs in the latest NppOpenAI v0.5 update (updates/fixes can be found on the NppOpenAI development project page), so I suggest that instead of setting a route_chat_completions, you should specify the URL “all at once”, e.g.

    api_url=https://api.openai.com/v1/chat/completions

    Edit: You can leave the route_chat_completions setting unchanged.

    I apologise for the error!

  • XBrackets 2.0 is coming!

    9
    4 Votes
    9 Posts
    5k Views
    Vitalii DovganV

    @Ekopalypse
    Wow, thank you!

  • Plugin request: insert relative path

    10
    0 Votes
    10 Posts
    7k Views
    ?

    Has anyone here found how to open those relative path links from within the Notepad++ file, in their default app ?

    That would make the solutions listed here even more useful IMO; one could have for instance have the documentation of a project in simple text files.

    Opening the links at either double-click (better, & underlined) or some other action.
    I’ve requested the feature on github https://github.com/notepad-plus-plus/notepad-plus-plus/issues/16942

  • [feature requet] New Selected Multiple Documents

    5
    0 Votes
    5 Posts
    5k Views
    PeterJonesP

    @Mit-Jean ,

    Notepad++ has a plethora of ways to decide which file(s) should undergo search/replace. I am not convinced it needs another.

    One document: Search > Replace > Replace All = does replacement whether there’s a saved file or not All open documents: Search > Replace > Replace All in All Opened Documents = does replacement whether there’s a saved file or not Across multiple files: Search > Find in Files > Replace in Files = does replacements only in files saved to the filesystem Across a specific set of files in a “Project”: View > Project Panels > Project Panel N, then in the Project Panel, Right Click on the workspace > Find in Projects (or Search > Replace, pick the Find in Projects tab) and then run Replace in Projects

    My original thought was that, instead of somehow “marking” a file for “MOD scope”, you would just add your file to the project, and use Find in Projects. But since you want to include documents that haven’t been saved to a file yet, that won’t work (because Projects require that there’s an underlying file for everything added to the Project). However, I might give the advice that it would improve your workflow (and reduce the chances of losing data) if you were able to update your workflow to always save a file to the filesystem before doing any search/replace in it (especially as a multi-file S/R, as that’s a situation where you might not notice right away that your S/R didn’t work quite as expected, and you might move beyond the undo-history before you discover your mistake). (My personal opinion is that anyone who tries to do any more editing than Create File then Save, or maybe Create File then paste boilerplate then save, is just begging their computer to lose data for them: computers crash, and applications cannot perfectly/flawlessly prevent loss of data when they do; having unsaved data is foolish, IMO. For the ephemeral stuff, I have a “scratchpad” document always open, and I make liberal use of the AutoSave plugin, as described in this FAQ. My only exception to this rule is that I often create an empty unsaved tab to paste in data from a post in this Community, verify my suggestion works, and then delete it, all with it never being saved to disk; but that’s because I know that there is a 0% chance that I would care that the data were lost if my computer crashed while I was in the middle of it, because it’s data copy/pasted from the forum.) But enough of my preaching.

    If you were to make an official feature request – like @Alan-Kilborn hinted with his link – then I would say don’t word it as you currently do: Notepad++ already has a way to apply a specific color to a document’s tab (right click on the tab, Apply Color to Tab > Apply Color N), so instead of creating yet another way of marking the file for your “MOD scope”, what I would suggest is asking for “Replace in All Tabs of Color N” where “N” is 1…5 for the five possible colors; this would make the interface very similar to the Find in Projects dialog, where you can select one of the three project panels. That way, instead of having some new concept of “MOD scope”, it would be making use of a way that Notepad++ already provides to indicate similar tabs – it would actually give you five independent “MOD scopes” simultaneously, without introducting another new concept to the N++ interface.