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
    • submitificS

      HOW Do You Add Keyboard Shortcuts

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      13
      0 Votes
      13 Posts
      5k Views
      PeterJonesP
      @Italian-menu , Why in the world would you think your post helpful? “depending on what you’re using” – of course they are using Notepad++. This is a Notepad++ forum. If you cannot give a human-created Notepad++ -specific answer, don’t bother posting.
    • S

      Thread about the function pane (filtering, search cancel, autowidth, and visuals)

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      2
      16
      0 Votes
      2 Posts
      238 Views
      PeterJonesP
      @shodanx2 said: I have a few observations to make about the function pane and a few improvements to propose. I could not find the keybind, is there one ? Not by default. But like all menu commands, you can assign one with Shortcut Mapper, if you want one. There are more menu entries in Notepad++ than there are keystrokes available, so not every menu entry gets a keystroke. I propose LeftALT+F by default ? As far as I have been able to tell, the way that Notepad++ internally handles shortcuts doesn’t distinguish the left and right alt keys. It’s just “Alt” as the modifier. Unused horizontal space It seems there is this horizontal space, maybe it’s useful in another language, but for me, there isn’t anything useful in that space. Maybe it should be reduced somehow ? That’s the way that treeview controls generally work. I think it would take a huge amount of development effort to customize or re-create oit. X. Function filtering In my language, functions which begin with “" … It would be great to be able to hide functions that start with "”. but have a toggle button to show them if I suddenly need them. Interesting feature idea. I’m not sure how easy that would be to implement. But this would be the first thing you said that I would think would be worth putting in an official feature request. (If you think that this Community Forum is the place to make feature requests, you need to read the Feature Request FAQ) X. Resetting the function search X. function search length has a maximum ! I haven’t used the function search feature enough to be able to comment on those. If other users agree with you on those items, they could each go in as separate feature requests. X. The function search sidebar is somehow, never the right width ! I don’t know why, but I am constantly adjusting the width of the function search sidebar. I don’t know why I can’t just set it once and forget it. Presumably just the right width, I shouldn’t need to touch it again. But somehow, I don’t know what I do, but I do move and resize notepad++ a lot with AltSnap and I end up often having to readjust the function sidebar width. I don’t know that there’s anything the developer can do to fix that. If you are accidentally resizing it, he cannot prevent it. The docking panels are designed to be resizable. And I struggle to hit that narrow width to drag it. Hmm… Do you have a high-DPI monitor? Because on my old-fashioned 100%-scaling setup, it seems to me to be the same width as any size resize control in any windows application. Beside what could be done to automatically have it be “the right size” automatically. “The right size” is meaningless. Everyone disagrees on what that would be, which is why it’s user controlled. Besides, all the docking panels share the same basic control, and everything docked on the right (for example) shares the same width… so what would be “perfect” (in your opinion) for the FunctionList on the right might be too small for the DocumentList (for example) on the right. I suggest these. Make middle-click-drag allow drag-resizing of the sidebar I seem to remember that was suggested elsewhere in the forum, and that someone wrote a script for the PythonScript plugin which could do that. But maybe it was just a related thing I’m remembering. search, search. Okay, this discussion is what I was thinking of (the “move the ‘other view’ separator” portion. I haven’t studied the scripts provided, but if one of them addressses the separator, my guess is that it could be modified to work on the docking-separator instead. X. The function sidebar cannot be docked to the other view separator The docking code for Notepad++ hasn’t been set up to allow “dock to middle” (which would be made more complicated because sometimes the views have a vertical separation when they’re side-by-side, an sometimes a horizontal separation when they are stacked top/bottom). I think there’s already an existing official feature request for dock-to-middle, so you might want to search through the existing features (make sure to remove the “open” filter, because there might be a closed/rejected request) to see if any of the requests about “dock” or similar might already ask for that. But if you cannot find one, maybe I’m mis-remembering (or maybe it was just a user in the Community, who never bothered to put in an official feature request). X. Visual glitching during resize Not a big deal, but the re-paint algorithm is quite sloppy It could be improved Can you be more specific about that? Under what circumstances? What’s your setup like (monitors, DPI, etc… ? > Debug Info is always useful for helping understand your setup)? What do you mean by “sloppy”? Ok, this is everything I had for you regarding the Function sidebar, thanks ! As fellow users, we might be able to talk about it, or commiserate with you. But if there are real problems or real feature requests, you would have to create separate tracking issues for each request, as described in the already-linked FAQ. (Putting a bunch of requests into a single Feature Request issue means the individual sub-requests won’t be properly tracked, and one or more are likely to get lost.) From above, I see two possible feature requests for sure (hide functions starting with _, and dock-to-middle), and another two that are likely reasonable, if someone else can confirm (the two function-list filtering points). I think the “sloppy re-paint” needs to be given more detail before suggesting that a bug report get submitted. But for any feature request or bug report in the official tracker, make sure you search through existing reports/requests (open and closed) before submitting one, to make sure it’s not a duplicate.
    • h-jangraH

      NppVim 1.14.0.0 Release : Added nppvim.rc support

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      1
      1 Votes
      1 Posts
      24 Views
      No one has replied
    • PeterJonesP

      Announcing Perl-based automation of Notepad++

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development perl automation
      17
      6 Votes
      17 Posts
      6k Views
      PeterJonesP
      v0.012 released to CPAN Update for Notpead++ v8.5.4 - v8.9.6.4 Update Editor messages and enumerations (hashes) Update Notepad++ menu commands and messages Remove notepad->prompt() and the Win32::GUI dependency [#91] Please comment on Issue #92 if this call is important to you <https://github.com/pryrt/Win32-Mechanize-NotepadPlusPlus/issues/92> Improve test suite Get it working through Perl v5.42 Don’t test as many old versions (too much compute overhead) See CHANGES file for full history, including interveninng v0.009, v0.010, and v0.011 I don’t always post about new versions here (mostly because I get distracted and forget to). But I thought it was important on this one, because notepad->prompt() has been disabled in this version: if notepad->prompt() is important to you, please comment on https://github.com/pryrt/Win32-Mechanize-NotepadPlusPlus/issues/92 and stick with v0.011, which (until further notice) is the most recent version to include the notepad->prompt()
    • Vitalii DovganV

      NppExec v0.8.11 has been released!

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      2
      5 Votes
      2 Posts
      325 Views
      Vitalii DovganV
      NppExec v0.8.12 has been released! Glory to Ukraine! Glory to the heroes! fixed: WarningAnalyzer failed to match e.g. “%FILE%” (%LINE%) :* Get it here: https://github.com/d0vgan/nppexec/releases/tag/NppExec_v0812
    • Thomas KnoefelT

      [New Plugin] MultiReplace

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      78
      3 Votes
      78 Posts
      64k Views
      Thomas KnoefelT
      MultiReplace 6.0 is out and will land in Plugin Admin with the next Notepad++ release. The focus of this release is a second formula engine: ExprTk now sits alongside Lua for math, string and conditional replacements, joined by multi-list tabs, tandem mode, and a series of UI and workflow improvements. Several new options live under Plugins > MultiReplace > Settings. Download: Latest build Key Features & Improvements New Formula Engine (ExprTk): A second engine alongside Lua for math, string and conditional replacements. Its standout is the built-in output formatter - a single declarative spec that turns any result into fixed decimals, hex/binary, padded and aligned fields, time durations or formatted dates, applied right where the value is produced. Switch per tab via the (L) / (E) indicator next to Formula Support. The ExprTk integration - the (?=...) marker and the formula functions for reading captures and earlier results - follows the approach pioneered by @Coises in Columns++. Full syntax and examples are in the ExprTk formula reference. List Tabs: Keep different replacement sets available across tabs. State is fully separate per tab. Tandem Mode: MR panel snaps to the Notepad++ window edge and follows it around. Toggle via the plugin menu. Reopen on Startup: Reopens MR automatically if it was open when you closed Notepad++. Opt-in via the plugin menu. Compact Toolbar: New top toolbar layout - more horizontal space for the list. Always Visible List: Keeps the list visible instead of collapsing when you toggle it off. Requires “Keep list always visible” enabled in Settings. Bookmark Matches: Sets a Notepad++ bookmark on every match line. Toggle via the new checkbox next to Mark Matches. Column Reorder & Lock: Drag column headers to rearrange. Right-click for “Lock column width” or “Reset Column Order”. Modified Timestamp Column: Optional column tracking the last edit per entry. A dirty-flag stripe on the left edge marks unsaved changes. Excel-Compatible CSV: Lists save in the standard CSV dialect used by spreadsheets - opens cleanly in Excel, edit there, load back without conversion. Keyboard Shortcuts Ctrl+Up/Down: Move selected rows up or down (auto-repeat) Ctrl+L: Toggle list visibility from anywhere in the panel Alt+Up/Down: Round-trip between input fields and a selected row Ctrl+Shift + button click: Run from the input fields while the list stays open Ctrl+Shift+H: Pull selected editor text into Find what (optionally auto-escaped for Regex/Extended mode) [image: 1780756837071-multireplace6.png] Issues or suggestions: GitHub. Happy replacing!
    • isaacjuanI

      [New Plugin] AI Chat — chat with LLMs directly inside Notepad++

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      1
      1 Votes
      1 Posts
      167 Views
      No one has replied
    • PeterJonesP

      Warning: Spammers are getting better

      Watching Ignoring Scheduled Pinned Locked Moved Blogs
      11
      5 Votes
      11 Posts
      9k Views
      PeterJonesP
      In a humorous anecdote, I just rejected an AI spam post that titled itself (translated from the original language): “AI Super Student”. If all AI bots would be kind enough to announce themselves as AI, that will make our jobs as moderators so much easier. Thank you. ;-)
    • guy038G

      New displaying of the "Search Results" panel

      Watching Ignoring Scheduled Pinned Locked Moved General Discussion
      2
      1
      0 Votes
      2 Posts
      269 Views
      guy038G
      Hi, All, From the @pellelin’s post, here is an improvement of my previous post : I now added the complete path of each file , followed with a \ character and the file name ! Once any Search Results panel is displayed : Hit the Ctrl + A shortcut Hit the Ctrl + C shortcut Open a new tab ( Ctrl + N ) Paste the Search Results contents in this new tab ( Ctrl + V ) Run the option Edit > Line operations > Reverse line order ( IMPORTANT ) Now, open the Replace dialog ( Ctrl + H ) Uncheck all box options FIND (?-si)^\tLine\x20+(\d+)(?=(?s:.+?)^\x20\x20(\u:.*\\.+)(?=\x20\())|^\x20\x20\u.+\R REPLACE ?2\2\t\1\t Check the Wrap around option Select the Regular expression search mode Click on the Replace All button Now, re-run the Edit > Line operations > Reverse line order option ( IMPORTANT ) Finally, save this new tab for future study within N++ or Excel ! Now, @pellelin, if you don’t have already the Columns++ plugin installed in your configuration, I kindly advice you to install it ! After installation of this plugin, close and re-open Notepad++ First, run the Plugins > Columns++ > Elastic tabstops option Then run the Plugins > Columns++ > Convert tabs to spaces option Now, in order to right-aligned the line numbers, do the following regex replacement : FIND (\d+)(\x20*)(?=\x20:\x20) REPLACE \2\1 With the same parameters, in the Replace dialog, than above ! For example, I did a search of the word the, whatever its case, in Normal mode, on any .txt file of an USB key Search "the" (77312 hits in 507 files of 590 searched) [Normal] I got an INPUT file of 51,5544 lines for about 10,2 Mb And, after the above process : Reverse line order Regex Replacement Reverse line order Which took 82s, I got an OUTPUT file of 51,047 lines, for about 12,2 Mb, with Complete file path, Line number and Text, all aligned [image: 1780319031552-b25954ec-283c-4b15-9603-bf0d370d3c2d-image.jpeg] Best Regards, guy038 P.S. : In this version, I didn’t report the number of hits. If this information matters too, just ask me about it !
    • donhoD

      Notepad++ release 8.9.6.2

      Watching Ignoring Scheduled Pinned Locked Moved Announcements
      1
      2 Votes
      1 Posts
      2k Views
      No one has replied
    • donhoD

      Notepad++ v8.9.6 Release Candidate

      Watching Ignoring Scheduled Pinned Locked Moved Announcements
      1
      3 Votes
      1 Posts
      352 Views
      No one has replied
    • Matt LongM

      New to Notepad++ and trying to convert 12 hour time to 24

      Watching Ignoring Scheduled Pinned Locked Moved Help wanted · · · – – – · · ·
      4
      0 Votes
      4 Posts
      557 Views
      LachlanmaxL
      @guy038 Just to say, I tried your solution in native N++ for kicks, and it worked! So kudos for an elegant idea. :)
    • sound-fxS

      Scripts to align text

      Watching Ignoring Scheduled Pinned Locked Moved Notepad++ & Plugin Development
      5
      4 Votes
      5 Posts
      5k Views
      sound-fxS
      I’ve added an option to pad to the right side of the selected character. This preserves the character’s position and instead aligns the non-space text to the right of the character. The default pads to the left side, so the character itself gets aligned. A complementary set of scripts, align_text_right.py and align_text_right_1.py, use this new option. Here’s the complete set of scripts. align_text.py: #------------------------------------------------------------------------ # If the character specified in the current selection is a white space, # then prompt the user to enter the alignment character (or characters), # using this character as the initial default. #------------------------------------------------------------------------ default_align_char = ',' from enum import Enum class PaddingSide(Enum): LEFT = 0 RIGHT = 1 def align_selected_text(max_align_char_count = None, padding_side = PaddingSide.LEFT): """Insert padding into the lines in the selection, as needed, to align up to max_align_char_count instances of a specific character or string of characters The default is to align all instances of the specific character. At present, the alignment character is taken as the character at the top of the current selection. You can uncomment some code below to change this policy to instead take the alignment character from within the selection at whichever end has the cursor. Either way, if that character is white space, the user is prompted to type the character (or characters). If you really wish to align on a white space character, you can just click OK at the prompt. When prompted to type the alignment character, the user may enter a sequence of characters, e.g., "-->", in which case the alignment is on the instances of that entire character sequence. For example, if the user enters "-->" at the prompt, then instances of the "-" character get aligned only if they're followed immediately by the characters "->", while instances of, say, "-1" and "- " remain unaltered. If there is no current selection, then aligns all lines in the editor. If there is a current selection, then aligns only the lines that are at least partially included in the selection, and the selection is changed to the entire block of newly-padded lines. Parameters ---------- max_align_char_count : positive integer, optional The maximum number of instances to align of the specific character. For example, set to 1 to align only the first instance of the character on each line. The default is to align all instances of the specific character. padding_side : instance of PaddingSide, optional Indicates which side of the character gets the padding. The default is PaddingSide.LEFT, so the character itself gets aligned. Set to PaddingSide.RIGHT to preserve the character's position and instead align the non-space text to the right of the character. """ from Npp import editor #---------------------------------------------------------------------------- # For the alignment character, take the character just inside the bounds of # the selection block (at either the start or the end, as determined below). #---------------------------------------------------------------------------- editor.targetFromSelection() selected_text = editor.getTargetText() #---------------------------------------------------------------------------- # Use this code to get the align_char unconditionally from the start # of the selection. If there is no selection, use the character at the # current cursor position; if that is unavailable, fall through to the # prompt below by treating the alignment character as whitespace. #---------------------------------------------------------------------------- if selected_text: align_char = selected_text[0] else: current_pos = editor.getCurrentPos() align_char = editor.getTextRangeFull(current_pos, current_pos + 1) if not align_char: align_char = ' ' #---------------------------------------------------------------------------- # Optionally use this code to get the align_char from within the selection # at whichever end has the cursor. #---------------------------------------------------------------------------- # if selected_text: # (startByte, endByte) = editor.getUserCharSelection() # if startByte == editor.getCurrentPos(): # align_char = selected_text[0] # else: # align_char = selected_text[-1] # else: # current_pos = editor.getCurrentPos() # align_char = editor.getTextRangeFull(current_pos, current_pos + 1) # if not align_char: # align_char = ' ' # If the character from the selection seems implausible as the # align_char, then prompt the user for it. if align_char.isspace(): from Npp import notepad global default_align_char align_char = notepad.prompt('Align character:', 'Enter Alignment Character', default_align_char) if align_char is not None: default_align_char = align_char #---------------------------------------------------------------------------- #%% Get the lines of text within the selected alignment block #---------------------------------------------------------------------------- (startLine, endLine) = editor.getUserLineSelection() startPos = editor.positionFromLine(startLine) endPos = editor.getLineEndPosition(endLine) text_lines = editor.getTextRangeFull(startPos, endPos).splitlines(True) #---------------------------------------------------------------------------- # Remember whether there is a user-selected block, so we can restore a # corresponding selection after aligning the text. #---------------------------------------------------------------------------- restore_selection = editor.getSelectionStart() != editor.getSelectionEnd() #---------------------------------------------------------------------------- # Align all instances of align_char within the lines of text #---------------------------------------------------------------------------- if align_char is not None: # Enable the following to save the align_char, however it was determined, # to be the default_align_char when prompting for it next time. # default_align_char = align_char if max_align_char_count is None: align_char_count = max(line.count(align_char) for line in text_lines) else: align_char_count = max_align_char_count start = 0 for instance in range(align_char_count): # Set the target column using the index of the align_char, ignoring # immediately preceding space, or the length of the line align_char_cols = [line.find(align_char, start) for line in text_lines] # Only lines that contain this instance participate in this pass. # A failed find() returns -1, and using that as a slice index would # make lines without this instance incorrectly affect the target. lines_with_instance = [(line, col) for (line, col) in zip(text_lines, align_char_cols) if col >= 0] if not lines_with_instance: break if padding_side == PaddingSide.LEFT: # Align the alignment character itself, removing any spaces # immediately to its left before inserting the required padding. target_col = max(len(line[:col].rstrip()) for (line, col) in lines_with_instance) for (idx, line) in enumerate(text_lines): align_char_col = align_char_cols[idx] if align_char_col >= 0: text_lines[idx] = line[:align_char_col].rstrip().ljust(target_col) \ + line[align_char_col:] start = target_col + len(align_char) elif padding_side == PaddingSide.RIGHT: # Align the non-space text after the alignment character. # Preserve the alignment character itself, but # replace any existing spaces after it with the required # padding. suffix_starts = [] for (line, col) in lines_with_instance: suffix_start = col + len(align_char) while suffix_start < len(line) and line[suffix_start] == ' ': suffix_start += 1 suffix_starts.append(suffix_start) target_col = max(suffix_starts) for (idx, line) in enumerate(text_lines): align_char_col = align_char_cols[idx] if align_char_col >= 0: suffix_start = align_char_col + len(align_char) while suffix_start < len(line) and line[suffix_start] == ' ': suffix_start += 1 text_lines[idx] = line[:align_char_col + len(align_char)].ljust(target_col) \ + line[suffix_start:] start = target_col else: raise ValueError('Unsupported padding_side: {}'.format(padding_side)) editor.setTarget(startPos, endPos) editor.replaceTarget(''.join(text_lines)) if restore_selection: startPos = editor.positionFromLine(startLine) endPos = editor.getLineEndPosition(endLine) editor.setSelectionStart(startPos) editor.setSelectionEnd(endPos) if __name__ == '__main__': align_selected_text() align_text_1.py: from align_text import align_selected_text align_selected_text(max_align_char_count = 1) align_text_right.py: from align_text import align_selected_text, PaddingSide align_selected_text(padding_side = PaddingSide.RIGHT) align_text_right_1.py: from align_text import align_selected_text, PaddingSide align_selected_text(max_align_char_count = 1, padding_side = PaddingSide.RIGHT)