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