Folder images are changed in FileBrowser::notified() when TVN_ITEMEXPANDED
is recieved. This works fine when e.g. expand/collapse using "+" button.
However, when foldAll() or expandAll() are called on a TreeView,
the TVN_ITEMEXPANDED is not sent. The reason is that TVIS_EXPANDEDONCE flag
is set. To reset that flag, it would be needed to pass TVE_COLLAPSERESET
to TreeView_Expand that also removes all child items which is unwanted.
Resolve the problem by notifying TreeView parent manually when recieve
TVM_EXPAND and TVIS_EXPANDEDONCE is set.
Fix#8912
The new behaviour of loading function list will be:
1. For the installer package:
Try to load from %APPDATA%\Notepad++\functionList\, if it failed, then load from %PROGRAMFILES%\Notepad++\functionList\.
In this way, users can override function list in %APPDATA%\Notepad++\functionList\ manually. Otherwise, function list won't be empty.
2. For the portable package:
- with doLocalConf.xml : Load always from <Notepad++ Dir>\functionList\
- without doLocalConf.xml : Try to load from %APPDATA%\Notepad++\functionList\, if it failed, then load from <Notepad++ Dir>\functionList\
Fix#9134
#define NPPM_GETSETTINGSONCLOUDPATH (NPPMSG + 98)
// INT NPPM_GETSETTINGSCLOUDPATH(size_t strLen, TCHAR *settingsOnCloudPath)
// Get settings on cloud path. It's useful if plugins want to store its settings on Cloud, if this path is set.
// Returns the number of TCHAR copied/to copy. If the return value is 0, then this path is not set, or the "strLen" is not enough to copy the path.
// Users should call it with settingsCloudPath be NULL to get the required number of TCHAR (not including the terminating nul character),
// allocate settingsCloudPath buffer with the return value + 1, then call it again to get the path.
Close#9168
Use SCI_SETVISIBLEPOLICY and SCI_ENSUREVISIBLEENFORCEPOLICY to replace SCI_SETYCARETPOLICY.
X and Y caret policy should be user-configurable for document navigation and the VISIBLE / ENSUREVISIBLE could be used for application / auto navigation (like re-centering a search result).
Fix#8961, close#8962
New "functionList" will be added beside of notepad++.exe or "%APPDATA%\Notepad++\", according the installation mode. If the portable package is used, after removing "doLocalConf.xml", the "functionList" folder should be copied manually from Notepad++ installed directory to "%APPDATA%\Notepad++\" to make function list work again.
All splited files are localized in this folder with the explicit language name.
"overrideMap.xml" is optional for overriding the default functionList parse rule files, and for adding UDL parse rule files.
Close#4896
Improve URL update on resize
The reason for the effect is, that the addHotSpot calls for resizing are in the WM_SIZE of the application. This works, as long as the size of the whole application changes, but not, when the application size remains constant and only the size of the document window inside the application changes.
The solution for this is, to remove the addHotSpot calls from the WM_SIZE of the application and add them to the DocTabView::reSizeTo function instead. Since addHotSpot cannot be called directly from this function, I took the detour over NPPM_INTERNAL_UPDATECLICKABLELINKS.
Fix#9032, close#9034
"wstring::length()" returns less needed byte number because this methode consider 2 bytes character as 1 character, whereas "strlen(char*)" returns the total byte number in the char*.
Since SCI_ADDTEXT uses UTF8 char* as argument, it'll be more accurate to count the length (total byte number) with char* directly.
Fix#9009, fix#8525, close#9014
This is an enhancement of PR #8475 which fixed (and still fixes) #8466.
It takes into account, that `WM_ACTIVATE` is not called only, when the window is being activated, but also, when the window is being **de**activated. In the latter case it is not necessary to do the activation actions.
This was pointed out to me by @Predelnik, who had a problem with the additional `SCN_UPDATEUI/SC_UPDATE_H_SCROLL` notification occurring when the window is being deactivated, see https://github.com/Predelnik/DSpellCheck/issues/221#issuecomment-696652074 for details.
The shortcut "&Format" in Column editor dialog is unecessary.
Furthermore, some characters 'o' are inserted in colomn mode when Alt-F is triggered (and Column editor dialog is closed).
No selection:
Example: Pos : 1,234
Meaning: Single caret is at position 1233 in document (user position 1234)
Single stream selection (no change to existing behavior):
Example: Sel : 27 | 2
Meaning: 27 characters selected on 2 lines
Multiple stream selections (this PR behavior):
Example: Sel 3 : 72 | 6
Meaning: 3 selections of 72 characters on 6 lines
Rectangular selection with no virtual space in column block (this PR behavior):
Example: Sel : 2x4 = 8
Meaning: selection of 2 rows(lines) by 4 columns; 8 characters in that selection
Rectangular selection with some virtual space in column block (this PR behavior):
Example: Sel : 2x4 🡢 6
Meaning: selection of 2 rows(lines) by 4 columns; 6 real characters in that selection
Close#8524, close#8780
The bug: after closing last file opened in 2nd view in Window sialog, the last file opened in 2nd view in Notepad++ is closed, but remain in Window dialog.
This PR is a workaround solution to close Window dialog if the last document is closed.
Fix#8697, close#8721
Improvements :
- add templated classes (and template-nested templated classes)
- add namespaced classes
- add classes which inherits another class without the accessibility keyword (private is optional for example)
- add classes with virtual inheritance
- add functions defined with the following keywords
- (left) consteval|constexpr|friend|inline|static|virtual
- (right) const|final|noexcept|override
- add functions defined with templated types (and template-nested templated types)
- add operator definitions
Close#5175
The both flags -export=functionList & -quickPrint don't need Notepad++ GUI, so Notepad++ will start up invisiblely while one of these 2 flags is given. It doesn't prevent Notepad++ from being visible in the case of -export=functionList but this PR make unit-tests more bearable.
If a non-existing file is open as the 1st tab (opened then file is deleted outside of Notepad++), and "Close All BUT this" is run, then current document will be closed.
Fix#8617
Allow user to start making a stream selection and then change to column block by pressing ALT key during mouse or keyboard selection.
Fix#8555, close#8557
Fix accented characters in ANSI files not found in "find in files" and "replace in files" commands issues.
This regression (in v7.7 from v7.6.6) is due to the upgrade of Scintilla from v3.56 to v4.14.
Fix#5825, fix#5830, fix#7668, fix#7773
Make workspace (project) & session xml setting files consistent while their file extensions are defined in Preferences dialog:
1. If I specify a session file in the command line (, or if I double-click a session file in the Explorer), not the session file itself is opened, but the session stored in it.
2. If I specify a workspace file in the command line (, or if I double-click a workspace file in the Explorer), not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
3. If I specify a session file in the `File` menu `Open Ctrl-O`, not the session file itself is opened, but the session stored in it.
4. If I specify a workspace file in the `File` menu `Open Ctrl-O`, not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
5. If I drag a session file to Npp, not the session file itself is opened, but the session stored in it.
6. If I drag a workspace file to Npp, not the workspace file itself is opened, but the Project Panel 1 switches to the specified workspace file.
That means that once an user extension is defined for these 2 types of file, Notepad++ stores only the session or the workspace but not opens the file itself. The session and workspace setting files are not supposed to be edited manually.
If a defined conflict happens (for example, a non session or workspace setting file with the defined extension), user can always remove the defined extension from Preferences dialog temporarily to open it.
cherry picked from commit 70e746b7a8fe44c9a1e724581ceb3b457138a474
Close#8374, fix#8324
... by using Scintilla's DirectWrite technology.
It allows ligature support if the font needed (for exemple "Fira Code") is installed.
Fix#2287, close#8326Fix#442, fix#675, fix#813, fix#870, fix#1621, fix#3458, fix#4056, fix#4086, fix#4490, fix#8305
1. Add file extension automatically while changing file type via combobox in new style dialog.
2. Add file extension automatically for session files and workspace files while saving in new style dialog.
Fix#4876, close#8311, close#8312
Fix Mouse remains in clicked state after resizing docked windows:
The reason for the effect is the mouse hook procedure, which seems to be quite obsolete in contemporary systems: it catches the mouse messages and posts them a second time to the same window. I assume, that was ment to speed up the shifting of the splitters on "prehistoric systems" (That's what you call every system not supporting transparent windows). I see no regression without this hook.
What happens is, the hook catches the WM_LBUTTONUP message and posts it to DockingSplitter::runProc. Here, the hook is released and ReleaseCapture() is called. All fine.
But Windows fails to update its internal key state, when the WM_LBUTTONUP comes as an posted-by-a-hook message. So, if you call GetKeyState(VK_LBUTTON) after ReleaseCapture() in the original code, then it is still in a pressed state. Which confuses the Document Map later.
Fix#8285, close#8286
This PR fixes the following effects:
1. Document map overlay remains visible after minimize to tray.
2. Document map overlay is left behind on current monitor after moving Npp with Windows+Shift+Arrow to another monitor.
3. Document map overlay escapes to another monitor without Npp, when Windows+Shift+Arrow is pressed while the input focus is at the document map.
Fix#1317, close#8280
The current bug: the unconnected network or USB drive while loading a file from it is not detected. As a result Notepad++ opens an empty or uncomplete document.
This commit fix it by not opening anything and showing error box, if file reading fails.
Fix#3381, close#8267
The full story, debated before, is that regular expression searching in a backward direction from the caret position causes matches that the user does not expect. The best thing that was decided to do (group decision) is to fully disable upward searching.
Fix#3640, close#8269
Due to the mysterious reason, change the icon in About box makes application icon display incorrectly (in explorer & on taskbar).
This reverts commit 3a46a6c23d.
I recently went through a bunch of my own source code as well as about half of Mozilla's source code for Firefox. As I found CSS keywords that were not included in Notepad++, I added them locally.
I then merged them with existing keywords, and sorted the combined list alphabetically.
The result is reflected in this pull request.
I hope it helps you and others.
Close#8028
Any setting other than the default setting "for new opened document - UTF8 apply to opened ansi files" will cause C/C++ and other some languages (not for xml though) folding lost on startup.
Fix#4103
"&R" keyboard shortcut for "Replace in Files" is in conflict with one for "Replace", and there's no more available shorcut for "Replace in Files". So let's just remove this useless shortcut.
Fix#3539