From 8bec8b189049ec849da378dac6e304460e406798 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Mon, 3 Dec 2018 12:26:28 +0100 Subject: [PATCH 01/11] + fix: problem with bad brace highlighting (indicator) --- src/Edit.c | 8 -------- src/Notepad3.c | 4 ++++ 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 4ede31434..f1b8bfe35 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -6872,8 +6872,6 @@ static bool _HighlightIfBrace(HWND hwnd, DocPos iPos) // clear indicator SciCall_BraceBadLight(INVALID_POSITION); SciCall_SetHighLightGuide(0); - if (!Settings2.UseOldStyleBraceMatching) - SciCall_BraceBadLightIndicator(false, INDIC_NP3_BAD_BRACE); return true; } @@ -6886,16 +6884,10 @@ static bool _HighlightIfBrace(HWND hwnd, DocPos iPos) DocPos col2 = SciCall_GetColumn(iBrace2); SciCall_BraceHighLight(iPos, iBrace2); SciCall_SetHighLightGuide(min_i((int)col1, (int)col2)); - if (!Settings2.UseOldStyleBraceMatching) { - SciCall_BraceHighLightIndicator(true, INDIC_NP3_MATCH_BRACE); - } } else { SciCall_BraceBadLight(iPos); SciCall_SetHighLightGuide(0); - if (!Settings2.UseOldStyleBraceMatching) { - SciCall_BraceHighLightIndicator(true, INDIC_NP3_BAD_BRACE); - } } return true; } diff --git a/src/Notepad3.c b/src/Notepad3.c index 8a05cac84..a93457883 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -1600,6 +1600,10 @@ static void _InitializeSciEditCtrl(HWND hwndEditCtrl) SendMessage(hwndEditCtrl, SCI_INDICSETFORE, INDIC_NP3_BAD_BRACE, RGB(0xFF, 0x00, 0x00)); SendMessage(hwndEditCtrl, SCI_INDICSETALPHA, INDIC_NP3_BAD_BRACE, 120); SendMessage(hwndEditCtrl, SCI_INDICSETOUTLINEALPHA, INDIC_NP3_BAD_BRACE, 120); + if (!Settings2.UseOldStyleBraceMatching) { + SendMessage(hwndEditCtrl, SCI_BRACEHIGHLIGHTINDICATOR, true, INDIC_NP3_MATCH_BRACE); + SendMessage(hwndEditCtrl, SCI_BRACEBADLIGHTINDICATOR, true, INDIC_NP3_BAD_BRACE); + } // paste into rectangular selection SendMessage(hwndEditCtrl, SCI_SETMULTIPASTE, SC_MULTIPASTE_EACH, 0); From cb17ec9f4d419a9dcf3c8f9362efcce6494c60e2 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Mon, 3 Dec 2018 15:25:29 +0100 Subject: [PATCH 02/11] + chg: if activated, ESC will close/minimize program immediately w/o canceling selection/tooltip first. --- src/Notepad3.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index a93457883..ab2528f3b 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -5077,19 +5077,6 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_ESCAPE: - if (SciCall_CallTipActive()) { - SciCall_CallTipCancel(); - break; - } - if (SciCall_AutoCActive()) { - SciCall_AutoCCancel(); - break; - } - if (!SciCall_IsSelectionEmpty()) { - DocPos const iCurPos = SciCall_GetCurrentPos(); - EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1); - break; - } if (Settings.EscFunction == 1) { SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); } @@ -5097,6 +5084,16 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) PostMessage(hwnd, WM_CLOSE, 0, 0); } else { + if (SciCall_CallTipActive()) { + SciCall_CallTipCancel(); + } + if (SciCall_AutoCActive()) { + SciCall_AutoCCancel(); + } + if (!SciCall_IsSelectionEmpty()) { + DocPos const iCurPos = SciCall_GetCurrentPos(); + EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1); + } SciCall_Cancel(); } break; From 66feae393ca2453d22e0f8c93e63a19cd3d541b4 Mon Sep 17 00:00:00 2001 From: Pairi Daiza Date: Tue, 4 Dec 2018 20:03:51 +0100 Subject: [PATCH 03/11] MUI - craigo- broken link in About dialog #848 --- language/common_res.rc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/language/common_res.rc b/language/common_res.rc index 6c28a40c7..3024858d2 100644 --- a/language/common_res.rc +++ b/language/common_res.rc @@ -99,13 +99,14 @@ IDS_MUI_ABOUT_LIBS "\ \\cf0 Lewis Van Winkle (TinyExpr)\\tab https://github.com/codeplea/tinyexpr\\par\ \\cf0 \\par\ " + // -// Caution: To correctly access the site "https://github.com/craigo-" -// a No-Break Space " " (alt+0160) is added AFTER the "-" ! +// For "craigo-": to access the right site "https://github.com/craigo-", +// a slash "/" is voluntarily added after the "craigo-" ! // IDS_MUI_ABOUT_ACKNOWLEDGES "\ -\\cf0 craigo-\\tab https://github.com/craigo- \\par\ +\\cf0 craigo-\\tab https://github.com/craigo-/\\par\ \\cf0 lhmouse\\tab https://github.com/lhmouse\\par\ \\cf0 hpwamr\\tab https://github.com/hpwamr\\par\ \\cf0 engelhro\\tab https://github.com/engelhro\\par\ From 057165ec148b71f60375add7bfe676f49417ddbc Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 5 Dec 2018 08:04:08 +0100 Subject: [PATCH 04/11] + chg: Open FInd/Replace: use most recent find pattern instead of clipboard (if selection is empty) --- src/Edit.c | 25 ++++++++++++++++--------- src/TypeDefs.h | 2 +- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index f1b8bfe35..629ebdf34 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -5261,16 +5261,23 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA } else if (cchSelection <= 1) { // nothing is selected in the editor: - // if first time you bring up find/replace dialog, - // copy content clipboard to find box - char* pClip = EditGetClipboardText(hwnd, false, NULL, NULL); - if (pClip) { - size_t const len = StringCchLenA(pClip,0); - if (len) { - lpszSelection = AllocMem(len + 1, HEAP_ZERO_MEMORY); - StringCchCopyNA(lpszSelection, len + 1, pClip, len); + // if first time you bring up find/replace dialog, + // use most recent search pattern to find box + GetFindPattern(tchBuf, FNDRPL_BUFFER); + if (tchBuf[0] == L'\0') { + MRU_Enum(Globals.pMRUfind, 0, tchBuf, COUNTOF(tchBuf)); + } + // no recent find pattern: copy content clipboard to find box + if (tchBuf[0] == L'\0') { + char* pClip = EditGetClipboardText(hwnd, false, NULL, NULL); + if (pClip) { + size_t const len = StringCchLenA(pClip, 0); + if (len) { + lpszSelection = AllocMem(len + 1, HEAP_ZERO_MEMORY); + StringCchCopyNA(lpszSelection, len + 1, pClip, len); + } + FreeMem(pClip); } - FreeMem(pClip); } } diff --git a/src/TypeDefs.h b/src/TypeDefs.h index 0deb5a25d..beee2555c 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -95,7 +95,7 @@ typedef enum XXXL_BUFFER = 4096, ANSI_CHAR_BUFFER = 258, - FNDRPL_BUFFER = 1024, + FNDRPL_BUFFER = 2048, LONG_LINES_MARKER_LIMIT = 4096 } BUFFER_SIZES; From 0d53ea5115c4bd3880aa6e785aec522e4b5b1f53 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 5 Dec 2018 08:51:16 +0100 Subject: [PATCH 05/11] + fix: don't exit Notepad on ESC (if activated), if only canceling ToolTip or AutoCompletion is intended + chg: update changelog --- Build/Changes.txt | 6 +++++- src/Notepad3.c | 12 +++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Build/Changes.txt b/Build/Changes.txt index 028eec7d2..52929b14c 100644 --- a/Build/Changes.txt +++ b/Build/Changes.txt @@ -13,7 +13,7 @@ LEGEND: ================================================== ================================================== -Version 5.18.1103.1407 (3 November 2018) +Version 5.18.1205.1444 (5 December 2018) ================================================== -------------------------------------------------- @@ -48,6 +48,8 @@ CHANGES: - Show Zoom Percentage on magnification changes - Tidy Notepad3.ini to remove all defaulted [Setting] items - Change Default settings to make the first experience of Notepad3 more attractive... +- ANSI CodePage detection (CED) - allow less reliable results also +- Open Find/Replace: Use most recent search pattern instead of clipboard (if selection eis empty) -------------------------------------------------- FIXES: @@ -62,6 +64,8 @@ FIXES: - In case of STD lexer only display "Default Text" in statusbar (indicator shows which one). - Fixed resource file problem (preproc defines). - Fixed save window Position (Default and Initial switch) +- Fixed problem with bad brace highlighting (indicator) +- if activated, ESC will close/minimize program immediately w/o canceling selection/tooltip first. -------------------------------------------------- TRANSLATIONS (MUI): diff --git a/src/Notepad3.c b/src/Notepad3.c index ab2528f3b..c76659482 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -5077,19 +5077,17 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_ESCAPE: - if (Settings.EscFunction == 1) { + if (SciCall_CallTipActive() || SciCall_AutoCActive()) { + SciCall_CallTipCancel(); + SciCall_AutoCCancel(); + } + else if (Settings.EscFunction == 1) { SendMessage(hwnd, WM_SYSCOMMAND, SC_MINIMIZE, 0); } else if (Settings.EscFunction == 2) { PostMessage(hwnd, WM_CLOSE, 0, 0); } else { - if (SciCall_CallTipActive()) { - SciCall_CallTipCancel(); - } - if (SciCall_AutoCActive()) { - SciCall_AutoCCancel(); - } if (!SciCall_IsSelectionEmpty()) { DocPos const iCurPos = SciCall_GetCurrentPos(); EditSetSelectionEx(Globals.hwndEdit, iCurPos, iCurPos, -1, -1); From 79fe92e3d02294e451d3e537895a1d8f793ddea9 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 5 Dec 2018 09:40:12 +0100 Subject: [PATCH 06/11] + upd: merge current Scintilla dev stage --- scintilla/doc/ScintillaHistory.html | 5 +++++ scintilla/lexers/LexCPP.cxx | 30 +++++++++++++++++++---------- 2 files changed, 25 insertions(+), 10 deletions(-) diff --git a/scintilla/doc/ScintillaHistory.html b/scintilla/doc/ScintillaHistory.html index 9d5379468..0908fcc08 100644 --- a/scintilla/doc/ScintillaHistory.html +++ b/scintilla/doc/ScintillaHistory.html @@ -577,6 +577,11 @@ Bug #2054.
  • + The C++ lexer interprets continued preprocessor lines correctly by reading all of + the logical line. + Bug #2062. +
  • +
  • For SciTE's Find in Files, allow case-sensitivity and whole-word options when running a user defined command. Bug #2053. diff --git a/scintilla/lexers/LexCPP.cxx b/scintilla/lexers/LexCPP.cxx index 4f4a0f648..fbd3186c6 100644 --- a/scintilla/lexers/LexCPP.cxx +++ b/scintilla/lexers/LexCPP.cxx @@ -201,17 +201,27 @@ struct EscapeSequence { std::string GetRestOfLine(LexAccessor &styler, Sci_Position start, bool allowSpace) { std::string restOfLine; - Sci_Position i =0; + Sci_Position line = styler.GetLine(start); + Sci_Position pos = start; + Sci_Position endLine = styler.LineEnd(line); char ch = styler.SafeGetCharAt(start, '\n'); - const Sci_Position endLine = styler.LineEnd(styler.GetLine(start)); - while (((start+i) < endLine) && (ch != '\r')) { - const char chNext = styler.SafeGetCharAt(start + i + 1, '\n'); - if (ch == '/' && (chNext == '/' || chNext == '*')) - break; - if (allowSpace || (ch != ' ')) - restOfLine += ch; - i++; - ch = chNext; + while (pos < endLine) { + if (ch == '\\' && ((pos + 1) == endLine)) { + // Continuation line + line++; + pos = styler.LineStart(line); + endLine = styler.LineEnd(line); + ch = styler.SafeGetCharAt(pos, '\n'); + } else { + const char chNext = styler.SafeGetCharAt(pos + 1, '\n'); + if (ch == '/' && (chNext == '/' || chNext == '*')) + break; + if (allowSpace || (ch != ' ')) { + restOfLine += ch; + } + pos++; + ch = chNext; + } } return restOfLine; } From 7d06abb8e7d5197e59a9133ba766fa3052539e4f Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Wed, 5 Dec 2018 15:46:40 +0100 Subject: [PATCH 07/11] + chg: UTF-8 affine initial default settings --- src/Edit.c | 2 +- src/Encoding.h | 2 ++ src/Notepad3.c | 8 ++++---- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index 629ebdf34..f99c51fe5 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -1013,7 +1013,7 @@ bool EditLoadFile( size_t const cbNbytes4Analysis = (cbData < 200000L) ? cbData : 200000L; int iPreferedEncoding = (bNfoDizDetected) ? g_DOSEncoding : - ((Settings.UseDefaultForFileEncoding || (cbNbytes4Analysis == 0)) ? Settings.DefaultEncoding : CPI_ANSI_DEFAULT); + ((Settings.UseDefaultForFileEncoding || (cbNbytes4Analysis == 0)) ? Settings.DefaultEncoding : PREFERRED_DEFAULT_ENCODING); // -------------------------------------------------------------------------- bool bIsReliable = false; diff --git a/src/Encoding.h b/src/Encoding.h index 38e75c94a..824e8e2c1 100644 --- a/src/Encoding.h +++ b/src/Encoding.h @@ -56,6 +56,8 @@ extern bool g_bForceCompEncDetection; #define Encoding_IsNONE(enc) ((enc) == CPI_NONE) +//~#define PREFERRED_DAFAULT_ENCODING CPI_ANSI_DEFAULT +#define PREFERRED_DEFAULT_ENCODING CPI_UTF8 typedef struct _np2encoding { UINT uFlags; diff --git a/src/Notepad3.c b/src/Notepad3.c index c76659482..f9cfa2e5b 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -6840,15 +6840,15 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(ViewWhiteSpace, false); GET_BOOL_VALUE_FROM_INISECTION(ViewEOLs, false); - GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, CPI_ANSI_DEFAULT, CED_NO_MAPPING, INT_MAX); - // if DefaultEncoding is not defined set to system's current code-page + GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, CPI_NONE, CED_NO_MAPPING, Encoding_CountOf()-1); + // if DefaultEncoding is not defined set to UTF-8 //~system's current code-page Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? - Encoding_MapIniSetting(true, (int)GetACP()) : Encoding_MapIniSetting(true, Settings.DefaultEncoding)); + PREFERRED_DEFAULT_ENCODING : Encoding_MapIniSetting(true, Settings.DefaultEncoding)); GET_BOOL_VALUE_FROM_INISECTION(UseDefaultForFileEncoding, false); GET_BOOL_VALUE_FROM_INISECTION(SkipUnicodeDetection, false); GET_BOOL_VALUE_FROM_INISECTION(SkipANSICodePageDetection, false); - GET_BOOL_VALUE_FROM_INISECTION(LoadASCIIasUTF8, false); + GET_BOOL_VALUE_FROM_INISECTION(LoadASCIIasUTF8, true); GET_BOOL_VALUE_FROM_INISECTION(LoadNFOasOEM, true); GET_BOOL_VALUE_FROM_INISECTION(NoEncodingTags, false); GET_INT_VALUE_FROM_INISECTION(DefaultEOLMode, SC_EOL_CRLF, SC_EOL_CRLF, SC_EOL_LF); From 9ca9e305f36be3d4dcfe23df6c02b575ea5d05ad Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 6 Dec 2018 02:04:41 +0100 Subject: [PATCH 08/11] + fix: handling of some settings default values --- src/Notepad3.c | 58 ++++++++++++++++++++++++++++---------------------- src/TypeDefs.h | 1 + 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index f9cfa2e5b..07a3bf5b3 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -84,8 +84,7 @@ static WCHAR s_wchTmpFilePath[MAX_PATH + 1] = { L'\0' }; static WCHAR* const s_tchAvailableLanguages = L"af-ZA be-BY de-DE es-ES en-GB fr-FR ja-JP nl-NL ru-RU zh-CN"; // en-US internal -static int s_iSettingsVersion = CFG_VER_NONE; -static bool s_bSaveSettings = true; +static int s_iSettingsVersion = CFG_VER_CURRENT; static bool s_bEnableSaveSettings = true; static prefix_t s_mxSBPrefix[STATUS_SECTOR_COUNT]; @@ -2950,7 +2949,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) CheckMenuRadioItem(hmenu,IDM_VIEW_NOESCFUNC,IDM_VIEW_ESCEXIT,i,MF_BYCOMMAND); i = (int)StringCchLenW(Globals.IniFile,COUNTOF(Globals.IniFile)); - CheckCmd(hmenu,IDM_VIEW_SAVESETTINGS,s_bSaveSettings && i); + CheckCmd(hmenu,IDM_VIEW_SAVESETTINGS,Settings.SaveSettings && i); EnableCmd(hmenu,IDM_VIEW_REUSEWINDOW,i); EnableCmd(hmenu,IDM_VIEW_STICKYWINPOS,i); @@ -5011,11 +5010,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_SAVESETTINGS: if (IsCmdEnabled(hwnd, IDM_VIEW_SAVESETTINGS)) { - s_bSaveSettings = !s_bSaveSettings; - if (s_bSaveSettings) + Settings.SaveSettings = !Settings.SaveSettings; + if (Settings.SaveSettings == Defaults.SaveSettings) IniSetString(L"Settings", L"SaveSettings", NULL); else - IniSetBool(L"Settings", L"SaveSettings", s_bSaveSettings); + IniSetBool(L"Settings", L"SaveSettings", Settings.SaveSettings); } break; @@ -6614,9 +6613,11 @@ void LoadSettings() if (pIniSection) { // prerequisites - s_bSaveSettings = IniGetBool(L"Settings", L"SaveSettings", true); s_iSettingsVersion = IniGetInt(L"Settings", L"SettingsVersion", CFG_VER_NONE); + Defaults.SaveSettings = true; + Settings.SaveSettings = IniGetBool(L"Settings", L"SaveSettings", Defaults.SaveSettings); + // first load "hard coded" .ini-Settings // -------------------------------------------------------------------------- LoadIniSection(L"Settings2", pIniSection, cchIniSection); @@ -6648,7 +6649,7 @@ void LoadSettings() // deprecated Defaults.RenderingTechnology = IniSectionGetInt(pIniSection, L"SciDirectWriteTech", -111); - if ((Defaults.RenderingTechnology != -111) && s_bSaveSettings) { + if ((Defaults.RenderingTechnology != -111) && Settings.SaveSettings) { // cleanup IniSetString(L"Settings2", L"SciDirectWriteTech", NULL); } @@ -6656,7 +6657,7 @@ void LoadSettings() // Settings2 deprecated Defaults.Bidirectional = IniSectionGetInt(pIniSection, L"EnableBidirectionalSupport", -111); - if ((Defaults.Bidirectional != -111) && s_bSaveSettings) { + if ((Defaults.Bidirectional != -111) && Settings.SaveSettings) { // cleanup IniSetString(L"Settings2", L"EnableBidirectionalSupport", NULL); } @@ -6747,12 +6748,12 @@ void LoadSettings() LoadIniSection(L"Settings", pIniSection, cchIniSection); // -------------------------------------------------------------------------- -#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \ - Defaults.##VARNAME = DEFAULT; \ +#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \ + Defaults.##VARNAME = DEFAULT; \ Settings.##VARNAME = IniSectionGetBool(pIniSection, STRGW(VARNAME), Defaults.##VARNAME) -#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \ - Defaults.##VARNAME = DEFAULT; \ +#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \ + Defaults.##VARNAME = DEFAULT; \ Settings.##VARNAME = clampi(IniSectionGetInt(pIniSection, STRGW(VARNAME), Defaults.##VARNAME),MIN,MAX) GET_BOOL_VALUE_FROM_INISECTION(SaveRecentFiles, true); @@ -6840,8 +6841,8 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(ViewWhiteSpace, false); GET_BOOL_VALUE_FROM_INISECTION(ViewEOLs, false); - GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, CPI_NONE, CED_NO_MAPPING, Encoding_CountOf()-1); - // if DefaultEncoding is not defined set to UTF-8 //~system's current code-page + int const iPrefEncIniSetting = Encoding_MapIniSetting(false, PREFERRED_DEFAULT_ENCODING); + GET_INT_VALUE_FROM_INISECTION(DefaultEncoding, iPrefEncIniSetting, CED_NO_MAPPING, Encoding_CountOf()-1); Settings.DefaultEncoding = ((Settings.DefaultEncoding == CPI_NONE) ? PREFERRED_DEFAULT_ENCODING : Encoding_MapIniSetting(true, Settings.DefaultEncoding)); @@ -7080,7 +7081,7 @@ void LoadSettings() #define SAVE_VALUE_IF_NOT_EQ_DEFAULT(TYPE,VARNAME) \ if (Settings.##VARNAME != Defaults.##VARNAME) { \ - IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.##VARNAME); \ + IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.##VARNAME); \ } // ---------------------------------------------------------------------------- @@ -7096,8 +7097,11 @@ void SaveSettings(bool bSaveSettingsNow) CreateIniFile(); - if (!(s_bSaveSettings || bSaveSettingsNow)) { - IniSetBool(L"Settings", L"SaveSettings", s_bSaveSettings); + if (!(Settings.SaveSettings || bSaveSettingsNow)) { + IniSetInt(L"Settings", L"SettingsVersion", CFG_VER_CURRENT); + if (Settings.SaveSettings != Defaults.SaveSettings) { + IniSetBool(L"Settings", L"SaveSettings", Settings.SaveSettings); + } return; } // update window placement @@ -7110,10 +7114,11 @@ void SaveSettings(bool bSaveSettingsNow) int const cchIniSection = INISECTIONBUFCNT * HUGE_BUFFER; WCHAR *pIniSection = AllocMem(sizeof(WCHAR) * cchIniSection, HEAP_ZERO_MEMORY); - if (pIniSection) { + if (pIniSection) + { IniSectionSetInt(pIniSection, L"SettingsVersion", CFG_VER_CURRENT); - IniSectionSetBool(pIniSection, L"SaveSettings", s_bSaveSettings); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveSettings); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveRecentFiles); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, PreserveCaretPos); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SaveFindReplace); @@ -7200,9 +7205,10 @@ void SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewWhiteSpace); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ViewEOLs); - if (Settings.DefaultEncoding != Defaults.DefaultEncoding) { - IniSectionSetInt(pIniSection, L"DefaultEncoding", Encoding_MapIniSetting(false, Settings.DefaultEncoding)); - } + Settings.DefaultEncoding = Encoding_MapIniSetting(false, Settings.DefaultEncoding); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, DefaultEncoding); + Settings.DefaultEncoding = Encoding_MapIniSetting(true, Settings.DefaultEncoding); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, UseDefaultForFileEncoding); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SkipUnicodeDetection); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, SkipANSICodePageDetection); @@ -7903,8 +7909,8 @@ int FindIniFile() { bFound = _CheckIniFile(tchPath,tchModule); } - if (bFound) { - + if (bFound) + { // allow two redirections: administrator -> user -> custom if (_CheckIniFileRedirect(MKWCS(APPNAME), MKWCS(APPNAME) L".ini", tchPath, tchModule)) { _CheckIniFileRedirect(MKWCS(APPNAME), MKWCS(APPNAME) L".ini", tchPath, tchModule); @@ -8843,7 +8849,7 @@ void UpdateSettingsCmds() { HMENU hmenu = GetSystemMenu(Globals.hwndMain, false); bool hasIniFile = (StringCchLenW(Globals.IniFile,COUNTOF(Globals.IniFile)) > 0 || StringCchLenW(s_wchIniFile2,COUNTOF(s_wchIniFile2)) > 0); - CheckCmd(hmenu, IDM_VIEW_SAVESETTINGS, s_bSaveSettings && s_bEnableSaveSettings); + CheckCmd(hmenu, IDM_VIEW_SAVESETTINGS, Settings.SaveSettings && s_bEnableSaveSettings); EnableCmd(hmenu, IDM_VIEW_SAVESETTINGS, hasIniFile && s_bEnableSaveSettings); EnableCmd(hmenu, IDM_VIEW_SAVESETTINGSNOW, hasIniFile && s_bEnableSaveSettings); if (SciCall_GetZoom() != 100) { EditShowZoomCallTip(Globals.hwndEdit); } diff --git a/src/TypeDefs.h b/src/TypeDefs.h index beee2555c..c4d3e627e 100644 --- a/src/TypeDefs.h +++ b/src/TypeDefs.h @@ -258,6 +258,7 @@ extern GLOBALS_T Globals; typedef struct _settings_t { + bool SaveSettings; bool SaveRecentFiles; bool PreserveCaretPos; bool SaveFindReplace; From cf80dca476234e420ec7bf9f211d12d9834cba99 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 6 Dec 2018 03:14:17 +0100 Subject: [PATCH 09/11] + fix: tmp disable "mark all occ" in case of multi-line selection --- src/Edit.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/Edit.c b/src/Edit.c index f99c51fe5..5c4a797ce 100644 --- a/src/Edit.c +++ b/src/Edit.c @@ -4952,7 +4952,7 @@ static void _DelayMarkAll(HWND hwnd, int delay, DocPos iStartPos) // // EditFindReplaceDlgProcW() // -static char g_lastFind[FNDRPL_BUFFER] = { L'\0' }; +static char s_lastFind[FNDRPL_BUFFER] = { L'\0' }; INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lParam) { @@ -4971,11 +4971,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA static int iSaveMarkOcc = -1; static bool bSaveOccVisible = false; - static bool bSaveTFBackSlashes = false; + static bool _bRestoreMarkOcc = true; WCHAR tchBuf[FNDRPL_BUFFER] = { L'\0' }; + switch (umsg) { case WM_INITDIALOG: @@ -4993,6 +4994,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA iSaveMarkOcc = s_bSwitchedFindReplace ? iSaveMarkOcc : Settings.MarkOccurrences; bSaveOccVisible = s_bSwitchedFindReplace ? bSaveOccVisible : Settings.MarkOccurrencesMatchVisible; + _bRestoreMarkOcc = sg_pefrData->bMarkOccurences; //const WORD wTabSpacing = (WORD)SendMessage(sg_pefrData->hwnd, SCI_GETTABWIDTH, 0, 0);; // dialog box units //SendDlgItemMessage(hwnd, IDC_FINDTEXT, EM_SETTABSTOPS, 1, (LPARAM)&wTabSpacing); @@ -5062,6 +5064,12 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA DialogEnableWindow(hwnd, IDC_DOT_MATCH_ALL, false); } + // switch off "mark all occ" in case of initial replace dialog on multiline selection + if (GetDlgItem(hwnd, IDC_REPLACE) && !s_bSwitchedFindReplace) { + if (Sci_IsMultiLineSelection()) { + sg_pefrData->bMarkOccurences = false; + } + } if (sg_pefrData->bMarkOccurences) { Settings.MarkOccurrences = 0; Settings.MarkOccurrencesMatchVisible = false; @@ -5155,6 +5163,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA } } sg_pefrData->szFind[0] = '\0'; + sg_pefrData->bMarkOccurences = _bRestoreMarkOcc; Settings.MarkOccurrences = iSaveMarkOcc; Settings.MarkOccurrencesMatchVisible = bSaveOccVisible; @@ -5225,7 +5234,8 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA EditEnsureSelectionVisible(Globals.hwndEdit); - DialogEnableWindow(hwnd, IDC_REPLACEINSEL, !SciCall_IsSelectionEmpty()); + bool const bEnableReplInSel = !(SciCall_IsSelectionEmpty() || SciCall_IsSelectionRectangle()); + DialogEnableWindow(hwnd, IDC_REPLACEINSEL, bEnableReplInSel); break; } @@ -5318,13 +5328,13 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA StringCchCopyNA(szFind, FNDRPL_BUFFER, szCmpBuf, FNDRPL_BUFFER); } - bool bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) || + bool const bEnableF = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_FINDTEXT)) || CB_ERR != SendDlgItemMessage(hwnd, IDC_FINDTEXT, CB_GETCURSEL, 0, 0)); - bool bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) || + bool const bEnableR = (GetWindowTextLengthW(GetDlgItem(hwnd, IDC_REPLACETEXT)) || CB_ERR != SendDlgItemMessage(hwnd, IDC_REPLACETEXT, CB_GETCURSEL, 0, 0)); - bool bEnableIS = !(bool)SendMessage(Globals.hwndEdit, SCI_GETSELECTIONEMPTY, 0, 0); + bool const bEnableIS = !(SciCall_IsSelectionEmpty() || SciCall_IsSelectionRectangle()); DialogEnableWindow(hwnd, IDOK, bEnableF); DialogEnableWindow(hwnd, IDC_FINDPREV, bEnableF); @@ -5351,10 +5361,10 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA { _SetSearchFlags(hwnd, sg_pefrData); if (sg_pefrData->bMarkOccurences) { - if (sg_pefrData->bStateChanged || (StringCchCompareXA(g_lastFind, sg_pefrData->szFind) != 0)) { + if (sg_pefrData->bStateChanged || (StringCchCompareXA(s_lastFind, sg_pefrData->szFind) != 0)) { _IGNORE_NOTIFY_CHANGE_; if (EditToggleView(Globals.hwndEdit, false)) { _DeleteLineStateAll(LINESTATE_OCCURRENCE_MARK); } - StringCchCopyA(g_lastFind, COUNTOF(g_lastFind), sg_pefrData->szFind); + StringCchCopyA(s_lastFind, COUNTOF(s_lastFind), sg_pefrData->szFind); RegExResult_t match = _FindHasMatch(Globals.hwndEdit, sg_pefrData, 0, (sg_pefrData->bMarkOccurences), false); if (s_anyMatch != match) { s_anyMatch = match; } // we have to set Sci's regex instance to first find (have substitution in place) @@ -5391,6 +5401,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA { iSaveMarkOcc = Settings.MarkOccurrences; bSaveOccVisible = Settings.MarkOccurrencesMatchVisible; + _bRestoreMarkOcc = true; Settings.MarkOccurrences = 0; Settings.MarkOccurrencesMatchVisible = false; @@ -5403,6 +5414,7 @@ INT_PTR CALLBACK EditFindReplaceDlgProcW(HWND hwnd,UINT umsg,WPARAM wParam,LPARA else { // switched OFF Settings.MarkOccurrences = iSaveMarkOcc; Settings.MarkOccurrencesMatchVisible = bSaveOccVisible; + _bRestoreMarkOcc = false; //DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, (Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible); DialogEnableWindow(hwnd, IDC_TOGGLE_VISIBILITY, false); if (EditToggleView(Globals.hwndEdit, false)) { From 5a6ad071e0521d31c2455cb4b23db7b863407f53 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 6 Dec 2018 03:28:46 +0100 Subject: [PATCH 10/11] + upd: changelog --- Build/Changes.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Build/Changes.txt b/Build/Changes.txt index 52929b14c..47085d0d0 100644 --- a/Build/Changes.txt +++ b/Build/Changes.txt @@ -13,7 +13,7 @@ LEGEND: ================================================== ================================================== -Version 5.18.1205.1444 (5 December 2018) +Version 5.18.1206.1448 (6 December 2018) ================================================== -------------------------------------------------- @@ -50,6 +50,8 @@ CHANGES: - Change Default settings to make the first experience of Notepad3 more attractive... - ANSI CodePage detection (CED) - allow less reliable results also - Open Find/Replace: Use most recent search pattern instead of clipboard (if selection eis empty) +- Encoding affinity: UTF-8 instead of local ANSI code-page +- Replace dialog: tmp disable "mark all occ" in case of multi-line selection -------------------------------------------------- FIXES: From f71a30d336982248e9aa20f7eb026134f6a1edbe Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Thu, 6 Dec 2018 03:47:15 +0100 Subject: [PATCH 11/11] + fix: merge conflict --- src/Notepad3.c | 550 ++++++++++++++++++++++++++----------------------- 1 file changed, 291 insertions(+), 259 deletions(-) diff --git a/src/Notepad3.c b/src/Notepad3.c index 07a3bf5b3..448a94d8e 100644 --- a/src/Notepad3.c +++ b/src/Notepad3.c @@ -51,6 +51,7 @@ #include "VersionEx.h" #include "SciCall.h" #include "SciLexer.h" +#include "SciXLexer.h" #include "Notepad3.h" @@ -159,31 +160,6 @@ static WIN32_FIND_DATA s_fdCurFile; static HMODULE s_hRichEdit = INVALID_HANDLE_VALUE; -// Globals <= @@@ -bool g_bWordWrapG; -bool g_bTabsAsSpacesG; -bool g_bTabIndentsG; -int g_iTabWidthG; -int g_iIndentWidthG; -int g_iLongLinesLimitG; -bool g_bCodeFoldingAvailable; -bool g_bForceLoadASCIIasUTF8 = false; -int g_iWrapCol = 0; -bool g_bZeroBasedColumnIndex = false; -bool g_bZeroBasedCharacterCount = false; -int g_iReplacedOccurrences = 0; -int g_iMarkOccurrencesCount = 0; -bool g_bChasingDocTail = false; -bool g_bUseLimitedAutoCCharSet = false; -bool g_bIsCJKInputCodePage = false; -bool g_bIniFileFromScratch = false; -bool g_bFindReplCopySelOrClip = true; -bool g_bReplaceInitialized = false; -FILEVARS g_fvCurFile; - -CALLTIPTYPE g_CallTipType = CT_NONE; - - #define INISECTIONBUFCNT 32 static TBBUTTON s_tbbMainWnd[] = { { 0,IDT_FILE_NEW,TBSTATE_ENABLED,BTNS_BUTTON,{0},0,0 }, @@ -459,9 +435,25 @@ static void _SetDocumentModified(bool bModified) //============================================================================== -static void _InitConstants() +static void _InitGlobals() { Constants.FileBrowserMiniPath = L"minipath.exe"; + + Globals.CallTipType = CT_NONE; + Globals.iWrapCol = 0; + Globals.bCodeFoldingAvailable = false; + Globals.bForceLoadASCIIasUTF8 = false; + Globals.bZeroBasedColumnIndex = false; + Globals.bZeroBasedCharacterCount = false; + Globals.iReplacedOccurrences = 0; + Globals.iMarkOccurrencesCount = 0; + Globals.bChasingDocTail = false; + Globals.bUseLimitedAutoCCharSet = false; + Globals.bIsCJKInputCodePage = false; + Globals.bIniFileFromScratch = false; + Globals.bFindReplCopySelOrClip = true; + Globals.bReplaceInitialized = false; + Globals.FindReplaceMatchFoundState = FND_NOP; } @@ -511,7 +503,7 @@ static void _CleanUpResources(const HWND hwnd, bool bIsInitialized) // int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nShowCmd) { - _InitConstants(); + _InitGlobals(); // Set global variable Globals.hInstance Globals.hInstance = hInstance; @@ -625,7 +617,7 @@ int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, if (res == 0) { // last try Globals.iPrefLANGID = GetUserDefaultUILanguage(); LCID const lcid = MAKELCID(Globals.iPrefLANGID, SORT_DEFAULT); - res = LCIDToLocaleName(lcid, Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), 0); + /*res = */LCIDToLocaleName(lcid, Settings2.PreferredLanguageLocaleName, COUNTOF(Settings2.PreferredLanguageLocaleName), 0); } } @@ -1025,7 +1017,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) } if (Settings.TransparentMode) { - SetWindowTransparentMode(Globals.hwndMain, true); + SetWindowTransparentMode(Globals.hwndMain, true, Settings2.OpacityLevel); } if (s_WinInfo.zoom) { @@ -1098,7 +1090,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) InstallFileWatching(Globals.CurrentFile); } else if (s_flagChangeNotify == 2) { - if (!g_bChasingDocTail) { + if (!Globals.bChasingDocTail) { SendMessage(Globals.hwndMain, WM_COMMAND, MAKELONG(IDM_VIEW_CHASING_DOCTAIL, 1), 0); } else { @@ -1166,7 +1158,7 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) SendMessage( Globals.hwndMain, WM_COMMAND, - MAKELONG(IDM_LINEENDINGS_CRLF + s_flagSetEOLMode - 1, 1), + MAKELONG(IDM_LINEENDINGS_CRLF + s_flagSetEOLMode -1,1), 0); s_flagSetEOLMode = 0; } @@ -1223,8 +1215,8 @@ HWND InitInstance(HINSTANCE hInstance,LPCWSTR pszCmdLine,int nCmdShow) if (s_flagStartAsTrayIcon) SetNotifyIconTitle(Globals.hwndMain); - g_iReplacedOccurrences = 0; - g_iMarkOccurrencesCount = (Settings.MarkOccurrences > 0) ? 0 : -1; + Globals.iReplacedOccurrences = 0; + Globals.iMarkOccurrencesCount = (Settings.MarkOccurrences > 0) ? 0 : -1; UpdateToolbar(); UpdateStatusbar(false); @@ -1423,7 +1415,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; case WM_INPUTLANGCHANGE: - g_bIsCJKInputCodePage = IsDBCSCodePage(Scintilla_InputCodePage()); + Globals.bIsCJKInputCodePage = IsDBCSCodePage(Scintilla_InputCodePage()); break; default: @@ -2397,7 +2389,7 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam) InstallFileWatching(Globals.CurrentFile); } else if (params->flagChangeNotify == 2) { - if (!g_bChasingDocTail) { + if (!Globals.bChasingDocTail) { SendMessage(Globals.hwndMain, WM_COMMAND, MAKELONG(IDM_VIEW_CHASING_DOCTAIL, 1), 0); } else { @@ -2541,9 +2533,9 @@ LRESULT MsgChangeNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) { FileRevert(Globals.CurrentFile, Encoding_HasChanged(CPI_GET)); - if (g_bChasingDocTail) + if (Globals.bChasingDocTail) { - SciCall_SetReadOnly(g_bChasingDocTail); + SciCall_SetReadOnly(Globals.bChasingDocTail); //SetForegroundWindow(hwnd); SciCall_ScrollToEnd(); } @@ -2829,13 +2821,13 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) EnableCmd(hmenu, IDM_VIEW_FONT, !IsWindow(Globals.hwndDlgCustomizeSchemes)); EnableCmd(hmenu, IDM_VIEW_CURRENTSCHEME, !IsWindow(Globals.hwndDlgCustomizeSchemes)); - EnableCmd(hmenu, IDM_VIEW_FOLDING, g_bCodeFoldingAvailable); - CheckCmd(hmenu, IDM_VIEW_FOLDING, (g_bCodeFoldingAvailable && Settings.ShowCodeFolding)); - EnableCmd(hmenu,IDM_VIEW_TOGGLEFOLDS,!e && (g_bCodeFoldingAvailable && Settings.ShowCodeFolding)); + EnableCmd(hmenu, IDM_VIEW_FOLDING, Globals.bCodeFoldingAvailable); + CheckCmd(hmenu, IDM_VIEW_FOLDING, (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); + EnableCmd(hmenu,IDM_VIEW_TOGGLEFOLDS,!e && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); bool const bF = (SC_FOLDLEVELBASE < (SciCall_GetFoldLevel(iCurLine) & SC_FOLDLEVELNUMBERMASK)); bool const bH = (SciCall_GetFoldLevel(iCurLine) & SC_FOLDLEVELHEADERFLAG); - EnableCmd(hmenu,IDM_VIEW_TOGGLE_CURRENT_FOLD, !e && (g_bCodeFoldingAvailable && Settings.ShowCodeFolding) && (bF || bH)); + EnableCmd(hmenu,IDM_VIEW_TOGGLE_CURRENT_FOLD, !e && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding) && (bF || bH)); CheckCmd(hmenu,IDM_VIEW_USE2NDDEFAULT,Style_GetUse2ndDefault()); @@ -2846,7 +2838,7 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) CheckCmd(hmenu,IDM_VIEW_AUTOINDENTTEXT,Settings.AutoIndent); CheckCmd(hmenu,IDM_VIEW_LINENUMBERS,Settings.ShowLineNumbers); CheckCmd(hmenu,IDM_VIEW_MARGIN,Settings.ShowSelectionMargin); - CheckCmd(hmenu,IDM_VIEW_CHASING_DOCTAIL, g_bChasingDocTail); + CheckCmd(hmenu,IDM_VIEW_CHASING_DOCTAIL, Globals.bChasingDocTail); EnableCmd(hmenu,IDM_EDIT_COMPLETEWORD,!e && !ro); CheckCmd(hmenu,IDM_VIEW_AUTOCOMPLETEWORDS,Settings.AutoCompleteWords && !ro); @@ -2987,7 +2979,6 @@ LRESULT MsgInitMenu(HWND hwnd, WPARAM wParam, LPARAM lParam) // LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { - char chMaxPathBuffer[MAX_PATH + 1] = { '\0' }; WCHAR tchMaxPathBuffer[MAX_PATH + 1] = { L'\0' }; switch(LOWORD(wParam)) @@ -3333,7 +3324,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_LINEENDINGS_SETDEFAULT: - SelectDefLineEndingDlg(hwnd, &Settings.DefaultEOLMode); + SelectDefLineEndingDlg(hwnd, (LPARAM)&Settings.DefaultEOLMode); break; @@ -3574,7 +3565,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_INDENT: { _BEGIN_UNDO_ACTION_; - EditIndentBlock(Globals.hwndEdit, SCI_TAB, true); + EditIndentBlock(Globals.hwndEdit, SCI_TAB, true, false); _END_UNDO_ACTION_; } break; @@ -3582,7 +3573,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_UNINDENT: { _BEGIN_UNDO_ACTION_; - EditIndentBlock(Globals.hwndEdit, SCI_BACKTAB, true); + EditIndentBlock(Globals.hwndEdit, SCI_BACKTAB, true, false); _END_UNDO_ACTION_; } break; @@ -3590,7 +3581,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_TAB: { _BEGIN_UNDO_ACTION_; - EditIndentBlock(Globals.hwndEdit, SCI_TAB, false); + EditIndentBlock(Globals.hwndEdit, SCI_TAB, false, false); _END_UNDO_ACTION_; } break; @@ -3598,7 +3589,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_BACKTAB: { _BEGIN_UNDO_ACTION_; - EditIndentBlock(Globals.hwndEdit, SCI_BACKTAB, false); + EditIndentBlock(Globals.hwndEdit, SCI_BACKTAB, false, false); _END_UNDO_ACTION_; } break; @@ -3606,11 +3597,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_CTRLTAB: { _BEGIN_UNDO_ACTION_; - SendMessage(Globals.hwndEdit, SCI_SETUSETABS, true, 0); - SendMessage(Globals.hwndEdit, SCI_SETTABINDENTS, false, 0); - EditIndentBlock(Globals.hwndEdit, SCI_TAB, false); - SendMessage(Globals.hwndEdit, SCI_SETTABINDENTS, Settings.TabIndents, 0); - SendMessage(Globals.hwndEdit, SCI_SETUSETABS, !Settings.TabsAsSpaces, 0); + SciCall_SetUseTabs(true); + SciCall_SetTabIndents(false); + EditIndentBlock(Globals.hwndEdit, SCI_TAB, false, false); + SciCall_SetTabIndents(Settings.TabIndents); + SciCall_SetUseTabs(!Settings.TabsAsSpaces); _END_UNDO_ACTION_; } break; @@ -3787,17 +3778,17 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_COLUMNWRAP: { - if (g_iWrapCol == 0) { - g_iWrapCol = Settings.LongLinesLimit; + if (Globals.iWrapCol == 0) { + Globals.iWrapCol = Settings.LongLinesLimit; } UINT uWrpCol = 0; if (ColumnWrapDlg(hwnd,IDD_MUI_COLUMNWRAP,&uWrpCol)) { - g_iWrapCol = (DocPos)clampi((int)uWrpCol, 1, Settings.LongLinesLimit); + Globals.iWrapCol = (DocPos)clampi((int)uWrpCol, 1, Settings.LongLinesLimit); BeginWaitCursor(NULL); _BEGIN_UNDO_ACTION_; - EditWrapToColumn(Globals.hwndEdit,g_iWrapCol); + EditWrapToColumn(Globals.hwndEdit,Globals.iWrapCol); _END_UNDO_ACTION_; EndWaitCursor(); } @@ -3979,8 +3970,6 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_INSERT_SHORTDATE: case IDM_EDIT_INSERT_LONGDATE: { - WCHAR tchDate[64] = { L'\0' }; - WCHAR tchTime[64] = { L'\0' }; WCHAR tchDateTime[128] = { L'\0' }; WCHAR tchTemplate[128] = { L'\0' }; SYSTEMTIME st; @@ -3989,7 +3978,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) GetLocalTime(&st); StringCchCopyW(tchTemplate, COUNTOF(tchTemplate), - (LOWORD(wParam) == IDM_EDIT_INSERT_SHORTDATE) ? Settings2.DateTimeLong : Settings2.DateTimeLong); + (LOWORD(wParam) == IDM_EDIT_INSERT_SHORTDATE) ? Settings2.DateTimeShort : Settings2.DateTimeLong); if (StringCchLenW(tchTemplate,0) > 0) { @@ -4006,6 +3995,8 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) wcsftime(tchDateTime,COUNTOF(tchDateTime),tchTemplate,&sst); } else { + WCHAR tchDate[64] = { L'\0' }; + WCHAR tchTime[64] = { L'\0' }; GetDateFormat(LOCALE_USER_DEFAULT,( LOWORD(wParam) == IDM_EDIT_INSERT_SHORTDATE) ? DATE_SHORTDATE : DATE_LONGDATE, &st,NULL,tchDate,COUNTOF(tchDate)); @@ -4058,6 +4049,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) if (SUCCEEDED(CoCreateGuid(&guid))) { if (StringFromGUID2(&guid, tchMaxPathBuffer,COUNTOF(tchMaxPathBuffer))) { StrTrimW(tchMaxPathBuffer, L"{}"); + char chMaxPathBuffer[MAX_PATH + 1] = { '\0' }; if (WideCharToMultiByte(Encoding_SciCP, 0, tchMaxPathBuffer, -1, chMaxPathBuffer, COUNTOF(chMaxPathBuffer), NULL, NULL)) { _BEGIN_UNDO_ACTION_; SendMessage(Globals.hwndEdit,SCI_REPLACESEL,0,(LPARAM)chMaxPathBuffer); @@ -4336,11 +4328,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_FIND: if (!IsWindow(Globals.hwndDlgFindReplace)) { - g_bFindReplCopySelOrClip = true; + Globals.bFindReplCopySelOrClip = true; Globals.hwndDlgFindReplace = EditFindReplaceDlg(Globals.hwndEdit, &Settings.EFR_Data, false); } else { - g_bFindReplCopySelOrClip = (GetForegroundWindow() != Globals.hwndDlgFindReplace); + Globals.bFindReplCopySelOrClip = (GetForegroundWindow() != Globals.hwndDlgFindReplace); if (GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE)) { SendMessage(Globals.hwndDlgFindReplace, WM_COMMAND, MAKELONG(IDMSG_SWITCHTOFIND, 1), 0); DestroyWindow(Globals.hwndDlgFindReplace); @@ -4357,11 +4349,11 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_EDIT_REPLACE: if (!IsWindow(Globals.hwndDlgFindReplace)) { - g_bFindReplCopySelOrClip = true; + Globals.bFindReplCopySelOrClip = true; Globals.hwndDlgFindReplace = EditFindReplaceDlg(Globals.hwndEdit, &Settings.EFR_Data, true); } else { - g_bFindReplCopySelOrClip = (GetForegroundWindow() != Globals.hwndDlgFindReplace); + Globals.bFindReplCopySelOrClip = (GetForegroundWindow() != Globals.hwndDlgFindReplace); if (!GetDlgItem(Globals.hwndDlgFindReplace, IDC_REPLACE)) { SendMessage(Globals.hwndDlgFindReplace, WM_COMMAND, MAKELONG(IDMSG_SWITCHTOREPLACE, 1), 0); DestroyWindow(Globals.hwndDlgFindReplace); @@ -4411,7 +4403,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) break; case IDM_EDIT_REPLACENEXT: - if (g_bReplaceInitialized) + if (Globals.bReplaceInitialized) EditReplace(Globals.hwndEdit,&Settings.EFR_Data); else SendMessage(hwnd,WM_COMMAND,MAKELONG(IDM_EDIT_REPLACE,1),0); @@ -4552,7 +4544,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) Settings.WordWrap = !Settings.WordWrap; _SetWrapIndentMode(Globals.hwndEdit); EditEnsureSelectionVisible(Globals.hwndEdit); - g_bWordWrapG = Settings.WordWrap; + Globals.bWordWrap = Settings.WordWrap; UpdateToolbar(); break; @@ -4592,7 +4584,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) Style_SetLongLineColors(Globals.hwndEdit); Settings.LongLinesLimit = clampi(Settings.LongLinesLimit, 0, LONG_LINES_MARKER_LIMIT); SendMessage(Globals.hwndEdit,SCI_SETEDGECOLUMN,Settings.LongLinesLimit,0); - g_iLongLinesLimitG = Settings.LongLinesLimit; + Globals.iLongLinesLimit = Settings.LongLinesLimit; UpdateToolbar(); UpdateStatusbar(false); } @@ -4602,24 +4594,24 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_TABSASSPACES: Settings.TabsAsSpaces = !Settings.TabsAsSpaces; SendMessage(Globals.hwndEdit,SCI_SETUSETABS,!Settings.TabsAsSpaces,0); - g_bTabsAsSpacesG = Settings.TabsAsSpaces; + Globals.bTabsAsSpaces = Settings.TabsAsSpaces; break; case IDM_VIEW_TABSETTINGS: if (TabSettingsDlg(hwnd,IDD_MUI_TABSETTINGS,NULL)) { - SendMessage(Globals.hwndEdit,SCI_SETUSETABS,!Settings.TabsAsSpaces,0); - SendMessage(Globals.hwndEdit,SCI_SETTABINDENTS,Settings.TabIndents,0); - SendMessage(Globals.hwndEdit,SCI_SETBACKSPACEUNINDENTS,Settings.BackspaceUnindents,0); + SciCall_SetUseTabs(!Settings.TabsAsSpaces); + SciCall_SetTabIndents(Settings.TabIndents); + SciCall_SetBackSpaceUnIndents(Settings.BackspaceUnindents); Settings.TabWidth = clampi(Settings.TabWidth, 1, 256); Settings.IndentWidth = clampi(Settings.IndentWidth, 0, 256); - SendMessage(Globals.hwndEdit,SCI_SETTABWIDTH,Settings.TabWidth,0); - SendMessage(Globals.hwndEdit,SCI_SETINDENT,Settings.IndentWidth,0); - g_bTabsAsSpacesG = Settings.TabsAsSpaces; - g_bTabIndentsG = Settings.TabIndents; - g_iTabWidthG = Settings.TabWidth; - g_iIndentWidthG = Settings.IndentWidth; + SciCall_SetTabWidth(Settings.TabWidth); + SciCall_SetIndent(Settings.IndentWidth); + Globals.bTabsAsSpaces = Settings.TabsAsSpaces; + Globals.bTabIndents = Settings.TabIndents; + Globals.iTabWidth = Settings.TabWidth; + Globals.iIndentWidth = Settings.IndentWidth; if (SendMessage(Globals.hwndEdit, SCI_GETWRAPINDENTMODE, 0, 0) == SC_WRAPINDENT_FIXED) { _SetWrapStartIndent(Globals.hwndEdit); } @@ -4800,10 +4792,10 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) static int iPrevFileWatchingMode = 0; static bool bPrevResetFileWatching = false; - g_bChasingDocTail = !g_bChasingDocTail; - SciCall_SetReadOnly(g_bChasingDocTail); + Globals.bChasingDocTail = !Globals.bChasingDocTail; + SciCall_SetReadOnly(Globals.bChasingDocTail); - if (g_bChasingDocTail) + if (Globals.bChasingDocTail) { SetForegroundWindow(hwnd); flagPrevChangeNotify = s_flagChangeNotify; @@ -4820,7 +4812,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) } if (!s_bRunningWatch) { InstallFileWatching(Globals.CurrentFile); } - CheckCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CHASING_DOCTAIL, g_bChasingDocTail); + CheckCmd(GetMenu(Globals.hwndMain), IDM_VIEW_CHASING_DOCTAIL, Globals.bChasingDocTail); UpdateToolbar(); } break; @@ -4933,7 +4925,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case IDM_VIEW_TRANSPARENT: Settings.TransparentMode = !Settings.TransparentMode; - SetWindowTransparentMode(hwnd,Settings.TransparentMode); + SetWindowTransparentMode(hwnd,Settings.TransparentMode, Settings2.OpacityLevel); break; case IDM_SET_RENDER_TECH_DEFAULT: @@ -5243,10 +5235,10 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) case CMD_RELOADASCIIASUTF8: { if (StringCchLenW(Globals.CurrentFile,COUNTOF(Globals.CurrentFile))) { - g_bForceLoadASCIIasUTF8 = true; + Globals.bForceLoadASCIIasUTF8 = true; StringCchCopy(tchMaxPathBuffer,COUNTOF(tchMaxPathBuffer),Globals.CurrentFile); FileLoad(false, false, true, true, true, tchMaxPathBuffer); - g_bForceLoadASCIIasUTF8 = false; + Globals.bForceLoadASCIIasUTF8 = false; } } break; @@ -5256,7 +5248,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) { g_bForceCompEncDetection = true; if (StringCchLenW(Globals.CurrentFile, COUNTOF(Globals.CurrentFile))) { - g_bForceLoadASCIIasUTF8 = false; + Globals.bForceLoadASCIIasUTF8 = false; StringCchCopy(tchMaxPathBuffer, COUNTOF(tchMaxPathBuffer), Globals.CurrentFile); FileLoad(false, false, true, false, false, tchMaxPathBuffer); } @@ -5427,7 +5419,7 @@ LRESULT MsgCommand(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) SendMessage(Globals.hwndEdit,SCI_SETEDGECOLUMN,Settings.LongLinesLimit,0); UpdateToolbar(); UpdateStatusbar(false); - g_iLongLinesLimitG = Settings.LongLinesLimit; + Globals.iLongLinesLimit = Settings.LongLinesLimit; } break; @@ -6284,9 +6276,9 @@ LRESULT MsgNotify(HWND hwnd, WPARAM wParam, LPARAM lParam) { int const ich = scn->ch; - if (g_CallTipType != CT_NONE) { + if (Globals.CallTipType != CT_NONE) { SciCall_CallTipCancel(); - g_CallTipType = CT_NONE; + Globals.CallTipType = CT_NONE; } switch (ich) { @@ -6712,7 +6704,10 @@ void LoadSettings() Settings2.FileLoadWarningMB = clampi(IniSectionGetInt(pIniSection, L"FileLoadWarningMB", Defaults2.FileLoadWarningMB), 0, 2048); Defaults2.OpacityLevel = 75; - Settings2.OpacityLevel = clampi(IniSectionGetInt(pIniSection, L"OpacityLevel", Defaults2.OpacityLevel), 0, 100); + Settings2.OpacityLevel = clampi(IniSectionGetInt(pIniSection, L"OpacityLevel", Defaults2.OpacityLevel), 10, 100); + + Defaults2.FindReplaceOpacityLevel = 50; + Settings2.FindReplaceOpacityLevel = clampi(IniSectionGetInt(pIniSection, L"FindReplaceOpacityLevel", Defaults2.FindReplaceOpacityLevel), 10, 100); Defaults2.FileBrowserPath[0] = L'\0'; IniSectionGetString(pIniSection, L"filebrowser.exe", Defaults2.FileBrowserPath, Settings2.FileBrowserPath, COUNTOF(Settings2.FileBrowserPath)); @@ -6748,13 +6743,13 @@ void LoadSettings() LoadIniSection(L"Settings", pIniSection, cchIniSection); // -------------------------------------------------------------------------- -#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \ - Defaults.##VARNAME = DEFAULT; \ - Settings.##VARNAME = IniSectionGetBool(pIniSection, STRGW(VARNAME), Defaults.##VARNAME) +#define GET_BOOL_VALUE_FROM_INISECTION(VARNAME,DEFAULT) \ + Defaults.VARNAME = DEFAULT; \ + Settings.VARNAME = IniSectionGetBool(pIniSection, STRGW(VARNAME), Defaults.VARNAME) -#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \ - Defaults.##VARNAME = DEFAULT; \ - Settings.##VARNAME = clampi(IniSectionGetInt(pIniSection, STRGW(VARNAME), Defaults.##VARNAME),MIN,MAX) +#define GET_INT_VALUE_FROM_INISECTION(VARNAME,DEFAULT,MIN,MAX) \ + Defaults.VARNAME = DEFAULT; \ + Settings.VARNAME = clampi(IniSectionGetInt(pIniSection, STRGW(VARNAME), Defaults.VARNAME),MIN,MAX) GET_BOOL_VALUE_FROM_INISECTION(SaveRecentFiles, true); GET_BOOL_VALUE_FROM_INISECTION(PreserveCaretPos, false); @@ -6799,7 +6794,7 @@ void LoadSettings() } GET_INT_VALUE_FROM_INISECTION(PathNameFormat, 1, 0, 2); - GET_BOOL_VALUE_FROM_INISECTION(WordWrap, false); g_bWordWrapG = Settings.WordWrap; + GET_BOOL_VALUE_FROM_INISECTION(WordWrap, false); Globals.bWordWrap = Settings.WordWrap; GET_INT_VALUE_FROM_INISECTION(WordWrapMode, 0, 0, 1); GET_INT_VALUE_FROM_INISECTION(WordWrapIndent, 2, 0, 6); @@ -6818,13 +6813,14 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(AutoCLexerKeyWords, false); GET_BOOL_VALUE_FROM_INISECTION(AccelWordNavigation, false); GET_BOOL_VALUE_FROM_INISECTION(ShowIndentGuides, false); - GET_BOOL_VALUE_FROM_INISECTION(TabsAsSpaces, false); g_bTabsAsSpacesG = Settings.TabsAsSpaces; - GET_BOOL_VALUE_FROM_INISECTION(TabIndents, true); g_bTabIndentsG = Settings.TabIndents; + GET_BOOL_VALUE_FROM_INISECTION(TabsAsSpaces, false); Globals.bTabsAsSpaces = Settings.TabsAsSpaces; + GET_BOOL_VALUE_FROM_INISECTION(TabIndents, true); Globals.bTabIndents = Settings.TabIndents; GET_BOOL_VALUE_FROM_INISECTION(BackspaceUnindents, false); - GET_INT_VALUE_FROM_INISECTION(TabWidth, 4, 1, 1024); g_iTabWidthG = Settings.TabWidth; - GET_INT_VALUE_FROM_INISECTION(IndentWidth, 4, 0, 1024); g_iIndentWidthG = Settings.IndentWidth; + GET_INT_VALUE_FROM_INISECTION(TabWidth, 4, 1, 1024); Globals.iTabWidth = Settings.TabWidth; + GET_INT_VALUE_FROM_INISECTION(IndentWidth, 4, 0, 1024); Globals.iIndentWidth = Settings.IndentWidth; + GET_BOOL_VALUE_FROM_INISECTION(WarnInconsistentIndents, false); GET_BOOL_VALUE_FROM_INISECTION(MarkLongLines, true); - GET_INT_VALUE_FROM_INISECTION(LongLinesLimit, 80, 0, LONG_LINES_MARKER_LIMIT); g_iLongLinesLimitG = Settings.LongLinesLimit; + GET_INT_VALUE_FROM_INISECTION(LongLinesLimit, 80, 0, LONG_LINES_MARKER_LIMIT); Globals.iLongLinesLimit = Settings.LongLinesLimit; GET_INT_VALUE_FROM_INISECTION(LongLineMode, EDGE_LINE, EDGE_LINE, EDGE_BACKGROUND); GET_BOOL_VALUE_FROM_INISECTION(ShowSelectionMargin, true); GET_BOOL_VALUE_FROM_INISECTION(ShowLineNumbers, true); @@ -6853,6 +6849,7 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(LoadNFOasOEM, true); GET_BOOL_VALUE_FROM_INISECTION(NoEncodingTags, false); GET_INT_VALUE_FROM_INISECTION(DefaultEOLMode, SC_EOL_CRLF, SC_EOL_CRLF, SC_EOL_LF); + GET_BOOL_VALUE_FROM_INISECTION(WarnInconsistEOLs, true); GET_BOOL_VALUE_FROM_INISECTION(FixLineEndings, false); GET_BOOL_VALUE_FROM_INISECTION(FixTrailingBlanks, false); GET_INT_VALUE_FROM_INISECTION(PrintHeader, 1, 0, 3); @@ -6860,7 +6857,7 @@ void LoadSettings() GET_INT_VALUE_FROM_INISECTION(PrintColorMode, 3, 0, 4); int const zoomScale = float2int(1000.0f / INITIAL_BASE_FONT_SIZE); - Defaults.PrintZoom = (s_iSettingsVersion < CFG_VER_0001) ? (int)(zoomScale / 10) : zoomScale; + Defaults.PrintZoom = (s_iSettingsVersion < CFG_VER_0001) ? (zoomScale / 10) : zoomScale; int iPrintZoom = clampi(IniSectionGetInt(pIniSection, L"PrintZoom", Defaults.PrintZoom), 0, SC_MAX_ZOOM_LEVEL); if (s_iSettingsVersion < CFG_VER_0001) { iPrintZoom = 100 + (iPrintZoom - 10) * 10; } Settings.PrintZoom = clampi(iPrintZoom, SC_MIN_ZOOM_LEVEL, SC_MAX_ZOOM_LEVEL); @@ -6884,6 +6881,7 @@ void LoadSettings() GET_BOOL_VALUE_FROM_INISECTION(AlwaysOnTop, false); GET_BOOL_VALUE_FROM_INISECTION(MinimizeToTray, false); GET_BOOL_VALUE_FROM_INISECTION(TransparentMode, false); + GET_BOOL_VALUE_FROM_INISECTION(FindReplaceTransparentMode, true); GET_INT_VALUE_FROM_INISECTION(RenderingTechnology, Defaults.RenderingTechnology, 0, 3); // set before GET_INT_VALUE_FROM_INISECTION(Bidirectional, Defaults.Bidirectional, 0, 2); // set before ///~Settings2.IMEInteraction = clampi(IniSectionGetInt(pIniSection, L"IMEInteraction", Settings2.IMEInteraction), SC_IME_WINDOWED, SC_IME_INLINE); @@ -6941,8 +6939,8 @@ void LoadSettings() IniSectionGetString(pIniSection, L"SectionWidthSpecs", STATUSBAR_SECTION_WIDTH_SPECS, tchStatusBar, COUNTOF(tchStatusBar)); ReadVectorFromString(tchStatusBar, s_iStatusbarWidthSpec, STATUS_SECTOR_COUNT, -4096, 4096, 0); - g_bZeroBasedColumnIndex = IniSectionGetBool(pIniSection, L"ZeroBasedColumnIndex", false); - g_bZeroBasedCharacterCount = IniSectionGetBool(pIniSection, L"ZeroBasedCharacterCount", false); + Globals.bZeroBasedColumnIndex = IniSectionGetBool(pIniSection, L"ZeroBasedColumnIndex", false); + Globals.bZeroBasedCharacterCount = IniSectionGetBool(pIniSection, L"ZeroBasedCharacterCount", false); // -------------------------------------------------------------------------- @@ -7079,9 +7077,9 @@ void LoadSettings() // SaveSettings() // -#define SAVE_VALUE_IF_NOT_EQ_DEFAULT(TYPE,VARNAME) \ - if (Settings.##VARNAME != Defaults.##VARNAME) { \ - IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.##VARNAME); \ +#define SAVE_VALUE_IF_NOT_EQ_DEFAULT(TYPE,VARNAME) \ + if (Settings.VARNAME != Defaults.VARNAME) { \ + IniSectionSet##TYPE(pIniSection, STRGW(VARNAME), Settings.VARNAME); \ } // ---------------------------------------------------------------------------- @@ -7089,8 +7087,6 @@ void LoadSettings() void SaveSettings(bool bSaveSettingsNow) { - WCHAR wchTmp[MAX_PATH] = { L'\0' }; - if (StringCchLenW(Globals.IniFile, COUNTOF(Globals.IniFile)) == 0) { return; } if (!s_bEnableSaveSettings) { return; } @@ -7150,6 +7146,8 @@ void SaveSettings(bool bSaveSettingsNow) if (Settings.EFR_Data.fuFlags != Defaults.EFR_Data.fuFlags) { IniSectionSetInt(pIniSection, L"efrData_fuFlags", Settings.EFR_Data.fuFlags); } + + WCHAR wchTmp[MAX_PATH] = { L'\0' }; if (StringCchCompareXIW(Settings.OpenWithDir, Defaults.OpenWithDir) != 0) { PathRelativeToApp(Settings.OpenWithDir, wchTmp, COUNTOF(wchTmp), false, true, Flags.PortableMyDocs); IniSectionSetString(pIniSection, L"OpenWithDir", wchTmp); @@ -7161,8 +7159,8 @@ void SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, PathNameFormat); - if (g_bWordWrapG != Defaults.WordWrap) { - IniSectionSetBool(pIniSection, L"WordWrap", g_bWordWrapG); + if (Globals.bWordWrap != Defaults.WordWrap) { + IniSectionSetBool(pIniSection, L"WordWrap", Globals.bWordWrap); } SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, WordWrapMode); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, WordWrapIndent); @@ -7180,17 +7178,18 @@ void SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, ShowIndentGuides); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, TabsAsSpaces); - if (g_bTabIndentsG != Defaults.TabIndents) { - IniSectionSetBool(pIniSection, L"", g_bTabIndentsG); + if (Globals.bTabIndents != Defaults.TabIndents) { + IniSectionSetBool(pIniSection, L"", Globals.bTabIndents); } SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, BackspaceUnindents); - if (g_iTabWidthG != Defaults.TabWidth) { - IniSectionSetInt(pIniSection, L"TabWidth", g_iTabWidthG); + if (Globals.iTabWidth != Defaults.TabWidth) { + IniSectionSetInt(pIniSection, L"TabWidth", Globals.iTabWidth); } - if (g_iIndentWidthG != Defaults.TabWidth) { - IniSectionSetInt(pIniSection, L"IndentWidth", g_iIndentWidthG); + if (Globals.iIndentWidth != Defaults.TabWidth) { + IniSectionSetInt(pIniSection, L"IndentWidth", Globals.iIndentWidth); } + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, WarnInconsistentIndents); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MarkLongLines); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, LongLinesLimit); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, LongLineMode); @@ -7216,6 +7215,7 @@ void SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, LoadNFOasOEM); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, NoEncodingTags); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, DefaultEOLMode); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, WarnInconsistEOLs); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, FixLineEndings); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, FixTrailingBlanks); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, PrintHeader); @@ -7242,6 +7242,7 @@ void SaveSettings(bool bSaveSettingsNow) SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, AlwaysOnTop); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, MinimizeToTray); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, TransparentMode); + SAVE_VALUE_IF_NOT_EQ_DEFAULT(Bool, FindReplaceTransparentMode); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, RenderingTechnology); SAVE_VALUE_IF_NOT_EQ_DEFAULT(Int, Bidirectional); ///~IniSectionSetInt(pIniSection, L"IMEInteraction", Settings2.IMEInteraction); @@ -7315,27 +7316,26 @@ void SaveSettings(bool bSaveSettingsNow) // void ParseCommandLine() { - LPWSTR lp1,lp2,lp3; - bool bContinue = true; - bool bIsFileArg = false; - bool bIsNotepadReplacement = false; - LPWSTR lpCmdLine = GetCommandLine(); - if (StrIsEmpty(lpCmdLine)) { return; } // Good old console can also send args separated by Tabs StrTab2Space(lpCmdLine); DocPos const len = (DocPos)(StringCchLenW(lpCmdLine,0) + 2UL); - lp1 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); - lp2 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); - lp3 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); + LPWSTR lp1 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); + LPWSTR lp2 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); + LPWSTR lp3 = AllocMem(sizeof(WCHAR)*len,HEAP_ZERO_MEMORY); - if (lp1 && lp2 && lp3) { + if (lp1 && lp2 && lp3) + { + bool bIsNotepadReplacement = false; + // Start with 2nd argument ExtractFirstArgument(lpCmdLine, lp1, lp3, (int)len); + bool bContinue = true; + bool bIsFileArg = false; while (bContinue && ExtractFirstArgument(lp3, lp1, lp2, (int)len)) { // options if (lp1[1] == L'\0') { @@ -7808,10 +7808,11 @@ void LoadFlags() static bool _CheckIniFile(LPWSTR lpszFile,LPCWSTR lpszModule) { WCHAR tchFileExpanded[MAX_PATH] = { L'\0' }; - WCHAR tchBuild[MAX_PATH] = { L'\0' }; ExpandEnvironmentStrings(lpszFile,tchFileExpanded,COUNTOF(tchFileExpanded)); - if (PathIsRelative(tchFileExpanded)) { + if (PathIsRelative(tchFileExpanded)) + { + WCHAR tchBuild[MAX_PATH] = { L'\0' }; // program directory StringCchCopy(tchBuild,COUNTOF(tchBuild),lpszModule); StringCchCopy(PathFindFileName(tchBuild),COUNTOF(tchBuild),tchFileExpanded); @@ -7986,7 +7987,7 @@ int CreateIniFileEx(LPCWSTR lpszIniFile) if (GetFileSize(hFile,NULL) == 0) { DWORD dw; WriteFile(hFile,(LPCVOID)L"\xFEFF[Notepad3]\r\n",26,&dw,NULL); - g_bIniFileFromScratch = true; + Globals.bIniFileFromScratch = true; } CloseHandle(hFile); return(1); @@ -8078,7 +8079,7 @@ static void _UpdateToolbarDelayed() EnableTool(IDT_FILE_ADDTOFAV, StringCchLenW(Globals.CurrentFile, COUNTOF(Globals.CurrentFile))); EnableTool(IDT_FILE_SAVE, (IsDocumentModified || Encoding_HasChanged(CPI_GET)) /*&& !bReadOnly*/); CheckTool(IDT_VIEW_WORDWRAP, Settings.WordWrap); - CheckTool(IDT_VIEW_CHASING_DOCTAIL, g_bChasingDocTail); + CheckTool(IDT_VIEW_CHASING_DOCTAIL, Globals.bChasingDocTail); bool b1 = SciCall_IsSelectionEmpty(); bool b2 = (bool)(SciCall_GetTextLength() > 0); @@ -8101,7 +8102,7 @@ static void _UpdateToolbarDelayed() EnableTool(IDT_EDIT_COPY, !b1 && !ro); EnableTool(IDT_EDIT_CLEAR, !b1 && !ro); - EnableTool(IDT_VIEW_TOGGLEFOLDS, b2 && (g_bCodeFoldingAvailable && Settings.ShowCodeFolding)); + EnableTool(IDT_VIEW_TOGGLEFOLDS, b2 && (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); EnableTool(IDT_VIEW_TOGGLE_VIEW, b2 && ((Settings.MarkOccurrences > 0) && !Settings.MarkOccurrencesMatchVisible)); CheckTool(IDT_VIEW_TOGGLE_VIEW, tv); @@ -8314,18 +8315,11 @@ void UpdateStatusbar(bool bForceRedraw) const static WCHAR* FR_Status[] = { L"[>--<]", L"[>>--]", L"[>>-+]", L"[+->]>", L"[--<<]", L"[+-<<]", L"<[<-+]"}; -FR_STATES g_FindReplaceMatchFoundState = FND_NOP; - static void _UpdateStatusbarDelayed(bool bForceRedraw) { if (!Settings.ShowStatusbar) { return; } - bool bIsUpdateNeeded = bForceRedraw; - static sectionTxt_t tchStatusBar[STATUS_SECTOR_COUNT]; - static WCHAR tchFRStatus[128] = { L'\0' }; - static WCHAR tchTmp[32] = { L'\0' }; - // ------------------------------------------------------ // common calculations @@ -8337,19 +8331,21 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) DocPos const iSelStart = SciCall_GetSelectionStart(); DocPos const iSelEnd = SciCall_GetSelectionEnd(); - bool const bIsSelectionEmpty = SciCall_IsSelectionEmpty(); bool const bIsSelCountable = !(bIsSelectionEmpty || SciCall_IsSelectionRectangle()); - // ------------------------------------------------------ + bool bIsUpdateNeeded = bForceRedraw; static WCHAR tchLn[32] = { L'\0' }; - static DocLn s_iLnFromPos = -1; static WCHAR tchLines[32] = { L'\0' }; - static DocLn s_iLnCnt = -1; + + // ------------------------------------------------------ if (s_iStatusbarVisible[STATUS_DOCLINE] || Globals.hwndDlgFindReplace) { + static DocLn s_iLnFromPos = -1; + static DocLn s_iLnCnt = -1; + if (s_iLnFromPos != iLnFromPos) { StringCchPrintf(tchLn, COUNTOF(tchLn), DOCPOSFMTW, iLnFromPos + 1); FormatNumberStr(tchLn); @@ -8373,11 +8369,10 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) // ------------------------------------------------------ static WCHAR tchCol[32] = { L'\0' }; - static WCHAR tchCols[32] = { L'\0' }; if (s_iStatusbarVisible[STATUS_DOCCOLUMN] || Globals.hwndDlgFindReplace) { - DocPos const colOffset = g_bZeroBasedColumnIndex ? 0 : 1; + DocPos const colOffset = Globals.bZeroBasedColumnIndex ? 0 : 1; static DocPos s_iCol = -1; DocPos const iCol = SciCall_GetColumn(iPos) + SciCall_GetSelectionNCaretVirtualSpace(0); @@ -8387,6 +8382,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } static DocPos s_iCols = -1; + static WCHAR tchCols[32] = { L'\0' }; DocPos const iCols = SciCall_GetColumn(iLineBack); if (s_iCols != iCols) { StringCchPrintf(tchCols, COUNTOF(tchCols), DOCPOSFMTW, iCols); @@ -8404,14 +8400,13 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static WCHAR tchChr[32] = { L'\0' }; - static WCHAR tchChrs[32] = { L'\0' }; - if (s_iStatusbarVisible[STATUS_DOCCHAR]) { - DocPos const chrOffset = g_bZeroBasedCharacterCount ? 0 : 1; - + static WCHAR tchChr[32] = { L'\0' }; + static WCHAR tchChrs[32] = { L'\0' }; static DocPos s_iChr = -1; + DocPos const chrOffset = Globals.bZeroBasedCharacterCount ? 0 : 1; + DocPos const iChr = SciCall_CountCharacters(iLineBegin, iPos); if (s_iChr != iChr) { StringCchPrintf(tchChr, COUNTOF(tchChr), DOCPOSFMTW, iChr + chrOffset); @@ -8436,17 +8431,18 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - // number of selected chars in statusbar static WCHAR tchSel[32] = { L'\0' }; - static WCHAR tchSelB[64] = { L'\0' }; - static bool s_bIsSelCountable = false; - static DocPos s_iSelStart = -1; - static DocPos s_iSelEnd = -1; + // number of selected chars in statusbar if (s_iStatusbarVisible[STATUS_SELECTION] || s_iStatusbarVisible[STATUS_SELCTBYTES] || Globals.hwndDlgFindReplace) { - if ((s_bIsSelCountable != bIsSelCountable) || (s_iSelStart != iSelStart) || (s_iSelEnd != iSelEnd)) { + static bool s_bIsSelCountable = false; + static DocPos s_iSelStart = -1; + static DocPos s_iSelEnd = -1; + if ((s_bIsSelCountable != bIsSelCountable) || (s_iSelStart != iSelStart) || (s_iSelEnd != iSelEnd)) + { + static WCHAR tchSelB[64] = { L'\0' }; if (bIsSelCountable) { const DocPos iSel = (DocPos)SendMessage(Globals.hwndEdit, SCI_COUNTCHARACTERS, iSelStart, iSelEnd); @@ -8473,12 +8469,11 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) // ------------------------------------------------------ // number of selected lines in statusbar - static WCHAR tchLinesSelected[32] = { L'\0' }; - static bool s_bIsSelectionEmpty = true; - static DocLn s_iLinesSelected = -1; - if (s_iStatusbarVisible[STATUS_SELCTLINES]) { + static bool s_bIsSelectionEmpty = true; + static DocLn s_iLinesSelected = -1; + DocLn const iLineStart = SciCall_LineFromPosition(iSelStart); DocLn const iLineEnd = SciCall_LineFromPosition(iSelEnd); DocPos const iStartOfLinePos = SciCall_PositionFromLine(iLineEnd); @@ -8487,6 +8482,7 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) if ((s_bIsSelectionEmpty != bIsSelectionEmpty) || (s_iLinesSelected != iLinesSelected)) { + static WCHAR tchLinesSelected[32] = { L'\0' }; if (bIsSelectionEmpty) { tchLinesSelected[0] = L'-'; tchLinesSelected[1] = L'-'; @@ -8507,11 +8503,10 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) // ------------------------------------------------------ // try calculate expression of selection - static WCHAR tchExpression[32] = { L'\0' }; - static int s_iExErr = -3; - if (s_iStatusbarVisible[STATUS_TINYEXPR]) { + static WCHAR tchExpression[32] = { L'\0' }; + static int s_iExErr = -3; s_dExpression = 0.0; tchExpression[0] = L'-'; tchExpression[1] = L'-'; @@ -8564,24 +8559,25 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - // number of occurrence marks found static WCHAR tchOcc[32] = { L'\0' }; - static int s_iMarkOccurrencesCount = -111; - static bool s_bMOVisible = false; + // number of occurrence marks found if (s_iStatusbarVisible[STATUS_OCCURRENCE] || Globals.hwndDlgFindReplace) { - if ((s_bMOVisible != Settings.MarkOccurrencesMatchVisible) || (s_iMarkOccurrencesCount != g_iMarkOccurrencesCount)) + static int s_iMarkOccurrencesCount = -111; + static bool s_bMOVisible = false; + if ((s_bMOVisible != Settings.MarkOccurrencesMatchVisible) || (s_iMarkOccurrencesCount != Globals.iMarkOccurrencesCount)) { - if ((g_iMarkOccurrencesCount >= 0) && !Settings.MarkOccurrencesMatchVisible) + if ((Globals.iMarkOccurrencesCount >= 0) && !Settings.MarkOccurrencesMatchVisible) { - if ((Settings2.MarkOccurrencesMaxCount < 0) || (g_iMarkOccurrencesCount < Settings2.MarkOccurrencesMaxCount)) + if ((Settings2.MarkOccurrencesMaxCount < 0) || (Globals.iMarkOccurrencesCount < Settings2.MarkOccurrencesMaxCount)) { - StringCchPrintf(tchOcc, COUNTOF(tchOcc), L"%i", g_iMarkOccurrencesCount); + StringCchPrintf(tchOcc, COUNTOF(tchOcc), L"%i", Globals.iMarkOccurrencesCount); FormatNumberStr(tchOcc); } else { - StringCchPrintf(tchTmp, COUNTOF(tchTmp), L"%i", g_iMarkOccurrencesCount); + static WCHAR tchTmp[32] = { L'\0' }; + StringCchPrintf(tchTmp, COUNTOF(tchTmp), L"%i", Globals.iMarkOccurrencesCount); FormatNumberStr(tchTmp); StringCchPrintf(tchOcc, COUNTOF(tchOcc), L">= %s", tchTmp); } @@ -8594,23 +8590,23 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) s_mxSBPrefix[STATUS_OCCURRENCE], tchOcc, s_mxSBPostfix[STATUS_OCCURRENCE]); s_bMOVisible = Settings.MarkOccurrencesMatchVisible; - s_iMarkOccurrencesCount = g_iMarkOccurrencesCount; + s_iMarkOccurrencesCount = Globals.iMarkOccurrencesCount; bIsUpdateNeeded = true; } } // ------------------------------------------------------ // number of replaced pattern - static WCHAR tchRepl[32] = { L'\0' }; - static int s_iReplacedOccurrences = -1; - if (s_iStatusbarVisible[STATUS_OCCREPLACE] || Globals.hwndDlgFindReplace) { - if (s_iReplacedOccurrences != g_iReplacedOccurrences) + static int s_iReplacedOccurrences = -1; + + if (s_iReplacedOccurrences != Globals.iReplacedOccurrences) { - if (g_iReplacedOccurrences > 0) + static WCHAR tchRepl[32] = { L'\0' }; + if (Globals.iReplacedOccurrences > 0) { - StringCchPrintf(tchRepl, COUNTOF(tchRepl), L"%i", g_iReplacedOccurrences); + StringCchPrintf(tchRepl, COUNTOF(tchRepl), L"%i", Globals.iReplacedOccurrences); FormatNumberStr(tchRepl); } else { @@ -8620,20 +8616,19 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) StringCchPrintf(tchStatusBar[STATUS_OCCREPLACE], txtWidth, L"%s%s%s", s_mxSBPrefix[STATUS_OCCREPLACE], tchRepl, s_mxSBPostfix[STATUS_OCCREPLACE]); - s_iReplacedOccurrences = g_iReplacedOccurrences; + s_iReplacedOccurrences = Globals.iReplacedOccurrences; bIsUpdateNeeded = true; } } // ------------------------------------------------------ // get number of bytes in current encoding - static WCHAR tchBytes[32] = { L'\0' }; - static DocPos s_iTextLength = -1; - if (s_iStatusbarVisible[STATUS_DOCSIZE]) { + static DocPos s_iTextLength = -1; DocPos const iTextLength = SciCall_GetTextLength(); if (s_iTextLength != iTextLength) { + static WCHAR tchBytes[32] = { L'\0' }; StrFormatByteSize(iTextLength, tchBytes, COUNTOF(tchBytes)); StringCchPrintf(tchStatusBar[STATUS_DOCSIZE], txtWidth, L"%s%s%s", @@ -8645,10 +8640,9 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static int s_iEncoding = -1; - if (s_iStatusbarVisible[STATUS_CODEPAGE]) { + static int s_iEncoding = -1; int const iEncoding = Encoding_Current(CPI_GET); if (s_iEncoding != iEncoding) { Encoding_SetLabel(iEncoding); @@ -8662,10 +8656,9 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static int s_iEOLMode = -1; - if (s_iStatusbarVisible[STATUS_EOLMODE]) { + static int s_iEOLMode = -1; int const _eol_mode = SciCall_GetEOLMode(); if (s_iEOLMode != _eol_mode) @@ -8688,10 +8681,9 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static bool s_bIsOVR = -1; - if (s_iStatusbarVisible[STATUS_OVRMODE]) { + static bool s_bIsOVR = -1; bool const bIsOVR = (bool)SendMessage(Globals.hwndEdit, SCI_GETOVERTYPE, 0, 0); if (s_bIsOVR != bIsOVR) { if (bIsOVR) @@ -8709,10 +8701,9 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static bool s_bUse2ndDefault = -1; - if (s_iStatusbarVisible[STATUS_2ND_DEF]) { + static bool s_bUse2ndDefault = -1; bool const bUse2ndDefault = Style_GetUse2ndDefault(); if (s_bUse2ndDefault != bUse2ndDefault) { @@ -8729,15 +8720,13 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) } // ------------------------------------------------------ - static int s_iCurLexer = -1; - static WCHAR tchLexerName[MINI_BUFFER]; - if (s_iStatusbarVisible[STATUS_LEXER]) { - + static int s_iCurLexer = -1; int const iCurLexer = Style_GetCurrentLexerRID(); if (s_iCurLexer != iCurLexer) { + static WCHAR tchLexerName[MINI_BUFFER]; if (Style_IsCurLexerStandard()) Style_GetLexerDisplayName(NULL, tchLexerName, MINI_BUFFER); // don't distinguish between STD/2ND else @@ -8788,22 +8777,23 @@ static void _UpdateStatusbarDelayed(bool bForceRedraw) // -------------------------------------------------------------------------- // update Find/Replace dialog (if any) - static WCHAR tchReplOccs[32] = { L'\0' }; if (Globals.hwndDlgFindReplace) { - if (g_iReplacedOccurrences > 0) - StringCchPrintf(tchReplOccs, COUNTOF(tchReplOccs), L"%i", g_iReplacedOccurrences); + static WCHAR tchReplOccs[32] = { L'\0' }; + if (Globals.iReplacedOccurrences > 0) + StringCchPrintf(tchReplOccs, COUNTOF(tchReplOccs), L"%i", Globals.iReplacedOccurrences); else StringCchCopy(tchReplOccs, COUNTOF(tchReplOccs), L"--"); const WCHAR* SBFMT = L" %s%s / %s %s%s %s%s %s%s %s%s ( %s ) "; + static WCHAR tchFRStatus[128] = { L'\0' }; StringCchPrintf(tchFRStatus, COUNTOF(tchFRStatus), SBFMT, s_mxSBPrefix[STATUS_DOCLINE], tchLn, tchLines, s_mxSBPrefix[STATUS_DOCCOLUMN], tchCol, s_mxSBPrefix[STATUS_SELECTION], tchSel, s_mxSBPrefix[STATUS_OCCURRENCE], tchOcc, s_mxSBPrefix[STATUS_OCCREPLACE], tchReplOccs, - FR_Status[g_FindReplaceMatchFoundState]); + FR_Status[Globals.FindReplaceMatchFoundState]); SetWindowText(GetDlgItem(Globals.hwndDlgFindReplace, IDS_FR_STATUS_TEXT), tchFRStatus); } @@ -8834,7 +8824,7 @@ void UpdateMarginWidth() SciCall_SetMarginWidthN(MARGIN_SCI_LINENUM, 0); } - Style_SetFolding(Globals.hwndEdit, (g_bCodeFoldingAvailable && Settings.ShowCodeFolding)); + Style_SetFolding(Globals.hwndEdit, (Globals.bCodeFoldingAvailable && Settings.ShowCodeFolding)); Style_SetBookmark(Globals.hwndEdit, Settings.ShowSelectionMargin); } @@ -9153,9 +9143,7 @@ static int _UndoRedoActionMap(int token, UndoRedoSelection_t* selection) // // bool FileIO(bool fLoad,LPWSTR pszFileName,bool bSkipUnicodeDetect,bool bSkipANSICPDetection, - int *ienc,int *ieol, - bool *pbUnicodeErr,bool *pbFileTooBig, bool* pbUnknownExt, - bool *pbCancelDataLoss,bool bSaveCopy) + EditFileIOStatus* status, bool bSaveCopy) { WCHAR tch[MAX_PATH+40]; bool fSuccess; @@ -9166,12 +9154,12 @@ bool FileIO(bool fLoad,LPWSTR pszFileName,bool bSkipUnicodeDetect,bool bSkipANSI BeginWaitCursor(tch); if (fLoad) { - fSuccess = EditLoadFile(Globals.hwndEdit,pszFileName,bSkipUnicodeDetect,bSkipANSICPDetection,ienc,ieol,pbUnicodeErr,pbFileTooBig,pbUnknownExt); + fSuccess = EditLoadFile(Globals.hwndEdit,pszFileName,bSkipUnicodeDetect,bSkipANSICPDetection,status); } else { int idx; if (MRU_FindFile(Globals.pFileMRU,pszFileName,&idx)) { - Globals.pFileMRU->iEncoding[idx] = *ienc; + Globals.pFileMRU->iEncoding[idx] = status->iEncoding; Globals.pFileMRU->iCaretPos[idx] = (Settings.PreserveCaretPos ? SciCall_GetCurrentPos() : 0); WCHAR wchBookMarks[MRU_BMRK_SIZE] = { L'\0' }; EditGetBookmarkList(Globals.hwndEdit, wchBookMarks, COUNTOF(wchBookMarks)); @@ -9179,7 +9167,7 @@ bool FileIO(bool fLoad,LPWSTR pszFileName,bool bSkipUnicodeDetect,bool bSkipANSI LocalFree(Globals.pFileMRU->pszBookMarks[idx]); // StrDup() Globals.pFileMRU->pszBookMarks[idx] = StrDup(wchBookMarks); } - fSuccess = EditSaveFile(Globals.hwndEdit,pszFileName,*ienc,pbCancelDataLoss,bSaveCopy); + fSuccess = EditSaveFile(Globals.hwndEdit,pszFileName, status, bSaveCopy); } dwFileAttributes = GetFileAttributes(pszFileName); @@ -9190,6 +9178,36 @@ bool FileIO(bool fLoad,LPWSTR pszFileName,bool bSkipUnicodeDetect,bool bSkipANSI return(fSuccess); } +//============================================================================= +// +// _WarnInconsistentIndentation() +// +static void _WarnInconsistentIndentation(const EditFileIOStatus* const status) +{ + if (((status->indentCount[0] > 0) && (status->indentCount[1] > 0)) + //|| (Settings.TabsAsSpaces && (tabCount > 0)) // existing tabs, should be replaced by spaces + //|| (!Settings.TabsAsSpaces && (spaceCount > 0)) // indent space, should be populated with tabs + ) { + WCHAR szDefault[32]; + WCHAR szStatistic[80]; + StringCchPrintf(szDefault, COUNTOF(szDefault), L"%s(%i)", + (Settings.TabsAsSpaces ? L"BLANK" : L"TABULATOR"), (Settings.TabsAsSpaces ? Settings.IndentWidth : Settings.TabWidth)); + StringCchPrintf(szStatistic, COUNTOF(szStatistic), L" # TABULATOR(%i) = %i\n # BLANK(%i) = %i\n", + Settings.TabWidth, status->indentCount[0], Settings.IndentWidth, status->indentCount[1]); + + int const res = MsgBoxLng(MBYESNOWARN, IDS_MUI_WARN_INCONS_INDENTS, szStatistic, szDefault); + + if (res == IDYES) { + BeginWaitCursor(NULL); + _BEGIN_UNDO_ACTION_; + EditIndentBlock(Globals.hwndEdit, SCI_TAB, true, true); + EditIndentBlock(Globals.hwndEdit, SCI_BACKTAB, true, true); + _END_UNDO_ACTION_; + EndWaitCursor(); + } + } +} + //============================================================================= // @@ -9200,11 +9218,11 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, { WCHAR tch[MAX_PATH] = { L'\0' }; WCHAR szFileName[MAX_PATH] = { L'\0' }; - bool bUnicodeErr = false; - bool bFileTooBig = false; - bool bUnknownExt = false; - bool fSuccess; - int fileEncoding = CPI_ANSI_DEFAULT; + bool fSuccess = false; + + EditFileIOStatus fioStatus = INIT_FILEIO_STATUS; + fioStatus.iEOLMode = Settings.DefaultEOLMode; + fioStatus.iEncoding = CPI_ANSI_DEFAULT; if (bNew || bReload) { if (EditToggleView(Globals.hwndEdit, false)) { @@ -9225,7 +9243,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, SetDlgItemText(Globals.hwndMain,IDC_FILENAME,Globals.CurrentFile); SetDlgItemInt(Globals.hwndMain,IDC_REUSELOCK,GetTickCount(),false); if (!s_fKeepTitleExcerpt) { StringCchCopy(s_wchTitleExcerpt, COUNTOF(s_wchTitleExcerpt), L""); } - FileVars_Init(NULL,0,&g_fvCurFile); + FileVars_Init(NULL,0,&Globals.fvCurFile); EditSetNewText(Globals.hwndEdit, "", 0); SciCall_SetEOLMode(Settings.DefaultEOLMode); @@ -9244,7 +9262,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, // Terminate file watching if (Settings.ResetFileWatching) { - if (g_bChasingDocTail) { + if (Globals.bChasingDocTail) { SendMessage(Globals.hwndMain, WM_COMMAND, MAKELONG(IDM_VIEW_CHASING_DOCTAIL, 1), 0); } Settings.FileWatchingMode = 0; @@ -9291,8 +9309,6 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, } // Ask to create a new file... - int _eol_mode = Settings.DefaultEOLMode; - if (!bReload && !PathFileExists(szFileName)) { if (s_flagQuietCreate || MsgBoxLng(MBYESNO,IDS_MUI_ASK_CREATE,szFileName) == IDYES) { @@ -9302,14 +9318,14 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, Globals.dwLastError = GetLastError(); fSuccess = (hFile != INVALID_HANDLE_VALUE); if (fSuccess) { - FileVars_Init(NULL,0,&g_fvCurFile); + FileVars_Init(NULL,0,&Globals.fvCurFile); EditSetNewText(Globals.hwndEdit,"",0); Style_SetDefaultLexer(Globals.hwndEdit); SciCall_SetEOLMode(Settings.DefaultEOLMode); if (Encoding_SrcCmdLn(CPI_GET) != CPI_NONE) { - fileEncoding = Encoding_SrcCmdLn(CPI_GET); - Encoding_Current(fileEncoding); - Encoding_HasChanged(fileEncoding); + fioStatus.iEncoding = Encoding_SrcCmdLn(CPI_GET); + Encoding_Current(fioStatus.iEncoding); + Encoding_HasChanged(fioStatus.iEncoding); } else { Encoding_Current(Settings.DefaultEncoding); @@ -9328,14 +9344,14 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, else { int idx; if (!bReload && MRU_FindFile(Globals.pFileMRU,szFileName,&idx)) { - fileEncoding = Globals.pFileMRU->iEncoding[idx]; - if (fileEncoding > 0) - Encoding_SrcCmdLn(Encoding_MapUnicode(fileEncoding)); + fioStatus.iEncoding = Globals.pFileMRU->iEncoding[idx]; + if (fioStatus.iEncoding > 0) + Encoding_SrcCmdLn(Encoding_MapUnicode(fioStatus.iEncoding)); } else - fileEncoding = Encoding_Current(CPI_GET); + fioStatus.iEncoding = Encoding_Current(CPI_GET); - fSuccess = FileIO(true,szFileName,bSkipUnicodeDetect,bSkipANSICPDetection,&fileEncoding,&_eol_mode,&bUnicodeErr,&bFileTooBig,&bUnknownExt,NULL,false); + fSuccess = FileIO(true,szFileName,bSkipUnicodeDetect,bSkipANSICPDetection,&fioStatus,false); } if (fSuccess) { StringCchCopy(Globals.CurrentFile,COUNTOF(Globals.CurrentFile),szFileName); @@ -9348,9 +9364,10 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, if (!s_flagLexerSpecified) // flag will be cleared Style_SetLexerFromFile(Globals.hwndEdit,Globals.CurrentFile); - SciCall_SetEOLMode(_eol_mode); - Encoding_Current(fileEncoding); // load may change encoding - Encoding_HasChanged(fileEncoding); + SciCall_SetEOLMode(fioStatus.iEOLMode); + Encoding_Current(fioStatus.iEncoding); // load may change encoding + Encoding_HasChanged(fioStatus.iEncoding); + int idx = 0; DocPos iCaretPos = 0; LPCWSTR pszBookMarks = L""; @@ -9358,7 +9375,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, iCaretPos = Globals.pFileMRU->iCaretPos[idx]; pszBookMarks = Globals.pFileMRU->pszBookMarks[idx]; } - MRU_AddFile(Globals.pFileMRU,szFileName,Flags.RelativeFileMRU,Flags.PortableMyDocs,fileEncoding,iCaretPos,pszBookMarks); + MRU_AddFile(Globals.pFileMRU,szFileName,Flags.RelativeFileMRU,Flags.PortableMyDocs,fioStatus.iEncoding,iCaretPos,pszBookMarks); EditSetBookmarkList(Globals.hwndEdit, pszBookMarks); SetFindPattern((Globals.pMRUfind ? Globals.pMRUfind->pszItems[0] : L"")); @@ -9368,7 +9385,7 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, // Install watching of the current file if (!bReload && Settings.ResetFileWatching) { - if (g_bChasingDocTail) { + if (Globals.bChasingDocTail) { SendMessage(Globals.hwndMain, WM_COMMAND, MAKELONG(IDM_VIEW_CHASING_DOCTAIL, 1), 0); } Settings.FileWatchingMode = 0; @@ -9412,13 +9429,36 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload, bool bSkipUnicodeDetect, UpdateSettingsCmds(); // Show warning: Unicode file loaded as ANSI - if (bUnicodeErr) - MsgBoxLng(MBWARN,IDS_MUI_ERR_UNICODE); + if (fioStatus.bUnicodeErr) { + MsgBoxLng(MBWARN, IDS_MUI_ERR_UNICODE); + } + + // Show inconsistent line endings warning + if (fioStatus.bInconsistentEOLs && Settings.WarnInconsistEOLs) + { + WCHAR szDefault[32]; + WCHAR szStatistic[80]; + int const eolm = SciCall_GetEOLMode(); //Settings.DefaultEOLMode; + StringCchPrintf(szDefault, COUNTOF(szDefault), L"%s", + ((eolm == SC_EOL_CRLF) ? L"CRLF (\\r\\n)" : ((eolm == SC_EOL_CR) ? L"CR (\\r)" : L"LF (\\n)"))); + StringCchPrintf(szStatistic, COUNTOF(szStatistic), L" #CRLF = %i\n #CR = %i\n #LF = %i\n", + fioStatus.eolCount[SC_EOL_CRLF], fioStatus.eolCount[SC_EOL_CR], fioStatus.eolCount[SC_EOL_LF]); + int const res = MsgBoxLng(MBYESNOWARN, IDS_MUI_WARN_INCONSIST_EOLS, szStatistic, szDefault); + if (res == IDYES) { + SciCall_ConvertEOLs(eolm); + } + } + + if (Settings.WarnInconsistentIndents && !Style_IsCurLexerStandard()) { + EditCheckIndentationConsistency(Globals.hwndEdit, &fioStatus); + _WarnInconsistentIndentation(&fioStatus); + // TODO: Set correct Indent mode / verify settings vs. file majority + } + + } + else if (!(fioStatus.bFileTooBig || fioStatus.bUnknownExt)) { + MsgBoxLng(MBWARN, IDS_MUI_ERR_LOADFILE, szFileName); } - - else if (!(bFileTooBig || bUnknownExt)) - MsgBoxLng(MBWARN,IDS_MUI_ERR_LOADFILE,szFileName); - return(fSuccess); } @@ -9490,7 +9530,10 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) WCHAR tchFile[MAX_PATH] = { L'\0' }; WCHAR tchBase[MAX_PATH] = { L'\0' }; bool fSuccess = false; - bool bCancelDataLoss = false; + + EditFileIOStatus fioStatus = INIT_FILEIO_STATUS; + fioStatus.iEncoding = Encoding_Current(CPI_GET); + fioStatus.iEOLMode = SciCall_GetEOLMode(); bool bIsEmptyNewFile = false; if (StringCchLenW(Globals.CurrentFile,COUNTOF(Globals.CurrentFile)) == 0) { @@ -9567,10 +9610,8 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) if (SaveFileDlg(Globals.hwndMain,tchFile,COUNTOF(tchFile),tchInitialDir)) { - int fileEncoding = Encoding_Current(CPI_GET); - int _eol_mode = Settings.DefaultEOLMode; - fSuccess = FileIO(false, tchFile, false, true, &fileEncoding, &_eol_mode, NULL, NULL, NULL, &bCancelDataLoss, bSaveCopy); - //~if (fSuccess) Encoding_Current(fileEncoding); // save should not change encoding + fSuccess = FileIO(false, tchFile, false, true, &fioStatus, bSaveCopy); + //~if (fSuccess) Encoding_Current(fioStatus.iEncoding); // save should not change encoding if (fSuccess) { if (!bSaveCopy) @@ -9592,10 +9633,8 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) return false; } else { - int fileEncoding = Encoding_Current(CPI_GET); - int _eol_mode = Settings.DefaultEOLMode; - fSuccess = FileIO(false, Globals.CurrentFile, false, true, &fileEncoding, &_eol_mode, NULL, NULL, NULL, &bCancelDataLoss, false); - //~if (fSuccess) Encoding_Current(fileEncoding); // save should not change encoding + fSuccess = FileIO(false, Globals.CurrentFile, false, true, &fioStatus, false); + //~if (fSuccess) Encoding_Current(fioStatus.iEncoding); // save should not change encoding } if (fSuccess) @@ -9615,7 +9654,7 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) // Install watching of the current file if (bSaveAs && Settings.ResetFileWatching) { - if (g_bChasingDocTail) { + if (Globals.bChasingDocTail) { SendMessage(Globals.hwndMain, WM_COMMAND, MAKELONG(IDM_VIEW_CHASING_DOCTAIL, 1), 0); } Settings.FileWatchingMode = 0; @@ -9623,7 +9662,7 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) InstallFileWatching(Globals.CurrentFile); } } - else if (!bCancelDataLoss) + else if (!fioStatus.bCancelDataLoss) { if (StringCchLenW(Globals.CurrentFile,COUNTOF(Globals.CurrentFile)) > 0) { StringCchCopy(tchFile,COUNTOF(tchFile),Globals.CurrentFile); @@ -9637,10 +9676,8 @@ bool FileSave(bool bSaveAlways,bool bAsk,bool bSaveAs,bool bSaveCopy) if (GetTempPath(MAX_PATH,lpTempPathBuffer) && GetTempFileName(lpTempPathBuffer,TEXT("NP3"),0,szTempFileName)) { - int _eol_mode = Settings.DefaultEOLMode; - int fileEncoding = Encoding_Current(CPI_GET); - if (FileIO(false,szTempFileName,false,true,&fileEncoding,&_eol_mode,NULL,NULL,NULL,&bCancelDataLoss,true)) { - //~Encoding_Current(fileEncoding); // save should not change encoding + if (FileIO(false,szTempFileName,false,true,&fioStatus,true)) { + //~Encoding_Current(fioStatus.iEncoding); // save should not change encoding WCHAR szArguments[2048] = { L'\0' }; LPWSTR lpCmdLine = GetCommandLine(); size_t const wlen = StringCchLenW(lpCmdLine,0) + 2; @@ -10258,24 +10295,22 @@ void ShowNotifyIcon(HWND hwnd,bool bAdd) // void SetNotifyIconTitle(HWND hwnd) { - NOTIFYICONDATA nid; - SHFILEINFO shfi; - WCHAR tchTitle[256] = { L'\0' }; - WCHAR tchFormat[32] = { L'\0' }; - ZeroMemory(&nid,sizeof(NOTIFYICONDATA)); nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hwnd; nid.uID = 0; nid.uFlags = NIF_TIP; + WCHAR tchTitle[256] = { L'\0' }; if (StringCchLenW(s_wchTitleExcerpt,COUNTOF(s_wchTitleExcerpt))) { + WCHAR tchFormat[32] = { L'\0' }; GetLngString(IDS_MUI_TITLEEXCERPT,tchFormat,COUNTOF(tchFormat)); StringCchPrintf(tchTitle,COUNTOF(tchTitle),tchFormat,s_wchTitleExcerpt); } else if (StringCchLenW(Globals.CurrentFile,COUNTOF(Globals.CurrentFile))) { + SHFILEINFO shfi; SHGetFileInfo2(Globals.CurrentFile,FILE_ATTRIBUTE_NORMAL, &shfi,sizeof(SHFILEINFO),SHGFI_DISPLAYNAME | SHGFI_USEFILEATTRIBUTES); PathCompactPathEx(tchTitle,shfi.szDisplayName,COUNTOF(tchTitle)-4,0); @@ -10301,10 +10336,6 @@ void SetNotifyIconTitle(HWND hwnd) // void InstallFileWatching(LPCWSTR lpszFile) { - - WCHAR tchDirectory[MAX_PATH] = { L'\0' }; - HANDLE hFind; - // Terminate if (!Settings.FileWatchingMode || !lpszFile || StringCchLen(lpszFile,MAX_PATH) == 0) { @@ -10334,11 +10365,12 @@ void InstallFileWatching(LPCWSTR lpszFile) else SetTimer(NULL,ID_WATCHTIMER,Settings2.FileCheckInverval,WatchTimerProc); + WCHAR tchDirectory[MAX_PATH] = { L'\0' }; StringCchCopy(tchDirectory,COUNTOF(tchDirectory),lpszFile); PathRemoveFileSpec(tchDirectory); // Save data of current file - hFind = FindFirstFile(Globals.CurrentFile,&s_fdCurFile); + HANDLE hFind = FindFirstFile(Globals.CurrentFile,&s_fdCurFile); if (hFind != INVALID_HANDLE_VALUE) FindClose(hFind); else