301 Commits

Author SHA1 Message Date
xomx
d3bb31b0ec Fix Monitoring in one view affects selections and position in second view
Fix #17046, close #17056
2025-10-11 19:58:44 +02:00
Ekopalypse
8be29baea7 Update NppIO.cpp, remove fake buffer id
Retain the buffer_id for the NPPN_FILEDELETED notification so that plugins can associate the deleted file with NPPN_FILEBEFOREDELETE.

Fix #6224, close #17051
2025-10-02 17:29:38 +02:00
Don Ho
bc4a4809a0 Add translation items for full read-only features
Plus some minor modifications.

Follow up: 8d585cf824
2025-09-30 04:17:26 +02:00
xomx
8d585cf824 Add 2 new full-readonly modes via CLI & apply/remove readonly for all docs cmds
CLI param: -fullReadOnly
- hybrid "toggle R/O allowed" mode where user still can manually toggle OFF the R/O-state of N++ tabs, so some selective saving of the tab filebuffers is possible

CLI param: -fullReadOnlySavingForbidden
- total "forensic" mode where user cannot toggle OFF the R/O-state of N++ tabs at all, so it is impossible to save opened tab filebuffers

Also added two new Edit-menu items for bulk tab-R/O state changing:
- IDM_EDIT_SETREADONLYFORALLDOCS
- IDM_EDIT_CLEARREADONLYFORALLDOCS

Fix #15993, fix #16532, close #17040
2025-09-30 03:06:25 +02:00
xomx
4b0fc8d316 Improve Notepad++ UAC operations largely
This native implementation of UAC (User Account Control) operations in Notepad++ is designed not only to substitute the deprecated & problematic NppSaveAsAdminPlugin - which interferes with the FlushFileBuffers WINAPI used by Notepad++ - but also to support any future Notepad++ feature which may require elevated privileges.

When a user attempts an operation that fails due to indufficient rights, the system performs only that specific requested action with elevated privileges. After completing it, the elevated Notepad++ instance immediately exits, returning the user to his/her original Notepad++ instance seamlessly, as if nothing unusual occured.

This mechanism is independent of any Notepad++ features such as backup-snapshot or multi-instance mode. All UAC-related operations are executed at the very beginning of the wWinMain function, ensuring they are not affected by mutex handling, or other internal logic.

Importantly, this approach eliminates the need for a separate signed helper executable like NppAdminAcess.exe. Everything is handled within the main Notepad++ project, just as before.

In this commit, the NPP_UAC_SAVE, NPP_UAC_SETFILEATTRIBUTES & NPP_UAC_MOVEFILE are implemented.

Summary of the changes:

added last _dwErrorCode in:
.\PowerEditor\src\MISC\Common\FileInterface.h
.\PowerEditor\src\MISC\Common\FileInterface.cpp

FileManager::saveBuffer adjustment for the NPP_UAC_SAVE_SIGN in:
.\PowerEditor\src\ScintillaComponent\Buffer.cpp

N++ UAC ops signatures definitions & new invokeNppUacOp common func, toggleReadOnlyFlagFromFileAttributes func adjustment for the NPP_UAC_SETFILEATTRIBUTES_SIGN in:
.\PowerEditor\src\MISC\Common\Common.h
.\PowerEditor\src\MISC\Common\Common.cpp

only to fix Notepad_plus::doSave for isEndSessionCritical() in:
.\PowerEditor\src\NppIO.cpp

added getLastFileErrorState() & m_dwLastFileError in:
.\PowerEditor\src\Utf8_16.h
.\PowerEditor\src\Utf8_16.cpp

UAC ops handling at the very start of wWinMain + added new NPP_UAC_ handling nppUacSave and nppUacSetFileAttributes funcs in:
.\PowerEditor\src\winmain.cpp

Fix #886, fix #8655, fix #9561, fix #10302, fix #14990, fix #15008, fix #15137, fix #15323, close #16933
2025-09-02 19:20:59 +02:00
Don Ho
5b26ef1ca8 Fix rename tab error msg while no change tab name
Fix #16661, close #16665
2025-06-12 04:10:48 +02:00
Don Ho
0478caebf1 Fix use1stLineAsTabName feature called twice while undo/redo
Ref: https://github.com/notepad-plus-plus/notepad-plus-plus/pull/16585#issuecomment-2944075642

Close #16635
2025-06-06 02:54:22 +02:00
Anthony Lee Stark
abc23714db Add new feature of using first line of untitled document for its tab name
Fix #3994, fix #16584, close #16585
2025-06-04 14:11:24 +02:00
Don Ho
1f48115666 Fix regression of folding state not being remembered through sessions
The regression is introduced by:
83755ca155 (diff-d88ddee57a027ab23daf332c4778ced0cee352edcb34efdda1b218e8a75c61b2L2636)

The culprit of this regression is the deletion of following 4 lines in the commit above:
```
void ScintillaEditView::fold(size_t line, bool mode, bool shouldBeNotified/* = true*/)
{
	auto endStyled = execute(SCI_GETENDSTYLED);
	auto len = execute(SCI_GETTEXTLENGTH);

	if (endStyled < len)
		execute(SCI_COLOURISE, 0, -1);
```
The method "ScintillaEditView::fold()" is called not only on manual folding by the users, but also on:

1. startup's loading session to restore the folding state programmatically.
2. after startup, switching among the documents to restore the folding state programmatically.

The above lines are important for the case 1.

However, these lines are necessary only on the first load of each file after the startup of Notepad++.
"execute(SCI_COLOURISE, 0, -1);" needs to be run for once (the case 1), not twice or more (the case 2).

So if there's a way to detect if a document has been run "execute(SCI_COLOURISE, 0, -1);" once (in the case 1),
and don't run it again (the case 2), it will save the time to switch among the document.

Fix #16597, close #16599
2025-05-29 17:54:14 +02:00
Don Ho
b742c540bb Fix typos
and clean-up.

Close #16576
2025-05-21 03:16:30 +02:00
Don Ho
1da3312c73 Refactoring & clean up 2025-05-13 18:58:02 +02:00
Don Ho
b1cd1a9f29 Remove unused header file tchar.h 2025-05-08 05:02:12 +02:00
xomx
a449c5e804 Fix breaking of the cloned file status after Notepad++ restart
Fix #16412, close #16440
2025-04-20 00:23:00 +02:00
xomx
b324a68bc6 Fix inactive buffer reloading problem
To reproduce: https://github.com/notepad-plus-plus/notepad-plus-plus/issues/16344#issuecomment-2800159956

Fix #16344, close #16431
2025-04-19 23:49:06 +02:00
Don Ho
6fd3830b42 Add NPPM_ADDSCNMODIFIEDFLAGS to fix regression for Plugins
Add **NPPM_ADDSCNMODIFIEDFLAGS** message for plugins which need the SCN_MODIFIED notification of other events.

BOOL NPPM_ADDSCNMODIFIEDFLAGS(0, unsigned long scnMotifiedFlags2Add)
Add needed SCN_MODIFIED flags so your plugin will recieve the notification SCN_MODIFIED of these events for your specific treatments.
By default, Notepad++ only forwards SCN_MODIFIED with the following 5 flags/events SC_MOD_DELETETEXT | SC_MOD_INSERTTEXT | SC_PERFORMED_UNDO | SC_PERFORMED_REDO | SC_MOD_CHANGEINDICATOR to plugins.
If your plugin need to process other events of SCN_MODIFIED, you should add the flags you need by sending this message to Notepad++, just after recieving NPPN_READY.
wParam: 0 (not used)
lParam[in]: scnMotifiedFlags2Add- Scintilla SCN_MODIFIED flags to add.
Return TRUE

Ref: https://community.notepad-plus-plus.org/topic/26588/notepad-v8-7-6-released/2?_=1738167940554

Fix #16121, close #16120
2025-01-31 18:25:04 +01:00
Alan Kilborn
b962835fef Fix backup file renaming bug for untitled tabs
Fix #16043, close #16047
2025-01-15 06:51:27 +01:00
Alan Kilborn
104cc8af73 Fix crash while passing invalid buffer with NPPM_SETUNTITLEDNAME
Fix #15970, close #15975
2025-01-09 10:55:03 +01:00
Don Ho
de9ffd2ea8 Enhance large files with syntax highlighting performance
Fix #15952, close #15981
2024-12-30 16:06:35 +01:00
Don Ho
11a02f69c8 Fix regression of multi-line tabbar height not updated after closing
Fix regression of multi-line tabbar height not updated after "Close all to the Right" command.

Fix #15905, close #15906
2024-12-04 21:33:56 +01:00
Don Ho
dc883d94d3 Fix a crash while disabling "Pin tab" feature
Fix #15860
2024-11-29 01:18:27 +01:00
Don Ho
61a1ca89ff Add "Close All BUT Pinned" command
Close #15863
2024-11-28 21:49:05 +01:00
Don Ho
c5094fee8b Refactoring to move the message definitions to the right place
Move the message definitions of toolbar & tabbar to the right place.

Close #15775
2024-11-10 00:18:28 +01:00
Don Ho
ce58b424bd Add Pin tab feature
Fix #5786, close #15750
2024-11-09 03:59:20 +01:00
Don Ho
682570ea6d Fix saved file from new empty doc keeping created time tip issue
Fix https://community.notepad-plus-plus.org/topic/26235/notepad-v8-7-1-release-candidate/11?_=1730165549940
2024-10-31 00:13:35 +01:00
Don Ho
2aa47e3219 Revert "Fix saved file from new empty doc keeping created time tip issue"
This reverts commit 93ecbb004c8a216d17a8b940572a388f010c94ee.
2024-10-31 00:12:37 +01:00
Don Ho
93ecbb004c Fix saved file from new empty doc keeping created time tip issue
Fix https://community.notepad-plus-plus.org/topic/26235/notepad-v8-7-1-release-candidate/11?_=1730165549940
2024-10-30 01:53:07 +01:00
Don Ho
dc9f58ddac Reduce network file hanging issue due to win32API GetFileAttributes cache (unsynchronized).
STR:
1. Open a network file.
2. Close Notepad++ to have it in the session.
3. Disconnect the network, and launch Notepad++ immediately.
4. Around more than 1 minute's delay, then the "Error" dialog displayed.

The reason for the hanging is that the network file was incorrectly detected by doesFileExist (GetFileAttributesEx) as present, leading Notepad++ to attempt opening a non-existent file with _wfopen. This issue seems to stem from a caching mechanism within the IO function (GetFileAttributesEx). When the network disconnects, the cache is not immediately cleared, causing GetFileAttributesEx to falsely report that the file exists. Consequently, when Notepad++ is launched after a network disconnection, GetFileAttributesEx retains its cache, indicating the file exists, while _wfopen fails to locate the network resource, resulting in a hang.

Unfortunately, there's no efficient solution for this problem. The commit's remedy is to check if the file is on the network and whether its directory still exists. If the directory doesn't exist, we avoid calling _wfopen. We verify the directory's existence instead of the file itself because the cache issue with GetFileAttributesEx occurs before _wfopen is executed. Checking the directory avoids the cache problem due to the identical argument being used.

I've tested this remedy in debug mode, and it works fine. However, the problem persists in release mode. Despite this, I believe it's worth keeping this solution, as it provides some protection in a variable network environment, potentially mitigating the issue when it arises.

Ref: https://github.com/notepad-plus-plus/notepad-plus-plus/pull/15658#issuecomment-2386662974

Improve #4306, #6178, #8055, #11388, #12553, #15540, close #15701
2024-10-15 21:27:44 +02:00
Don Ho
a3535f385f Fix network files hanging while the network disconnected (part 2)
Refactoring for reducing the I/O calls, fix typos.

Reduce the startup time (while the a dirty disconnected network file is in the session) from about 12-15 seconds to about 6 seconds (on my laptop).

Note that there are 2 cases are not improved by the commit:

* STR 1: Open a network file, modify it. Disconnect the network, then save the file.

There will be a huge hanging time (around 1 minute) to get the warning dialog.
I tried to remedy with thread for CreateFileW in the constructor of Win32_IO_File, however it leads crash due to the lock guard in the caller.

* STR 2:
1. Open a network file.
2. Close Notepad++ to have it in the session.
3. Disconnect the network, and launch Notepad++ immediately.
4. Around more than 1 minute's delay, then the "Error" dialog displayed.

The reason of hanging is that the network file was detected by "doesFileExist" as true, so Notepad++ was trying to open non-existent file (by _wfopen).
I believe that there's some kind of cache during the very short period for the IO function (here's our case GetFileAttributes), and such cache is not immediately synchronized (cleared) while network disconnected. As a result, when we launch Notepad++ after the disconnection of network, GetFileAttributes keeps its memory & responds "FileExists". However for _wfopen it doesn't see the resource of network anymore - that makes hanging.

Ref #15658
Improve #4306, #6178, #8055, #11388, #12553, #15540
Close #15669
2024-10-04 18:04:15 +02:00
Don Ho
f884a39dd4 Fix opened network files hanging issue while the network disconnected
The issue is due to WinAPI's GetFileAttributes function can take a huge amount of time in various situations, like when the target server being offline (usalally).
The current solution is to wait at least 3 seconds for each GetFileAttributes function, then return the default value in case of the problem (or the returned value of the function, in case of normal situation - if it has been executed completely during the 3 seconds).
So there'll still be the hanging time (3 or 6 seconds) while the problem of network connection, but the hanging time (it could be 30 seconds more) is reduced considerablly.

"Wow64EnableWow64FsRedirection" call is also removed from x64 build (in which this call is unnecessary) in this commit to reduce the IO calls.

Fix #4306, fix #6178, fix #8055, fix #11388, fix #12553, fix #15540, close #15658
2024-10-02 04:52:15 +02:00
Don Ho
fc051a1231 Add tab created time tooltip for new opened untitled tab
Note: while create the new tab (empty & clean), there will be a created time displayed. When the document is modified and period backup feature is enabled, a new created time will be assigned and displayed. However, the time of the first modification which makes empty document dirty will be remained as the tab creation time, even with several modification afterward.

Fix #15563, close #15651
2024-09-26 18:44:45 +02:00
xomx
8baa1553fc Fix regression: can't open folder via cammand argument
Fix one incorrect PathFileExists replacement.

Fix #15645, close #15646
2024-09-23 16:57:15 +02:00
Brian C
d5ec03a464 Fix monitoring large file with frequent writes freezes UI issue
Fix #9661, close #15598
2024-09-06 04:19:00 +02:00
Don Ho
72751182bf Several enhancements for code - part III 2024-08-06 21:51:07 +02:00
Don Ho
b78b3bdef0 Several enhancements for code
Close #15516
2024-08-05 15:40:44 +02:00
PeterCJ
9fb538d125 Add file type filters for UDL in Save dialogs
Fix #8083, fix #11096, close #15490
2024-08-04 12:53:30 +02:00
Alan Kilborn
bfe27cc860 Add the ability to open the copy after "Save a Copy" command
Fix #11861, close #15476
2024-07-26 12:32:21 +02:00
Don Ho
0858dfa4af Use GetFileAttributes instead of PathFileExists
Ref: https://github.com/notepad-plus-plus/nppShell/pull/64#discussion_r1664890166
Ref: https://devblogs.microsoft.com/oldnewthing/20071023-00/?p=24713

Fix #14839, close #15400
2024-07-14 22:50:00 +02:00
Don Ho
ac67f15c2b Fix closing unsaved clone document makes periodic backup lost issue
And change the behaviour of closing a cloned document: there's no more "Save or not" dialog appears.

Fix #8227, close #15409
2024-07-14 21:14:44 +02:00
Don Ho
504e4ca5df Fix periodic backup's disfunction regression for the main view
The regression was introduced in:
97279d024f (diff-5f6ec155ff896fe5cab66dcf3e3f99c2b72d2498dda4cb68a4002da4468cabda)
2024-07-07 05:17:50 +02:00
Don Ho
97279d024f Remove ambiguous symbols (part 4)
Relace TCHAR, generic_string & TEXT("") par wchar_t, wstring & L"" respectively.
Follow up: 94af271
2024-06-30 01:10:36 +02:00
xomx
982f52224c Add the possibility for opening a shortcut file if change file ext
Do not recognize files without lnk-extension as Windows shortcuts.

Fix also https://github.com/notepad-plus-plus/notepad-plus-plus/pull/15211#issuecomment-2156495651

Fix #9643, fix #11089, fix #10139, close #15364
2024-06-28 18:19:11 +02:00
Alan Kilborn
b3daf0a982 Add plugin command NPPM_SETUNTITLEDNAME to rename untitled tab
Fix #8916, close #15291
2024-06-22 14:44:09 +02:00
Don Ho
9a27df8f13 Make NPPN_FILEBEFORERENAME notification more efficient 2024-06-16 23:55:42 +02:00
Alan Kilborn
721a845bec Fix unsaved tab containing tab character display glitch
Disallow tab character via pasting when renaming a file tab.

Fix #15202, close #15211
2024-06-12 01:24:42 +02:00
Don Ho
89aaf43722 Use standard function (wcscmp/wcsicmp) instead home made one
Close #15030
2024-04-24 02:45:54 +02:00
Don Ho
903d47b2eb Reduce compiling warning
Close #14924
2024-04-05 03:46:27 +02:00
Don Ho
aa0be9973b Add support for Change History in the text
This commit follows the commit:
fd1f785b89

Close #14838
2024-03-10 05:17:08 +01:00
Don Ho
13cd4acad6 Fix "Save a Copy As" dialog's wrong title
1. Use appropriated localized title on some main save/open dialogs.
2. Reuse menu localized string and remove some redundent entries from localization files.

Fix #14737, fix #11860, close #14808
2024-02-28 04:54:38 +01:00
Don Ho
76cfc5945e Fix loosing all open files after restarting as Admin to save a file
While saving a file needs the admin privilege, and if "Always In Multi-Instance Mode" option is activated, the current Notepad++ instance will be closed and a new instance with admin privilege contains no file is launched - it makes user confused because there are nothing to be edited and saved.

This commit fixes the issue by keeping the 1st instance opened, and launching the 2nd instance (with admin privilege) which contains the file in question - so user can modify it and save it.

The new behaviour (of this commit) not only fixes the issue, but also makes more sense, since it's "Always In Multi-Instance Mode". Note that the same behaviour happens if the session & periodical backup feature is disabled.

Fix #14694, close #14701
2024-02-09 16:27:16 +01:00
Don Ho
eb0922c223 Fix cloned document position not remembered though sessions
Fix #14461, fix #14164, close #14565
2024-01-08 16:55:32 +01:00