Commit Graph

459 Commits

Author SHA1 Message Date
Don Ho 3ee8660c23 Replace N++ by Notepad++ and fix some typos
Fix also function "getWinVersionStr" not returning "Windows 11":
https://github.com/notepad-plus-plus/notepad-plus-plus/pull/12722#discussion_r1058510340

Fix #12708, fix #12709
2022-12-29 15:38:20 +01:00
ozone10 50e95d2267 Code enhancement: Replace undocumented functions
Fix #12721, close #12722
2022-12-29 15:11:05 +01:00
Coises 5719558588 Fix sorting not stable issue
Use std::stable_sort instead of std::sort for column selection sorts.

Fix #12678, close #12680
2022-12-26 02:53:13 +01:00
xomx 4f1aa7b004 Fix crash on Win32 Namespace prefixed file name
Implement support for Win32 Namespace prefixed file name in Notepad++.
(Ref: https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#win32-file-namespaces)

Support the Win32-filenames escaped by \\?\ or \\?\UNC\, possible globbing in filenames (\\?\C:\fil?.txt) and shell links (\\?\C:\file.txt.lnk) included.

Unsupported (temporarily - it needs further patches for Notepad++):
- any raw filename with length exceeding the MAX_PATH.
- any nonstandard Windows OS filename: with 'dot' or 'space' char(s) at the name end, WinOS reserved ones: AUX, CON, PRN, NUL, COM1-9, LPT1-9 and the ones with invalid ASCII chars in it (0-31, <, >, | , ").

Fix #12453, close #12613
2022-12-14 15:02:04 +01:00
xomx 6b34f9ce08 Fix incorrect plugin architecture reports partially
Fix partially #12565

Close #12566
2022-11-25 13:27:01 +01:00
Don Ho d4719a83a6 Use writeLog instead of OutputDebugString for certificate checking
And disable writeLog in  certificate checking (can be enabled manually in case of debugging).

Fix #12490
2022-11-12 18:42:26 +01:00
Don Ho f6b1cf3e77 Update certif/sha256 verification 2022-11-12 02:28:30 +01:00
xomx 6000f3bb21 Fix session.xml emptying by forced Windows update restart
This fixes both the long standing problem with the emptying of the session.xml file by forced Windows Update restart/shutdown and some potential Notepad++ crashes caused by possible main Notepad++ window blocking at exit.

Two main changes to the original design:
- WM_QUERYENDSESSION is not used anymore for the tidy-up ops and it always quickly returns TRUE/FALSE to the system as it should.
- there is now a safe-guard flag for the session.xml saving at N++ exit, which prevents otherwise possible incorrect overwriting in case of multiple "endsession" messages.

Fix #9850, fix #12389, close #12388
2022-10-30 14:06:33 +01:00
SinghRajenM 546745fe34 Increase hash font height 2022-10-18 04:22:11 +02:00
Don Ho e73fca5a85 Use c++20 function ends_with()
Close #12294
2022-10-06 20:49:23 +02:00
Don Ho 3cbbb42933 Revert "Fix CI system error due to the project build env update"
This reverts commit c64049a1e6.
2022-10-06 14:15:16 +02:00
Don Ho c64049a1e6 Fix CI system error due to the project build env update
And use C++20 for string::ends_with() function.
2022-10-05 17:28:21 +02:00
SinghRajenM 4b539b4d5d Build project using C++20
Fix #12232, close #12233
2022-10-05 15:44:56 +02:00
Don Ho 4d50692809 Add new API for getting bookmark ID
ref: https://community.notepad-plus-plus.org/topic/23541/notepad-v8-4-6-release/22?_=1664842498334
2022-10-04 03:31:09 +02:00
Don Ho 83ee8f09bf Clean up NPPM_ALLOCATEMARKER API 2022-10-03 01:32:11 +02:00
ozone10 b29a9ce142 Code enhancement - removing gcc warning
Fix conversion-null, nonnull-compare, dangling-else, address warnings, add initializers.

Fix #12198, close #12199
2022-09-20 16:19:58 +02:00
ozone10 3295cc8d2c Code improvement
Fix warnings ,some conversion-null, format, unused-but-set-variable, class-memaccess.
Add initializer.

Fix #12171, close #12172
2022-09-15 02:07:38 +02:00
ozone10 2da5c5b393 Code enhancement
Fix parentheses, misleading-indentation, sign-compare, some conversion-null warnings.

Fix #12139, close #12140
2022-09-11 18:22:51 +02:00
ozone10 233c697183 Fix gcc reorder warnings
Fix #12132, close #12133
2022-09-09 18:08:08 +02:00
Don Ho 82055985f3 Add Plugin list repository link and its version in PluginAdmin dialog
And add the localization entries.
2022-09-09 17:56:39 +02:00
Don Ho a5c201f79c Fix Windows 11 OS version not detected in getWindowsVersion
Fix #12100
2022-09-09 11:14:32 +02:00
Don Ho 5a94263bee Add incompatible (unloaded) plugin list in Plugin Admin
The plugins which are not compatible but their newer versions are available are not only on the incompatible list, but also on the Updates list.

Fix #12069, close #12105
2022-09-08 03:23:37 +02:00
SinghRajenM 85d7215d9b Fixes security vulnerability
Fix #12113, close #12114
2022-09-07 20:31:03 +02:00
ozone10 ebe7648ee1 Code improvement, remove unnecessary part
Fix pedantic warnings, add initializers.

Close #12093
2022-09-07 17:49:56 +02:00
dail8859 f1ed4de78d Add NPPM_CREATELEXER message for plugins to instantiate lexers
Fix #11789, close #11790
2022-06-14 22:55:27 +02:00
ozone10 d65967deab Use edge colors in dark mode for listbox border
1. use edge colors in darkmode for edit control border.
2. tweaks to properly drawn listbox scrollbar, when using custom border.
3. disabled edge color to dark mode preference dialog.
4. use disabled edge color for disabled combobox.

Fix #11207, fix #11376, close #11756
2022-06-06 20:25:17 +02:00
ozone10 2c0134ef5a Add plus and arrow (drop down list of opened files) buttons on menu bar
1. Add plus and arrow buttons on menu bar beside of 'X' button:
   - plus button: for adding a new document
   - arrow button: display a drop down list for all opened files to offer users quick access of switching file
2. Enhance the most recent opened file list: Increase maximun file number to 30.

Fix #11229, close #11757
2022-06-05 15:44:05 +02:00
Don Ho b5479bb9b0 Fix Plugin Admin not showing on menu due to certificate checking problem
* Fix certificate checking problem: the old certificate has been expired. In v8.4.2 Notepad++ & its components are signed by the new certificate. The certificate is checked before launching WinGUp (updater) to compare with the certificate key value stored in Notepad++. Updating certificate key value fixes the problem of WinUp validation, so Plugin Admin can be shown on the menu.
* Fix a typo.

Fix #11742
2022-05-29 17:23:31 +02:00
Don Ho ddbb75f0f7 Make Plugin Admin exception message more clear 2022-05-25 19:27:18 +02:00
Shridhar Kumar 0f8d5724af Add command line argument for plugin, a related notification and an API
1. Add a cmd argument for plugin: -pluginMessage="SPECIFIC_PLUGIN_MESSQGE" where SPECIFIC_PLUGIN_MESSQGE is a string which can contain white space. For example: -pluginMessage="arg1 arg2 arg3".
2. NPPN_CMDLINEPLUGINMSG notification: which will be triggered by -pluginMessage and plugins will get their specific message "arg1 arg2 arg3" via idFrom field:
   //scnNotification->nmhdr.code = NPPN_CMDLINEPLUGINMSG;
   //scnNotification->nmhdr.hwndFrom = hwndNpp;
   //scnNotification->nmhdr.idFrom = pluginMessage; //where pluginMessage is pointer of type wchar_t
3. Add NPPM_GETCURRENTCMDLINE API for getting the latest command line.
4. Update command line dynamically in Debug info dialog.

Fix #11576, close #11589
2022-05-16 04:54:31 +02:00
Robert Di Pardo 77a53ebd2f Show installed plugin versions in Debug Info dialog
Fix #11284, close #11662
2022-05-16 01:19:46 +02:00
Don Ho ef609c896f Add a new format argument/option "ADD_ZERO_PADDING" to NPPM_GETNPPVERSION
Fix #11535
2022-05-08 13:58:45 +02:00
ozone10 dfc9fb6f3b Highlight dark mode combobox border on focus
Fix #11574, close #11575
2022-04-29 13:50:27 +02:00
Leonardo Silva 1eb5b10e41 Add DarkMode usage detection support for plugins
Add APIs: 2 new messages NPPM_ISDARKMODEENABLED & NPPM_GETDARKMODECOLORS, and 1 new notification NPPN_DARKMODECHANGED.

Fixed also a bug in dark mode for PushLike CheckBoxes.

Fix #11546, close #11547
2022-04-26 19:27:35 +02:00
ozone10 3afbf0ca14 Fix light mode disabled text color using dark mode customized color
Light mode disabled static text was using customized dark mode disabled static text color, this PR fixes the problem.

Fix #11514, close #11515
2022-04-11 16:25:39 +02:00
wiseyestudio00 721f994df8 Fix "Sort Lines as Integer" not considering negative number
The current implementation is a variant of Natural Sort, which takes in account of negative numbers.

Fix #11023, fix #2025, close #11481
2022-04-10 19:44:49 +02:00
Shridhar Kumar ad39c68611 Fix dark mode square edges around buttons for Windows 10
Close #11506
2022-04-09 21:01:14 +02:00
Don Ho 2113e782fb Use string lexer ID instead of numeric ID for Scintilla 5
Plus some factoring.

Close #11472
2022-04-04 18:01:51 +02:00
Don Ho 121a396bf0 Make external language library work again after upgrading to Scintilla5
Make external lexer library work again after upgrading to Scintilla5.
Old external lexer libraries needs to add CreateLexer export function which returns ILexer5 instance (Lexilla protocol interface of Scintilla5).

Tested with papyrus lexer plugin, this external lexer plugin is compatible with Notepad++ next release:
https://github.com/blu3mania/npp-papyrus

Close #11468
2022-04-03 18:23:03 +02:00
Don Ho 252468c29b Revert "Remove the external lexer support"
This reverts commit 41a5bf0245.
2022-04-01 19:17:18 +02:00
Don Ho 41a5bf0245 Remove the external lexer support
SCI_LOADLEXERLIBRARY has been removed since Scintilla 5,
and I belive that Scintilla won't support it anymore:
https://sourceforge.net/p/scintilla/bugs/2236/

Close #11451
2022-03-30 18:52:47 +02:00
Christian Grasser a61b03ea88 Update Scintilla from v4.4.6 to v5.2.1 and add Lexilla v5.1.5
Update with https://www.scintilla.org/scintilla521.zip
            https://www.scintilla.org/lexilla515.zip

- fix setting to bring Scintilla::PositionCR from ScintillaStructures.h inline with Sci_Position.h Sci_PositionCR
- add workaround to enable lexer for searchResult
commented out SCI_SETILEXER call on searchResult to get one result which is correctly handled by the lexer,
added comment about the current problem with property @MarkingsStruct which seems to disappear after call to SCI_SETILEXER or CreateLexer
- corrected usage of ObjC lexer
- removed unnecessary filter stuff
- use own sections for scintilla and lexilla build targets and allow parallel builds
- as libscilex is no longer existing, changed to libscintilla
- adapt makefiles and cmake
- use VS2019
- started simple changes for createlexer adaptations, nullpointercheck missing on return of lexer name from deprecated LexerNameFromID -> undefined behaviour
- movement from id -> lexer name, mostly done via LexerNameFromID + switching off corresponding compiler warning
- changed to SCI_SETILEXER from SCI_SETLEXER, SCI_SETLEXERLANGUAGE needs to be corrected, see Scintilla5Migration.html
- just commented out: SCI_LOADLEXERLIBRARY

Fix #10504, close #11419
2022-03-27 17:12:53 +02:00
Don Ho d9c5688635 Fix file saving critical bug under Symantec encryption desktop
Fix #11339, close #11403
2022-03-18 14:32:25 +01:00
Ashfaaq18 4e97469d8f Fix a small regression due to c3daf4448d
Close #11378
2022-03-13 02:23:09 +01:00
Don Ho a84cbe8f69 Add new ability for filtering incompatible plugins
In commit f9118dd13c **"npp-compatible-versions"** has been added in plugin list for helping not only Plugin Admin, but also Plugin Manager (Plugin Loader) to check the compatibility with the latest version of plugin (if the version of installed plugin is the latest one).
However, if the version of installed plugin is the previous one, there's no info to know if this plugin with old version is compatible with running Notepad++. In order to filter better old version plugins, **"old-versions-compatibility"** is added in plugin list, so Plugin Manager can use it to check the compatibility to decide load it or not.

The value of "old-versions-compatibility" is a string made by 2 interval versions as following:
`"old-versions-compatibility": "[,2.6][,8.2.1]"`

The first interval versions are for old plugin versions: [,2.6] means from all the versions to v2.6 included.
The second interval versions are for Notepad++ versions: [,8.2.1] means from all the versions to v8.2.1 included.
Both interval versions together means: the plugin in question from the 1st version to v2.6 is compatible with Notepad++ v8.2.1 and all Notepad++ previous versions.

Here is the sample:
```json
{
	"folder-name": "mimeTools",
	"display-name": "Mime tools",
	"version": "2.7",
	"npp-compatible-versions": "[8.3,]",
	"old-versions-compatibility": "[,2.6][,8.2.1]",
	"id": "b65fbfaa15b443131eb69188069cacbff04eca66e0cb84130631303a1d3895f8",
	"repository": "https://github.com/npp-plugins/mimetools/releases/download/v2.7/mimetools.v2.7.zip",
	"description": "Implements several main functionalities defined in MIME.",
	"author": "Don HO",
	"homepage": "https://github.com/npp-plugins/mimetools"
},
```
Considering these 2 scenarios:
1. The current distributed plugin version is v2.7 (the latest one normally), and it is compatible with all Notepad++ version from v8.3. If installed MineTools plugin is v2.7 and running Notepad++ is v8.3.3 then it's OK, and MineTools v2.7 will be loaded.

2. If installed MineTools plugin is v2.6 and running Notepad++ is v8.3.3 then Plugin Manager learns it's a previous version (v2.6 < v2.7), so it will check "old-versions-compatibility" - it will find v2.6 is in the 1st interval [,2.6] - it's matched, then Plugin Manager keep checking the running Notepad++'s compatibility: v8.3.3 is not in the 2nd interval [,8.2.1] - it's not compatible, then MineTools plugin v2.6 won't be loaded.

Here are the test instructions for this PR:
1.  download x64 debug binary here:
https://ci.appveyor.com/api/buildjobs/5ba501ecu21k28i7/artifacts/Notepad%2B%2B.x64.Debug.exe
2. Create an empty file "nppPluginList.json" in your `npp\plugins\Config\`
and copy the following content
5e23fce868/src/pl.x64.json
and paste into `npp\plugins\Config\nppPluginList.json`
You have to copy "updater" folder (which contains GUP.exe) to enable plugin list.
3. Download DSpellCheck plugin v1.4.22 which is not compatible with Notepad++ from v8.3 and later version here:
https://github.com/Predelnik/DSpellCheck/releases/download/v1.4.22/DSpellCheck_x64.zip
Install it into plugin folder manually.
4. Now launch Notepad++ x64 debug binary and watch it crash.
5. Edit "nppPluginList.json" by adding `"old-versions-compatibility": "[,1.4.22][,8.2.1]",` into DSpellCheck section.
6. Startup Notepad++. Notepad++ doesn't crash. and now you can check DSpellCheck plugin is not loaded on the startup.

Fix  #11358, fix #11349, close  #11356
2022-03-09 19:26:01 +01:00
Ashfaaq18 c3daf4448d Fixed blurry disabled static texts of Preferences in Dark mode
Set static text colour in both light/dark mode directly for disable/enable action instead of EnableWindow().

Fix #10823, fix #11331, close #11342
2022-03-09 02:14:53 +01:00
Don Ho f9118dd13c Use plugin list's plugin compatibility info for loading plugins
A new ability for checking plugins' compatibility with running Notepad++ has been added in Plugin List & Plugin Admin (a06b404708).
This PR extends this ability by using Plugin Admin's plugin list to filter plugins to load - if any plugin to load with **the same folder name**, **the same version** (as in the plugin list) and it's **not compatible** with the running Notepad++ version found while loading plugins, it will be skipped for being loaded.

Fix #11353, close #11350
2022-03-07 15:33:36 +01:00
LEONARDO SILVA 9cbd03c301 Add more API for custom auto-indentation and current macro status
4 new API are added:
- NPPM_GETEXTERNALLEXERAUTOINDENTMODE
- NPPM_SETEXTERNALLEXERAUTOINDENTMODE
- NPPM_ISAUTOINDENTON
- NPPM_GETCURRENTMACROSTATUS

* Added support for custom auto-indentation for external lexer.
* Also added messages to fetch current Macro status (Idle, Recording, Stopped, Running) -> for this also affects auto-indentation behavior.
* Also added capability to query for the current User Settings of "Use Auto Indentation".

Fix #11253, close #11278
2022-03-05 00:57:43 +01:00
Daniel Fuchs 052b27e3d7 Add API NPPM_GETCURRENTLINESTR & RunDlg's variable $(CURRENT_LINESTR)
Add new API NPPM_GETCURRENTLINESTR and new variable $(CURRENT_LINESTR) for RunDlg to get the whole current line string.

Fix #11216, close #11265
2022-02-22 15:07:30 +01:00
Don Ho 58e404650b Remove not used codes 2022-02-22 00:54:10 +01:00
Don Ho 5917fdefb0 Fix translation problem for "Sort By"
Make "Plugins" & "Window" menu static to simplify the code.
2022-02-21 00:57:15 +01:00
xomx b233c0c3e0 Fix saving problem (regression) with "Sysnative" alias in x86 binary
Removing the 'case sensitive' default flag FILE_FLAG_POSIX_SEMANTICS fixes the CreateFile ERROR_PATH_NOT_FOUND, when working with files like "C:\Windows\Sysnative\drivers\etc\hosts".

Without the FILE_FLAG_POSIX_SEMANTICS the WIN32 IO (CreateFile/WriteFile) way will be equivalent with the previously used POSIX IO (fopen/fwrite) way.

More info about this "Sysnative" alias: https://docs.microsoft.com/en-us/windows/win32/winprog64/file-system-redirector

Fix #11196, close #11225
2022-02-18 16:48:34 +01:00
Don Ho 94154b0f0e Code enhancement: Fix comparison of different signs integers 2022-02-09 20:06:59 +01:00
Don Ho 785453147b Inialize all memebers of struct (instead of its 1st member) to zero
The curly brace initiator in C/C++ is quite confusing (at least to me).
The C style array uses {0} for initializing all the array to 0,
whereas C++ struct uses {0} for initializing only the 1st member's value to 0.
If we want to set all members' value in a struct to 0, we should use {} instread of {0}.

This commit fix the error which initialize only the 1st member's value to 0 in the structures.

Ref:
1. https://docs.microsoft.com/en-us/cpp/cpp/initializing-classes-and-structs-without-constructors-cpp?view=msvc-170
2. https://en.cppreference.com/w/c/language/struct_initialization
2022-02-09 16:41:56 +01:00
Don Ho 993506af0a Fix Find in Files crash 2022-01-31 03:55:28 +01:00
Don Ho 961a133a60 Remove 2GB file open restriction for x64 binary
Fix #10921, close #11047
2022-01-25 18:08:05 +01:00
Christian Grasser 5b5dbbd3f9 Fix ARM64 build doesn't contain 64 bits information
Fix #11068, close #11069
2022-01-25 01:51:21 +01:00
Don Ho 7ebb1e3672 Add Find/Replace text swap button in Find replace dialog
Fix  #6010, close #11037
2022-01-13 18:44:03 +01:00
Don Ho 5dada11848 Fix Debug information wrong OS information detected with windows 11 issue
Fix #11011
2022-01-11 02:05:38 +01:00
mere-human 9be4eeb4e6 Add copy name/path commands to DocList and Edit menu
1. Add new commands to copy selected files name/path into multi-selection context menu in Document List.
2. Add new commands to copy all files name/path into Edit > Copy to Clipboard.
3. Create a new function buf2Clipborad() to be used in all similar commands.
4. Fix the translation of the Document List multi-selection context menu.

Fix #10394, close #10993
2022-01-05 15:58:54 +01:00
Don Ho b5d646b4cd Add exclude folder(s) capacity in Find in Files
This PR allows users to provide the list of excluding folder names/patterns in "Filters" field.
Eclusion operator is alway "!" at the begining. In order to distinguish folder from file, "\" should be used as prefix of the folder name/pattern, following "!". That allows the exclusion of the directories under the root directory you want to search (the 1st level of matched directories).

If users need to exclude folders with the same name (or names matched the specific pattern) in all levels, the + should be put between "!" and "\" to exclude them recursively.

Here is a sample:
Filters: *.* !\bin !+\test !+\log*
Directory: c:\myProject\

So the excluded directories could be:

    c:\myProject\bin\
    c:\myProject\log\
    c:\myProject\logs\
    c:\myProject\src\log4j\
    c:\myProject\test\
    c:\myProject\src\test\

The following directories will not be excluded:

    c:\myProject\foo\tests\
    c:\myProject\foo\bin\

Note that "inclusion of folder" is not allowed, and such pattern will be ignored.

Fix #2433, fix #8350, close #10927
2021-12-21 18:39:22 +01:00
Don Ho acb8a9db47 Add logs for nul content corruption issue
These logs are written for debugging NUL file-corruption issue (#6133) and session lost issue (#10402) which are still problematic probably.
The writting log info will be triggered only when Windows notifies Notepad++ to end session.
The log file will be in "%APPDATA%\Notepad++\" or in Notepad++ installation folder if doLocalConf.xml is present.
To disable the log, just remove nppLogNulContentCorruptionIssue.xml.

Close #10871
2021-12-04 15:33:32 +01:00
Don Ho 12a13b1c0a Fix saving file and false alert on network drive issues
And add log ability for debugging network drive file status detection issue.

To activate log, user should:
1. Add an empty "nppLogNetworkDriveIssue.xml" file beside of notepad++.exe, or if user has no admin previlege, he/she can add this file into %APPDATA%\Notepad++\.
2. Create "C:\temp\" directory, if it doesn't exist yet.
3. Start notepad++.exe, and wait for the file status (timestamp) detection error from the network drive. If the errors occur, there should be some trace in "C:\temp\nppLogNetworkDriveIssue.log".

People who have had the network drive file status detection issue in #10688, #10753, #10757, #10751 & #10787 are welcome to download the binary and provide the generated log in order to fix this issue.

Fix #10751, fix #10688, fix #10753, fix #10757, fix #10751, fix #10787, close #10847
2021-12-01 20:42:35 +01:00
Don Ho bab3573be7 Fix detection of backup file restored back problem
Fix #10839, close #10843
2021-11-27 16:27:59 +01:00
Don Ho 990c92540d Fix fallure of erasing & saving server logs (of network drive) issue
Fix #10794
2021-11-18 02:32:21 +01:00
Christian Grasser f52c2b022d Fix crash in regex search
Avoid unhandled std::range_error exceptions in case of an text input issue by providing an user-supplied byte-error string
see https://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes and https://en.cppreference.com/w/cpp/locale/wstring_convert/to_bytes

Fix #10773, close #10783
2021-11-16 00:05:04 +01:00
Don Ho 20990d3197 Fix a regression of saving problem
Some users encounter the issue that files cannot be saved sometimes.
It's due to the share parameter in CreateFile() set as 0, which makes sense for preventing other process from accessing to the file being written. However, when Notepad++ tries to write the file, it opens the file for writing. If at that moment the file is already opened by other program and the share flag is zero, then the system is instructed to deny opening the file on share conflict and the open fails.
Setting share parameter to "FILE_SHARE_READ" instead of 0 solve this problem.

Fix #10751, close #10765
2021-11-11 02:12:22 +01:00
Don Ho 6cae886dde Fix empty file not being saved regression
When open a non-empty text file, empty the file and save it, the file is not saved on disk.
This PR has fixed this regression.

Fix #10667, close #10668
2021-10-15 00:52:26 +02:00
Ashfaaq18 6526094ee7 Fix tooltip layout and position in RTL mode
Fix #10646, close #10655
2021-10-14 18:15:16 +02:00
Don Ho 682a8edafa CFile (Win32 API IO) Refactoring
1. Rename CFile to Win32_IO_File (plus some modification in class).
2. Add new method writeStr() in Win32_IO_File class to write "char*" & string.
3. Change method names of Utf8_16_Write class and make writeFile() method return accurate type (boolean).

Close #10612
2021-10-02 15:00:08 +02:00
Pavel Nedev 9aa9ecb664 Fix NUL file-corruption issue after system shutting down brutally
Uses native Win32 IO API (CreateFile, ReadFile, WriteFile, CloseHandle) instead of POSIX ones (fopen, fread, fwrite, fclose) for remedying NUL file-corruption problem due to system shutting down brutally.

Fix #6133, close #10598
2021-09-28 12:30:05 +02:00
mere-human 0ad4912eb0 Enhance Insert Custom Date command by using MS datetime format
Fix #10467, close #10480
2021-09-16 17:25:19 +02:00
Don Ho a3116818e0 Code enhancement: Initialize variable member's value of struct/class
Close #10545
2021-09-14 03:08:17 +02:00
Don Ho e5a800722b Make code more sanitary
Fix some vulnerable codes detected by VS's analyzing.

Close #10541
2021-09-12 18:50:30 +02:00
Ashfaaq18 36d0d29cc7 Add path column in Document list panel
Fix #9679, close #10539
2021-09-12 15:18:22 +02:00
Don Ho 84c1505fab Add custom date time insert
Make Insert date time customizable.
Also make date time order reversable for short & long format.

Fix #10445, close #10453
2021-08-29 19:42:05 +02:00
ozone10 5e899f2a6c Enhance dialog visual look & feel
Change dialog extyles.

Fix #10384, close #10385
2021-08-15 20:27:46 +02:00
0xlay 9a3152faa2 Add TypeScript language
Fix #10353, close #10361
2021-08-13 20:12:02 +02:00
mere-human 90485aaa21 Use CRLF line ending in Copy command from Windows dialog
Also, move endsWith() function to Common.h and reuse it in WindowsDlg.

Fix #10311, close #10314
2021-08-03 03:08:49 +02:00
Don Ho 1dad7c7e7f Increase macro, user command and plugin command number capacity
Macros:      200 -> 499
User cmds:   200 -> 499
Plugin cmds: 500 -> 999

Fix  #10263
2021-07-29 18:02:29 +02:00
ozone10 baae30102c Apply dark mode on preferences dialog
1. Apply dark mode on preferences, about, debug and save all dialogs.
2. Make link text aware of dark mode.

Fix #10264, close #10265
2021-07-27 01:49:10 +02:00
ozone10 b0d4e776c6 Apply dark mode on hash dialogs
Also allow typing newline in multiple lines for generating hash.

Fix #10255, close #10256
2021-07-26 14:17:10 +02:00
Ashfaaq18 7b1e6546a1 Make Document List Panel togglable and shortcutable via View menu
1. Toggle toolbar item and view menu item for Document List Panel.
2. Added standard, filledFluent, darkmode->toolbar->(fluent and filledfluent) icons for the Document List Panel toggle.
3. Working shortcut for the Document List Panel under shortcut mapper.
4. Removed show document panel from the preference menu, kept the extension option.
5. Rename "Doc Switcher" to "Document list".

Fix #3526, fix #9015, close #10214
2021-07-23 16:14:22 +02:00
ozone10 467870d66e Add DarkMode Tooltips
Fix #9962, close #9963
2021-06-13 00:35:12 +02:00
Don HO 8a898bae3f Add new API NPPM_ADDTOOLBARICON_FORDARKMODE for darkmode
Usage:
void NPPM_ADDTOOLBARICON_FORDARKMODE(UINT funcItem[X]._cmdID, toolbarIconsWithDarkMode iconHandles)

This new API NPPM_ADDTOOLBARICON_FORDARKMODE is for replacing obsolete NPPM_ADDTOOLBARICON which doesn't support the dark mode.
2 formats / 3 icons are needed:  1 * BMP + 2 * ICO
All 3 handles below should be set so the icon will be displayed correctly if toolbar icon sets are changed by users, also in dark mode.
	struct toolbarIconsWithDarkMode {
		HBITMAP	hToolbarBmp;
		HICON	hToolbarIcon;
		HICON	hToolbarIconDarkMode;
	};

Close #9928
2021-06-01 01:36:07 +02:00
Don HO 51207a4fe5 Refactoring some code of Dark mode 2021-05-27 03:56:22 +02:00
debiedowner ddd4448192 Add ability to reverse line order
Fix #9837, close #9839
2021-05-12 03:06:44 +02:00
Don HO 7d25394244 Add new toolbar icons (Fluent UI)
1. Remove obsolete icon set.
2. Add both Fluent UI & Filled Fluent UI icon sets.
3. Refactoring toolbar code

Fix #9742, close #9808
2021-05-05 14:39:27 +02:00
Don HO d0afc51621 Add ARM64 support for auto-update feature 2021-04-22 05:20:54 +02:00
Don HO a459523659 Fix Notepad++ ARM64 version refusing to load plugins in ARM64 version 2021-04-21 23:24:05 +02:00
Don HO af56713079 Change name of programming language from Nimrod to Nim
Fix #9768
2021-04-15 03:40:30 +02:00
Udo Hoffmann 926e6e97d8 Catch regex search exceptions and show exception message
Fix #9565, close #9566
2021-03-24 01:24:24 +01:00
Don HO dbac42edd0
Use unary operator '!' instead of "not" 2021-02-20 04:44:34 +01:00
mere-human e7079d57c6
Enhance FileDialog for allowing UNIX stile file path
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
2021-01-26 18:52:15 +01:00
Don HO ab5c1d3e2a
Upgrade Notepad++ License
Update GPL version from v2 to v3.

Fix #9425, close #9441
2021-01-24 01:51:19 +01:00
Christian Grasser a55d46d170
Fix incompatible plugin not being deleted issue
Unload incompatible plugin before deleting it.

Fix #9377, close #9382
2021-01-11 04:58:15 +01:00
mere-human b58a5cc227
Use the mordern browse folder dialog to get folder path
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
2021-01-11 03:56:46 +01:00
Don HO c9c2d1e376
Add an option for displying constant line number width
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
2020-12-06 16:38:53 +01:00
Scott Sumner b2387286b1
Fix find in files failure issue due to directory path with leading/trailing spaces
Trim spaces on Directory for FindInFiles to fix such issue.

Fix #9199, close #9208
2020-11-29 14:29:16 +01:00
Don HO 7874f8dab3
Add new API NPPM_GETSETTINGSONCLOUDPATH for plugins
#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
2020-11-19 04:29:50 +01:00