diff --git a/Build/Notepad3.ini b/Build/Notepad3.ini
index 3d8aa71b8..b09f54d90 100644
--- a/Build/Notepad3.ini
+++ b/Build/Notepad3.ini
@@ -43,6 +43,7 @@ SettingsVersion=4
;UpdateDelayMarkAllOccurrences=50
;CurrentLineHorizontalSlop=40
;CurrentLineVerticalSlop=5
+;UndoRedoSplitTimeout=0
;AdministrationTool.exe=
;DevDebugMode=0
;AnalyzeReliableConfidenceLevel=67
diff --git a/Versions/build.txt b/Versions/build.txt
index f315c0665..bc63daa53 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-2597
+2598
diff --git a/language/common_res.h b/language/common_res.h
index 5e059a339..466578b87 100644
--- a/language/common_res.h
+++ b/language/common_res.h
@@ -616,6 +616,7 @@
#define IDM_VIEW_TOGGLETB 40468
#define IDM_VIEW_MUTE_MESSAGEBEEP 40469
#define IDM_VIEW_SHOW_HYPLNK_CALLTIP 40470
+#define IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK 40471
#define IDM_SET_RENDER_TECH_DEFAULT 40500
#define IDM_SET_RENDER_TECH_D2D 40501
diff --git a/language/np3_de_de/menu_de_de.rc b/language/np3_de_de/menu_de_de.rc
index e82b1b776..d6326f9fb 100644
--- a/language/np3_de_de/menu_de_de.rc
+++ b/language/np3_de_de/menu_de_de.rc
@@ -267,6 +267,8 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "Selektiere &Wort oder Zeile\tCtrl+Spc", IDM_EDIT_SELECTWORD
MENUITEM "Multiselektion &aller Fundstellen\tCtrl+Shift+Spc", IDM_EDIT_SELECTALLMATCHES
+ MENUITEM SEPARATOR
+ MENUITEM "Neue Undo &Tippsequenz bei Zeilenumbruch", IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK
END
MENUITEM SEPARATOR
POPUP "Lesezeichen"
diff --git a/language/np3_en_gb/menu_en_gb.rc b/language/np3_en_gb/menu_en_gb.rc
index 0ab4c59ec..05ab94070 100644
--- a/language/np3_en_gb/menu_en_gb.rc
+++ b/language/np3_en_gb/menu_en_gb.rc
@@ -259,14 +259,16 @@ BEGIN
MENUITEM "Increase Number\tCtrl+Alt+NK+", CMD_INCREASENUM
MENUITEM "Decrease Number\tCtrl+Alt+NK-", CMD_DECREASENUM
MENUITEM SEPARATOR
- MENUITEM "&Find Matching Brace\tCtrl+B", IDM_EDIT_FINDMATCHINGBRACE
- MENUITEM "Select To &Matching Brace\tCtrl+Shift+B", IDM_EDIT_SELTOMATCHINGBRACE
+ MENUITEM "&Find Matching Brace\tCtrl+B", IDM_EDIT_FINDMATCHINGBRACE
+ MENUITEM "Select To &Matching Brace\tCtrl+Shift+B", IDM_EDIT_SELTOMATCHINGBRACE
MENUITEM SEPARATOR
- MENUITEM "Select To &Next\tCtrl+Alt+F2", IDM_EDIT_SELTONEXT
- MENUITEM "Select To &Previous\tCtrl+Alt+Shift+F2", IDM_EDIT_SELTOPREV
+ MENUITEM "Select To &Next\tCtrl+Alt+F2", IDM_EDIT_SELTONEXT
+ MENUITEM "Select To &Previous\tCtrl+Alt+Shift+F2", IDM_EDIT_SELTOPREV
MENUITEM SEPARATOR
- MENUITEM "Select &Word or Lines\tCtrl+Spc", IDM_EDIT_SELECTWORD
- MENUITEM "Multi-Select &All Matches\tCtrl+Shift+Spc", IDM_EDIT_SELECTALLMATCHES
+ MENUITEM "Select &Word or Lines\tCtrl+Spc", IDM_EDIT_SELECTWORD
+ MENUITEM "Multi-Select &All Matches\tCtrl+Shift+Spc", IDM_EDIT_SELECTALLMATCHES
+ MENUITEM SEPARATOR
+ MENUITEM "Split Undo &Typing Sequence on Line Breaks", IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK
END
MENUITEM SEPARATOR
POPUP "Boo&kmarks"
diff --git a/language/np3_en_us/menu_en_us.rc b/language/np3_en_us/menu_en_us.rc
index f6c395401..11a7cb1f6 100644
--- a/language/np3_en_us/menu_en_us.rc
+++ b/language/np3_en_us/menu_en_us.rc
@@ -259,14 +259,16 @@ BEGIN
MENUITEM "Increase Number\tCtrl+Alt+NK+", CMD_INCREASENUM
MENUITEM "Decrease Number\tCtrl+Alt+NK-", CMD_DECREASENUM
MENUITEM SEPARATOR
- MENUITEM "&Find Matching Brace\tCtrl+B", IDM_EDIT_FINDMATCHINGBRACE
- MENUITEM "Select To &Matching Brace\tCtrl+Shift+B", IDM_EDIT_SELTOMATCHINGBRACE
+ MENUITEM "&Find Matching Brace\tCtrl+B", IDM_EDIT_FINDMATCHINGBRACE
+ MENUITEM "Select To &Matching Brace\tCtrl+Shift+B", IDM_EDIT_SELTOMATCHINGBRACE
MENUITEM SEPARATOR
- MENUITEM "Select To &Next\tCtrl+Alt+F2", IDM_EDIT_SELTONEXT
- MENUITEM "Select To &Previous\tCtrl+Alt+Shift+F2", IDM_EDIT_SELTOPREV
+ MENUITEM "Select To &Next\tCtrl+Alt+F2", IDM_EDIT_SELTONEXT
+ MENUITEM "Select To &Previous\tCtrl+Alt+Shift+F2", IDM_EDIT_SELTOPREV
MENUITEM SEPARATOR
- MENUITEM "Select &Word or Lines\tCtrl+Spc", IDM_EDIT_SELECTWORD
- MENUITEM "Multi-Select &All Matches\tCtrl+Shift+Spc", IDM_EDIT_SELECTALLMATCHES
+ MENUITEM "Select &Word or Lines\tCtrl+Spc", IDM_EDIT_SELECTWORD
+ MENUITEM "Multi-Select &All Matches\tCtrl+Shift+Spc", IDM_EDIT_SELECTALLMATCHES
+ MENUITEM SEPARATOR
+ MENUITEM "Split Undo &Typing Sequence on Line Breaks", IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK
END
MENUITEM SEPARATOR
POPUP "Boo&kmarks"
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index df4216a25..e632dc147 100644
--- a/res/Notepad3.exe.manifest.conf
+++ b/res/Notepad3.exe.manifest.conf
@@ -3,7 +3,7 @@
Notepad3 BETA
diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp
index 7819a682a..700089ff8 100644
--- a/src/Config/Config.cpp
+++ b/src/Config/Config.cpp
@@ -630,6 +630,12 @@ void LoadSettings()
Defaults2.AutoReloadTimeout), 250UL, 300000UL);
FileWatching.AutoReloadTimeout = Settings2.AutoReloadTimeout;
+ Defaults2.UndoRedoSplitTimeout = 0UL;
+ Settings2.UndoRedoSplitTimeout = IniSectionGetInt(Settings2_Section, L"UndoRedoSplitTimeout", Defaults2.UndoRedoSplitTimeout);
+ if (Settings2.UndoRedoSplitTimeout != 0) {
+ Settings2.UndoRedoSplitTimeout = clampul(Settings2.UndoRedoSplitTimeout, 100UL, 86400000UL); // max: 24h
+ }
+
// deprecated
Defaults.RenderingTechnology = IniSectionGetInt(Settings2_Section, L"SciDirectWriteTech", -111);
if ((Defaults.RenderingTechnology != -111) && Settings.SaveSettings) {
@@ -906,6 +912,7 @@ void LoadSettings()
GET_INT_VALUE_FROM_INISECTION(RenderingTechnology, Defaults.RenderingTechnology, 0, 3); // set before
GET_INT_VALUE_FROM_INISECTION(Bidirectional, Defaults.Bidirectional, 0, 2); // set before
GET_BOOL_VALUE_FROM_INISECTION(MuteMessageBeep, false);
+ GET_BOOL_VALUE_FROM_INISECTION(SplitUndoTypingSeqOnLnBreak, false);
///~Settings2.IMEInteraction = clampi(IniSectionGetInt(Settings_Section, L"IMEInteraction", Settings2.IMEInteraction), SC_IME_WINDOWED, SC_IME_INLINE);
@@ -1375,6 +1382,7 @@ bool SaveSettings(bool bSaveSettingsNow)
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, RenderingTechnology);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, Bidirectional);
SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MuteMessageBeep);
+ SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SplitUndoTypingSeqOnLnBreak);
///~IniSectionSetInt(Settings_Section, L"IMEInteraction", Settings2.IMEInteraction);
diff --git a/src/Notepad3.c b/src/Notepad3.c
index a5c23ccaa..46b4c70eb 100644
--- a/src/Notepad3.c
+++ b/src/Notepad3.c
@@ -390,6 +390,7 @@ static int _UndoRedoActionMap(int token, UndoRedoSelection_t** selection);
// ----------------------------------------------------------------------------
static void _DelayClearZoomCallTip(int delay);
+static void _DelayUndoRedoTypingSequenceSplit(int delay);
#ifdef _EXTRA_DRAG_N_DROP_HANDLER_
static CLIPFORMAT cfDrpF = CF_HDROP;
@@ -3326,6 +3327,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam)
EnableCmd(hmenu, IDM_SET_BIDIRECTIONAL_R2L, (Settings.RenderingTechnology > 0));
CheckCmd(hmenu, IDM_VIEW_MUTE_MESSAGEBEEP, Settings.MuteMessageBeep);
+ CheckCmd(hmenu, IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK, Settings.SplitUndoTypingSeqOnLnBreak);
CheckCmd(hmenu,IDM_VIEW_NOSAVERECENT, Settings.SaveRecentFiles);
CheckCmd(hmenu,IDM_VIEW_NOPRESERVECARET, Settings.PreserveCaretPos);
@@ -3478,6 +3480,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
CancelCallTip();
break;
+ case IDT_TIMER_UNDO_REDO_SPLIT:
+ SciCall_BeginUndoAction();
+ SciCall_EndUndoAction();
+ break;
+
case IDM_FILE_NEW:
FileLoad(false,true,false,Settings.SkipUnicodeDetection,Settings.SkipANSICodePageDetection, false, L"");
@@ -5526,6 +5533,10 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
Settings.MuteMessageBeep = !Settings.MuteMessageBeep;
break;
+ case IDM_VIEW_SPLIT_UNDOTYPSEQ_LNBRK:
+ Settings.SplitUndoTypingSeqOnLnBreak = !Settings.SplitUndoTypingSeqOnLnBreak;
+ break;
+
//case IDM_SET_INLINE_IME:
// Settings2.IMEInteraction = (Settings2.IMEInteraction == SC_IME_WINDOWED) ? SC_IME_INLINE : SC_IME_WINDOWED;
// SciCall_SetIMEInteraction(Settings2.IMEInteraction);
@@ -6955,10 +6966,13 @@ inline static LRESULT _MsgNotifyLean(const LPNMHDR pnmh, const SCNotification* c
int const iModType = scn->modificationType;
if ((iModType & SC_MOD_BEFOREINSERT) || ((iModType & SC_MOD_BEFOREDELETE))) {
if (!((iModType & SC_PERFORMED_UNDO) || (iModType & SC_PERFORMED_REDO))) {
- if (!_InUndoRedoTransaction()) {
+ if ((!_InUndoRedoTransaction() && !SciCall_IsSelectionEmpty()) || Sci_IsMultiOrRectangleSelection()) {
_SaveRedoSelection(_SaveUndoSelection());
}
}
+ if (Settings2.UndoRedoSplitTimeout != 0) {
+ _DelayUndoRedoTypingSequenceSplit(Settings2.UndoRedoSplitTimeout);
+ }
bModified = false; // not yet
}
// check for ADDUNDOACTION step
@@ -7043,6 +7057,9 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotific
_SaveRedoSelection(_SaveUndoSelection());
}
}
+ if (Settings2.UndoRedoSplitTimeout != 0) {
+ _DelayUndoRedoTypingSequenceSplit(Settings2.UndoRedoSplitTimeout);
+ }
bModified = false; // not yet
}
if (iModType & SC_MOD_CONTAINER) {
@@ -7189,6 +7206,7 @@ static LRESULT _MsgNotifyFromEdit(HWND hwnd, const LPNMHDR pnmh, const SCNotific
switch (ich) {
case '\r':
case '\n':
+ if (Settings.SplitUndoTypingSeqOnLnBreak) { SciCall_BeginUndoAction(); SciCall_EndUndoAction(); }
if (Settings.AutoIndent) { _HandleAutoIndent(ich); }
break;
case '>':
@@ -8001,6 +8019,20 @@ static void _DelayClearZoomCallTip(int delay)
}
+//=============================================================================
+//
+// _DelayClearZoomCallTip()
+//
+//
+static void _DelayUndoRedoTypingSequenceSplit(int delay)
+{
+ static CmdMessageQueue_t mqc = MQ_WM_CMD_INIT(IDT_TIMER_UNDO_REDO_SPLIT, 0);
+ mqc.hwnd = Globals.hwndMain;
+ //mqc.lparam = (LPARAM)bForceRedraw;
+ _MQ_AppendCmd(&mqc, (UINT)(delay <= 0 ? 0 : _MQ_ms(delay)));
+}
+
+
//=============================================================================
//
// MarkAllOccurrences()
@@ -9178,19 +9210,20 @@ bool RestoreAction(int token, DoAction doAct)
PostMessage(hwndedit, SCI_SETRECTANGULARSELECTIONANCHORVIRTUALSPACE, (WPARAM)(*pPosAnchorVS), 0);
PostMessage(hwndedit, SCI_SETRECTANGULARSELECTIONCARETVIRTUALSPACE, (WPARAM)(*pPosCurVS), 0);
}
+ PostMessage(hwndedit, SCI_CANCEL, 0, 0); // (!) else shift-key selection behavior is kept
break;
case SC_SEL_LINES:
case SC_SEL_STREAM:
default:
PostMessage(hwndedit, SCI_SETSELECTION, (WPARAM)(*pPosCur), (LPARAM)(*pPosAnchor));
+ PostMessage(hwndedit, SCI_CANCEL, 0, 0); // (!) else shift-key selection behavior is kept
break;
}
}
PostMessage(hwndedit, SCI_SCROLLCARET, 0, 0);
PostMessage(hwndedit, SCI_CHOOSECARETX, 0, 0);
- //~PostMessage(hwndedit, SCI_CANCEL, 0, 0);
}
return true;
}
diff --git a/src/TypeDefs.h b/src/TypeDefs.h
index 25c48e25f..e2f8cf754 100644
--- a/src/TypeDefs.h
+++ b/src/TypeDefs.h
@@ -430,6 +430,7 @@ typedef struct _settings_t
int CustomSchemesDlgPosX;
int CustomSchemesDlgPosY;
bool MuteMessageBeep;
+ bool SplitUndoTypingSeqOnLnBreak;
RECT PrintMargin;
EDITFINDREPLACE EFR_Data;
@@ -482,6 +483,7 @@ typedef struct _settings2_t
int FindReplaceOpacityLevel;
DWORD FileCheckInverval;
DWORD AutoReloadTimeout;
+ DWORD UndoRedoSplitTimeout;
int IMEInteraction;
int SciFontQuality;
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 6dac29056..967e7219a 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -7,8 +7,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 19
-#define VERSION_REV 825
-#define VERSION_BUILD 2597
+#define VERSION_REV 827
+#define VERSION_BUILD 2598
#define SCINTILLA_VER 420
#define ONIGURUMA_REGEX_VER 6.9.3
#define UCHARDET_VER 2018.09.27
diff --git a/src/resource.h b/src/resource.h
index 8f7eae430..c69c2c038 100644
--- a/src/resource.h
+++ b/src/resource.h
@@ -31,6 +31,7 @@
#define IDT_TIMER_UPDATE_STATUSBAR 236
#define IDT_TIMER_UPDATE_TOOLBAR 237
#define IDT_TIMER_CLEAR_CALLTIP 238
+#define IDT_TIMER_UNDO_REDO_SPLIT 239
#define IDACC_FIND 302
#define IDACC_REPLACE 303