From 920ec7d4ace65f5808673c458d3c9cf63bf7a034 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 12 May 2021 20:18:13 +0200 Subject: [PATCH] + chg: keep found initial common base default font in .ini + fix: slow line-break switching --- src/Edit.c | 3 + src/Notepad3.c | 23 ++--- src/Notepad3.h | 11 ++- src/StyleLexers/styleLexStandard.c | 5 +- src/Styles.c | 154 ++++++++++++++--------------- src/Styles.h | 1 - src/TypeDefs.h | 17 ++++ 7 files changed, 112 insertions(+), 102 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index dc75d6ebf..05905b389 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -5372,7 +5372,10 @@ void EditSetSelectionEx(DocPos iAnchorPos, DocPos iCurrentPos, DocPos vSpcAnchor // void EditEnsureConsistentLineEndings(HWND hwnd) { + IgnoreNotifyDocChangedEvent(true); SciCall_ConvertEOLs(SciCall_GetEOLMode()); + ObserveNotifyDocChangedEvent(); + Globals.bDocHasInconsistentEOLs = false; EditFixPositions(hwnd); } diff --git a/src/Notepad3.c b/src/Notepad3.c index 0514c3677..4d4c75bcd 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -407,9 +407,12 @@ static __forceinline bool CheckNotifyDocChangedEvent() return (InterlockedOr(&iNotifyChangeStackCounter, 0L) == 0L); } -void IgnoreNotifyDocChangedEvent() +void IgnoreNotifyDocChangedEvent(const bool bStealthMode) { InterlockedIncrement(&iNotifyChangeStackCounter); + if (bStealthMode) { + SciCall_SetModEventMask(SCI_MODEVENTMASK_NONE); + } } void ObserveNotifyDocChangedEvent() @@ -418,6 +421,7 @@ void ObserveNotifyDocChangedEvent() InterlockedDecrement(&iNotifyChangeStackCounter); } if (CheckNotifyDocChangedEvent()) { + SciCall_SetModEventMask(SCI_MODEVENTMASK_FULL); EditUpdateVisibleIndicators(); UpdateStatusbar(false); } @@ -1887,19 +1891,7 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl) //~~~SciCall_SetIdleStyling(SC_IDLESTYLING_AFTERVISIBLE); SciCall_SetIdleStyling(SC_IDLESTYLING_ALL); - // The possible notification types are the same as the modificationType bit flags used by SCN_MODIFIED: - // SC_MOD_INSERTTEXT, SC_MOD_DELETETEXT, SC_MOD_CHANGESTYLE, SC_MOD_CHANGEFOLD, SC_PERFORMED_USER, - // SC_PERFORMED_UNDO, SC_PERFORMED_REDO, SC_MULTISTEPUNDOREDO, SC_LASTSTEPINUNDOREDO, SC_MOD_CHANGEMARKER, - // SC_MOD_BEFOREINSERT, SC_MOD_BEFOREDELETE, SC_MULTILINEUNDOREDO, and SC_MODEVENTMASKALL. - // - ///~ int const evtMask = SC_MODEVENTMASKALL; (!) - don't listen to all events (SC_MOD_CHANGESTYLE) => RECURSON! - ///~ SciCall_SetModEventMask(evtMask); - ///~ Don't use: SC_PERFORMED_USER | SC_MOD_CHANGESTYLE; - /// SC_MOD_CHANGESTYLE and SC_MOD_CHANGEINDICATOR needs SCI_SETCOMMANDEVENTS=true - // - int const evtMask1 = SC_MOD_CONTAINER | SC_PERFORMED_UNDO | SC_PERFORMED_REDO | SC_MULTILINEUNDOREDO; - int const evtMask2 = SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT | SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE; - SciCall_SetModEventMask(evtMask1 | evtMask2); + SciCall_SetModEventMask(SCI_MODEVENTMASK_FULL); SciCall_SetCommandEvents(false); // speedup folding SciCall_StyleSetCharacterSet(SC_CHARSET_DEFAULT); @@ -9686,6 +9678,7 @@ bool FileIO(bool fLoad, LPWSTR pszFileName, EditFileIOStatus *status, WCHAR tch[MAX_PATH + 40]; FormatLngStringW(tch, COUNTOF(tch), (fLoad) ? IDS_MUI_LOADFILE : IDS_MUI_SAVEFILE, PathFindFileName(pszFileName)); + BeginWaitCursor(true, tch); if (fLoad) { @@ -10000,7 +9993,9 @@ bool FileLoad(LPCWSTR lpszFile, bool bDontSave, bool bNew, bool bReload, if (bCheckEOL && !Style_MaybeBinaryFile(Globals.hwndEdit, szFilePath)) { if (WarnLineEndingDlg(Globals.hwndMain, &fioStatus)) { + IgnoreNotifyDocChangedEvent(true); SciCall_ConvertEOLs(fioStatus.iEOLMode); + ObserveNotifyDocChangedEvent(); Globals.bDocHasInconsistentEOLs = false; } SciCall_SetEOLMode(fioStatus.iEOLMode); diff --git a/src/Notepad3.h b/src/Notepad3.h index e9127447a..fceb16a0b 100644 --- a/src/Notepad3.h +++ b/src/Notepad3.h @@ -138,7 +138,7 @@ int BeginUndoAction(); void EndUndoAction(int token); bool RestoreAction(int token, DoAction doAct); -#define UndoTransActionBegin() { int const _token_ = BeginUndoAction(); __try { IgnoreNotifyDocChangedEvent(); +#define UndoTransActionBegin() { int const _token_ = BeginUndoAction(); __try { IgnoreNotifyDocChangedEvent(false); #define EndUndoTransAction() } __finally { EndUndoAction(_token_); ObserveNotifyDocChangedEvent(); } } void HandleDWellStartEnd(const DocPos position, const UINT uid); @@ -189,16 +189,17 @@ LRESULT MsgSysCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam); // ---------------------------------------------------------------------------- -void IgnoreNotifyDocChangedEvent(); +void IgnoreNotifyDocChangedEvent(const bool bStealthMode); void ObserveNotifyDocChangedEvent(); -#define DocChangeTransactionBegin() __try { IgnoreNotifyDocChangedEvent(); + +#define DocChangeTransactionBegin() __try { IgnoreNotifyDocChangedEvent(false); #define EndDocChangeTransaction() } __finally { ObserveNotifyDocChangedEvent(); } // ---------------------------------------------------------------------------- #define BeginWaitCursor(cond, text) \ __try { \ - IgnoreNotifyDocChangedEvent(); \ + IgnoreNotifyDocChangedEvent(true); \ if (cond) { \ SciCall_SetCursor(SC_CURSORWAIT); \ StatusSetText(Globals.hwndStatus, STATUS_HELP, (text)); \ @@ -206,7 +207,7 @@ void ObserveNotifyDocChangedEvent(); #define BeginWaitCursorUID(cond, uid) \ __try { \ - IgnoreNotifyDocChangedEvent(); \ + IgnoreNotifyDocChangedEvent(true); \ if (cond) { \ SciCall_SetCursor(SC_CURSORWAIT); \ StatusSetTextID(Globals.hwndStatus, STATUS_HELP, (uid)); \ diff --git a/src/StyleLexers/styleLexStandard.c b/src/StyleLexers/styleLexStandard.c index 46e5d8172..f39c474ba 100644 --- a/src/StyleLexers/styleLexStandard.c +++ b/src/StyleLexers/styleLexStandard.c @@ -8,7 +8,7 @@ EDITLEXER lexStandard = { SCLEX_NULL, "null", IDS_LEX_DEF_TXT, L"Common Base", L"", L"", &KeyWords_NULL, { - /* 0 */ { {STYLE_DEFAULT}, IDS_LEX_STD_STYLE, L"Default Style", L"font:Default", L"" }, + /* 0 */ { {STYLE_DEFAULT}, IDS_LEX_STD_STYLE, L"Default Style", L"font:$Code", L"" }, /* 1 */ { {STYLE_LINENUMBER}, IDS_LEX_STD_MARGIN, L"Margins and Line Numbers", L"size:-2; fore:#008080", L"" }, /* 2 */ { {STYLE_BRACELIGHT}, IDS_LEX_STD_BRACE, L"Matching Braces (Indicator)", L"fore:#00FF40; alpha:80; alpha2:80; indic_roundbox", L"" }, /* 3 */ { {STYLE_BRACEBAD}, IDS_LEX_STD_BRACE_FAIL, L"Matching Braces Error (Indicator)", L"fore:#FF0080; alpha:140; alpha2:140; indic_roundbox", L"" }, @@ -62,8 +62,9 @@ EDITLEXER lexTEXT = { SCLEX_NULL, "null", IDS_LEX_TEXT_FILES, L"Text Files", L"txt; text; tmp; log; asc; doc; wtx", L"", &KeyWords_NULL,{ + //{ {STYLE_DEFAULT}, IDS_LEX_STR_63126, L"Default", L"font:$Text", L"" }, { {STYLE_DEFAULT}, IDS_LEX_STR_63126, L"Default", L"", L"" }, - { {STYLE_LINENUMBER}, IDS_LEX_STD_MARGIN, L"Margins and Line Numbers", L"font:Lucida Console; size:-2", L"" }, + { {STYLE_LINENUMBER}, IDS_LEX_STD_MARGIN, L"Margins and Line Numbers", L"font:Consolas; size:-2", L"" }, { {SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT}, IDS_LEX_STD_X_SPC, L"Extra Line Spacing (Size)", L"size:-1", L"" }, EDITLEXER_SENTINEL } diff --git a/src/Styles.c b/src/Styles.c index dcad98390..d504ce803 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -918,17 +918,18 @@ void Style_FileExtToIniSection(bool bForceAll) void Style_ToIniSection(bool bForceAll) { + bool const bForceAllNotFromScratch = (bForceAll && !Globals.bIniFileFromScratch); + // Custom colors const WCHAR* const CustomColors_Section = L"Custom Colors"; for (int i = 0; i < 16; i++) { WCHAR tch[32] = { L'\0' }; StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1); - if ((g_colorCustom[i] != s_colorDefault[i]) || (bForceAll && !Globals.bIniFileFromScratch)) { + if ((g_colorCustom[i] != s_colorDefault[i]) || bForceAllNotFromScratch) { WCHAR wch[32] = { L'\0' }; StringCchPrintf(wch, COUNTOF(wch), L"#%02X%02X%02X", (int)GetRValue(g_colorCustom[i]), (int)GetGValue(g_colorCustom[i]), (int)GetBValue(g_colorCustom[i])); - IniSectionSetString(CustomColors_Section, tch, wch); } else { IniSectionDelete(CustomColors_Section, tch, false); @@ -958,28 +959,30 @@ void Style_ToIniSection(bool bForceAll) for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) { IniSectionSetString(g_pLexArray[iLexer]->pszName, NULL, NULL); } - bForceAll = !Globals.bIniFileFromScratch; } // ---------------------------------------------------------------- - WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE] = { L'\0' }; + WCHAR wchCurrStyle[BUFSIZE_STYLE_VALUE] = { L'\0' }; for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) { + LPCWSTR const Lexer_Section = g_pLexArray[iLexer]->pszName; unsigned i = 0; while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) { - // normalize defaults - szTmpStyle[0] = L'\0'; // clear - Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].pszDefault, szTmpStyle, COUNTOF(szTmpStyle)); - if (bForceAll || (StringCchCompareX(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle) != 0)) { - // normalize value - szTmpStyle[0] = L'\0'; // clear - Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle)); - IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle); + LPCWSTR const pszName = g_pLexArray[iLexer]->Styles[i].pszName; + LPCWSTR const pszValue = g_pLexArray[iLexer]->Styles[i].szValue; + LPCWSTR const pszDefault = g_pLexArray[iLexer]->Styles[i].pszDefault; // normalized by + + // normalize value for comparison + wchCurrStyle[0] = L'\0'; // empty + Style_CopyStyles_IfNotDefined(pszValue, wchCurrStyle, COUNTOF(wchCurrStyle)); + + if (bForceAllNotFromScratch || (StringCchCompareX(wchCurrStyle, pszDefault) != 0)) { + IniSectionSetString(Lexer_Section, pszName, wchCurrStyle); } else { - IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false); + IniSectionDelete(Lexer_Section, pszName, false); } ++i; } @@ -2635,6 +2638,39 @@ bool Style_GetFileFilterStr(LPWSTR lpszFilter, int cchFilter, LPWSTR lpszDefExt, return true; } +//============================================================================= + +static inline bool GetDefaultCodeFont(LPWSTR pwchFontName, int cchFont) { + + LPCWSTR const FontNamePrioList[] = { + L"Cascadia Code", + L"Fira Code", + L"DejaVu Sans Mono", + L"Consolas", + L"Lucida Console" + }; + bool found = false; + for (int i = 0; i < COUNTOF(FontNamePrioList); ++i) { + LPCWSTR const fontName = FontNamePrioList[i]; + if (IsFontAvailable(fontName)) { + StringCchCopy(pwchFontName, cchFont, fontName); + found = true; + break; + } + } + if (!found) { + StringCchCopy(pwchFontName, cchFont, L"Courier New"); // fallback + } + return found; +} + + +static inline unsigned GetDefaultTextFont(LPWSTR pwchFontName) { + WORD wSize = (WORD)LF_FACESIZE; + GetThemedDialogFont(pwchFontName, &wSize); + return wSize; +} + //============================================================================= // @@ -2654,47 +2690,22 @@ bool Style_StrGetFontName(LPCWSTR lpszStyle, LPWSTR lpszFont, int cchFont) } TrimSpcW(lpszFont); - if (StringCchCompareXI(lpszFont, L"Default") == 0) { - // Microsoft's Coding Fonts only - const WCHAR *const FontPrio[4] = { L"Cascadia Code", L"Cascadia Mono", L"Consolas", L"Lucida Console" }; - bool found = false; - for (int i = 0; i < COUNTOF(FontPrio); ++i) { - if (IsFontAvailable(FontPrio[i])) { - StringCchCopy(lpszFont, cchFont, FontPrio[i]); - found = true; - break; - } - } - if (!found) { - StringCchCopy(lpszFont, cchFont, L"Courier New"); - } - } - return true; - } - return false; -} + if ((StringCchCompareXI(lpszFont, L"$Code") == 0) || (StringCchCompareXI(lpszFont, L"Default") == 0)) { + GetDefaultCodeFont(lpszFont, cchFont); + + } else if (StringCchCompareXI(lpszFont, L"$Text") == 0) { + + GetDefaultTextFont(lpszFont); + + } else if (!IsFontAvailable(lpszFont)) { + + GetDefaultCodeFont(lpszFont, cchFont); -//============================================================================= -// -// Style_StrGetFontStyle() -// -bool Style_StrGetFontStyle(LPCWSTR lpszStyle, LPWSTR lpszFontStyle, int cchFontStyle) -{ - WCHAR* p = StrStr(lpszStyle, L"fstyle:"); - if (p) { - p += CONSTSTRGLEN(L"fstyle:"); - while (*p == L' ') { - ++p; } - StringCchCopyN(lpszFontStyle, cchFontStyle, p, cchFontStyle); - if ((p = StrChr(lpszFontStyle, L';')) != NULL) { - *p = L'\0'; - } - TrimSpcW(lpszFontStyle); - return true; + return true; // font: defined } - return false; + return false; // font: not defined } @@ -3095,34 +3106,21 @@ void Style_CopyStyles_IfNotDefined(LPCWSTR lpszStyleSrc, LPWSTR lpszStyleDest, i // --------- Font settings --------- - WCHAR wchDefaultFontName[LF_FULLFACESIZE] = { L'\0' }; - Style_StrGetFontName(L"font:Default", wchDefaultFontName, COUNTOF(wchDefaultFontName)); // resolve + //~WCHAR wchDefaultCodeFontName[LF_FACESIZE] = { L'\0' }; + //~Style_StrGetFontName(L"font:$Code", wchDefaultCodeFontName, COUNTOF(wchDefaultCodeFontName)); // resolve bool bIsFontDefInDestination = false; + if (Style_StrGetFontName(lpszStyleDest, tch, COUNTOF(tch))) { bIsFontDefInDestination = true; - if ((StringCchCompareXI(tch, L"Default") == 0) || (StringCchCompareXI(tch, wchDefaultFontName) == 0)) { - AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:Default"); - } else { - AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:"); - StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch); - } + AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:"); + StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch); } else if (Style_StrGetFontName(lpszStyleSrc, tch, COUNTOF(tch))) { - if ((StringCchCompareXI(tch, L"Default") == 0) || (StringCchCompareXI(tch, wchDefaultFontName) == 0)) { - AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:Default"); - } else { - AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:"); - StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch); - } + AppendStyle(szTmpStyle, COUNTOF(szTmpStyle), L"font:"); + StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch); } // --------- Font Style --------- - //~if (!StrStr(lpszStyleDest, L"fstyle:")) { - //~ if (Style_StrGetFontStyle(lpszStyleSrc, tch, COUNTOF(tch))) { - //~ StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), L"; fstyle:"); - //~ StringCchCat(szTmpStyle, COUNTOF(szTmpStyle), tch); - //~ } - //~} const WCHAR *pFontWeight = NULL; for (int idx = FW_IDX_THIN; idx <= FW_IDX_ULTRADARK; ++idx) { @@ -3296,34 +3294,30 @@ bool Style_SelectFont(HWND hwnd, LPWSTR lpszStyle, int cchStyle, LPCWSTR sLexerN LPCWSTR sStyleName, bool bGlobalDefaultStyle, bool bCurrentDefaultStyle) { // Map lpszStyle to LOGFONT - const WCHAR *const defaultFontTemplate = L"font:Default"; - WCHAR wchDefaultFontName[LF_FULLFACESIZE] = { L'\0' }; + const WCHAR *const defaultFontTemplate = L"font:$Code"; + WCHAR wchDefaultFontName[LF_FACESIZE] = { L'\0' }; Style_StrGetFontName(defaultFontTemplate, wchDefaultFontName, COUNTOF(wchDefaultFontName)); // current base style const WCHAR *const lpszBaseStyleDefinition = GetCurrentStdLexer()->Styles[STY_DEFAULT].szValue; // current common default font name setting - WCHAR wchCurrCommonFontName[LF_FULLFACESIZE] = { L'\0' }; + WCHAR wchCurrCommonFontName[LF_FACESIZE] = { L'\0' }; if (!Style_StrGetFontName(lpszBaseStyleDefinition, wchCurrCommonFontName, COUNTOF(wchCurrCommonFontName))) { StringCchCopy(wchCurrCommonFontName, COUNTOF(wchCurrCommonFontName), wchDefaultFontName); } // specified font name - WCHAR wchFontName[LF_FULLFACESIZE] = { L'\0' }; + WCHAR wchFontName[LF_FACESIZE] = { L'\0' }; if (!Style_StrGetFontName(lpszStyle, wchFontName, COUNTOF(wchFontName))) { StringCchCopy(wchFontName, COUNTOF(wchFontName), wchCurrCommonFontName); } // font style - DWORD const flagUseStyle = 0; // = CF_USESTYLE; ~ don't use // NOTE: To globalize your application, you should specify the style by using // the lfWeight and lfItalic members of the LOGFONT structure pointed to by lpLogFont. // The style name may change depending on the system user interface language. - //~WCHAR szStyleStrg[LF_FULLFACESIZE] = { L'\0' }; - //~if (flagUseStyle) { - //~ Style_StrGetFontStyle(lpszStyle, szStyleStrg, COUNTOF(szStyleStrg)); - //~} + DWORD const flagUseStyle = 0; // = CF_USESTYLE; ~ don't use // Font Weight int iBaseFontWeight = FontWeights[FW_IDX_REGULAR].weight; @@ -3606,7 +3600,7 @@ void Style_SetStyles(HWND hwnd, const int iStyle, LPCWSTR lpszStyle) SciCall_StyleSetFont(iStyle, chFontName); } } else if (bIsDefaultStyle) { - Style_StrGetFontName(L"font:Default", wchFontName, COUNTOF(wchFontName)); + Style_StrGetFontName(L"font:$Code", wchFontName, COUNTOF(wchFontName)); assert(lstrlen(wchFontName) < LF_FACESIZE); char chFontName[LF_FACESIZE] = { '\0' }; WideCharToMultiByte(CP_UTF8, 0, wchFontName, -1, chFontName, (int)COUNTOF(chFontName), NULL, NULL); diff --git a/src/Styles.h b/src/Styles.h index 27249bb2a..d3f82a81c 100644 --- a/src/Styles.h +++ b/src/Styles.h @@ -72,7 +72,6 @@ void Style_SetIndentGuides(HWND hwnd,bool); void Style_SetExtraLineSpace(HWND hwnd, LPWSTR lpszStyle, int cch); bool Style_GetFileFilterStr(LPWSTR lpszFilter, int cchFilter, LPWSTR lpszDefExt, int cchExt, bool bSaveAs); bool Style_StrGetFontName(LPCWSTR lpszStyle,LPWSTR lpszFont,int cchFont); -bool Style_StrGetFontStyle(LPCWSTR lpszStyle,LPWSTR lpszFontStyle,int cchFontStyle); bool Style_StrGetFontQuality(LPCWSTR lpszStyle, LPWSTR lpszQuality, int cchQuality, int *iSciQuality_out); bool Style_StrGetCharSet(LPCWSTR lpszStyle,int* i); bool Style_StrGetSizeInt(LPCWSTR lpszStyle, int* i); diff --git a/src/TypeDefs.h b/src/TypeDefs.h index a9fd5edef..cb59d04b0 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -732,6 +732,23 @@ typedef struct _themeFiles // don't use 'SCVS_NOWRAPLINESTART' #define NP3_VIRTUAL_SPACE_ACCESS_OPTIONS (Settings2.DenyVirtualSpaceAccess ? SCVS_NONE : SCVS_RECTANGULARSELECTION) + +// The possible notification types are the same as the modificationType bit flags used by SCN_MODIFIED: +// SC_MOD_INSERTTEXT, SC_MOD_DELETETEXT, SC_MOD_CHANGESTYLE, SC_MOD_CHANGEFOLD, SC_PERFORMED_USER, +// SC_PERFORMED_UNDO, SC_PERFORMED_REDO, SC_MULTISTEPUNDOREDO, SC_LASTSTEPINUNDOREDO, SC_MOD_CHANGEMARKER, +// SC_MOD_BEFOREINSERT, SC_MOD_BEFOREDELETE, SC_MULTILINEUNDOREDO, and SC_MODEVENTMASKALL. +// +///~ int const evtMask = SC_MODEVENTMASKALL; (!) - don't listen to all events (SC_MOD_CHANGESTYLE) => RECURSON! +///~ SciCall_SetModEventMask(evtMask); +///~ Don't use: SC_PERFORMED_USER | SC_MOD_CHANGESTYLE; +/// SC_MOD_CHANGESTYLE and SC_MOD_CHANGEINDICATOR needs SCI_SETCOMMANDEVENTS=true +// +#define SCI_MODEVENTMASK_FULL (SC_MOD_CONTAINER | SC_PERFORMED_UNDO | SC_PERFORMED_REDO | SC_MULTILINEUNDOREDO | \ + SC_MOD_INSERTTEXT | SC_MOD_DELETETEXT | SC_MOD_BEFOREINSERT | SC_MOD_BEFOREDELETE) + +#define SCI_MODEVENTMASK_NONE (SC_MOD_NONE) + + // from #define INTERNET_MAX_PATH_LENGTH 2048 #define INTERNET_MAX_SCHEME_LENGTH 32 // longest protocol name length