Improve file name parsing.
Use the absolute path to check if a file name is a directory.
Expand environment variables if they are part of the file name.
Avoid unnecessary calls to onPreFileOk().
Close#9467
Rename ScitillaComponent -> ScintillaComponent.
Git history should be kept because `git mv` was used.
Also change paths in source code.
This was noted in scope of #9403Close#9450
And use modern CustomFileDialog istead of old FileDialog in Notepad++.
In the file dialog, override window procedure for "OK" button and
file name edit box to check for input.
Transform forward slash file name to a Window path after input.
Fix#9374, close#9403
Save snapshot session immediately when needed (without incuring delay by using ::PostMessage).
Fix#7839 and latest user reported problems in #6133.
Close#9427
When any of the Find window comboboxes are dropped and an entry is highlighted, pressing the Delete key will remove the highlighted entry from the following comboboxes:
1. Find what combobox
2. Replace with combobox
3. Directory combobox
4. Filters combobox
No method is provided for clearing all entries at once, but as the "depth" of the comboboxes is limited to a small amount, clearing one entry at a time (when one wants to clear all) is not overly burdensome.
Fix#9366, close#9396
Implements a fix whereby the RIGHTMOST user specified value in the vertical edge box is the column to split by, e.g. 60 in the following example: [15, 40, 60]
If the contents of the box were instead [15, 60, 40], the split-by column would be 40, as that is the RIGHTMOST value.
Fix#8262, close#9387
Add new methods to CustomFileDialog:
- setTitle() sets the dialog title
- setFolder() sets an initial directory
- pickFolder() shows a file open dialog to select a folder
Use CustomFileDialog in folderBrowser().
Affected areas:
- Search > Find in Files
- File > Open Folder as Workspace
- Preferences > Default Directory
- Preferences > Backup > Custom Backup
- Preferences > Cloud & Link
Fix#8513, close#9378
Save FileBrowser root folders if it is visible.
When loading a session file (from menu or via the command line),
launch a FileBrowser from scratch and add folders from the file to it.
When loading an auto-saved session, ignore saved FileBrowser folders.
Store roots and selected item of FileBrowser in a Session class.
Add "FileBrowser" node to session XML.
It containts "latestSelectedItem" attribute and "root" child nodes.
This structure corresponds to the one from "config.xml".
Current save session behavior for Folder as Workspace (FaW) is like this:
1. FaW isn't opened, checkbox is greyed-out -> FaW info is not saved in session
2. FaW is opened, checkbox isn't checked -> FaW info isn't saved in session
3. FaW is opened, checkbox is checked -> FaW info is saved in session
Load session behavior:
1. FaW isn't open, session without FaW info -> FaW isn't shown after loading
2. FaW isn't open, session with FaW info -> FaW is shown after loading
3. FaW is open, session without FaW info -> FaW is kept as is without changes
4. FaW is open, session with FaW info -> FaW is shown with new directories from session
Fix#9165, close#9286
Enhance ghost typing command line argument feature by changing its format:
With it's new format -qX="string contains white space" (where X is 't', 'n' or 'f'), the white spaces can be contained between double quote, so no need to use %20 anymore for substituting white spacees.
Currently the settings directory could be:
1. Notepad++ installation dir if doLocalConf.xml is present.
2. %APPDATA%\Notepad++ if doLocalConf.xml is absent.
3. The path defined in \cloud\choice in Notepad++ installation or in %APPDATA%\Notepad++, it depends on the existence of doLocalConf.xml.
In this PR "-settingsDir" argument is added for overriding above settings paths:
4. Overrided by command line argument -settingsDir="E:\my NppSettings\" : All the above configurations will be ignored, Notepad++ will load (and write) config.xml and the other configuration xml files from (into) "E:\my NppSettings\". Note that double quotes is not necessary if there's no white space in the given path.
The priorities are: 1. -settingsDir 2. Cloud 3. %APPDATA%\Notepad++ or Notepad++ installation dir.
If the given path "E:\my NppSettings\" is not a valid directory (it doesn't exist or it's a file), this argument is ignored and the settings dir will fall back to Cloud (or to %APPDATA%\Notepad++ or Notepad++ installation dir, if settings on Cloud is not defined).
Close#4696, close#9287
1. Add an option for displying constant line number width in Preferences dialog.
This option set the line number constant width according the total line number in the document (minimun 4 digits).
It ensures no unexpected visual effect while scrolling content vertically.
If the document content is modified and the total number of lines is increased or decreased, more digits will be added or removed according the number of digits in total number of lines.
2. Add new plugin messages NPPM_GETLINENUMBERWIDTHMODE & NPPM_SETLINENUMBERWIDTHMODE for getting or setting LINENUMWIDTH_DYNAMIC / LINENUMWIDTH_CONSTANT.
So plugins may send NPPM_SETLINENUMBERWIDTHMODE message with LINENUMWIDTH_CONSTANT to Notepad++ for avoiding some unexpected visual effect (while scrolling).
Fix#5670
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