diff --git a/Build/Changes.txt b/Build/Changes.txt index 6fd182f81..d06bf3b06 100644 --- a/Build/Changes.txt +++ b/Build/Changes.txt @@ -30,12 +30,13 @@ UCD - (UCD)ARDET is an Encoding Detector Library ================================================== -Current Version 5.19.717.build (17 July 2019) +Current Version 5.19.720.build (20 July 2019) ================================================== -------------------------------------------------- NEW: -------------------------------------------------- +- Add Web Template Action to context menu - Advanced TOML Lexer - Multiselect Edit Indicator - Color hover and picker (HTML color def only #RRGGBB) @@ -43,11 +44,11 @@ NEW: -------------------------------------------------- CHANGES: -------------------------------------------------- +- Keep .ini backward compatibility for moved "Text Files" lexer (from "Default Text") - Update to Oniguruma v.6.9.3 - Scintilla Library (SCI) version 4.2.0 (2019-Jul-5) - To force UTF-8 as preffered encoding: activate encoding detection failure fallback for default encoding - Allow Fixedsys font for GDI rendering -- For new "Text File" scheme: use regular Segoe UI font - Support Compiler version (VC v1921) 192127702 - VS2019 v16.1.(0-6) - Color MarkOccurrences refactoring: use System's HighLight color as default (alpha:60) - Oniguruma: support static build @@ -67,6 +68,7 @@ ENHANCEMENT: -------------------------------------------------- FIXES: -------------------------------------------------- +- Use string begin/end terminator for most recent lists - Oniguruma allow CRLF as newline token - Notepad3.ini file, remove some keys with default values (styles) - Extended encoding detection debug information diff --git a/test/test_files/encoding/Txtfiles/Del USB drive System... - UCD=ANSI (see issue #1121).bat b/test/test_files/encoding/Txtfiles/Del USB drive System... - UCD=ANSI (see issue #1121).bat new file mode 100644 index 000000000..ee976e444 --- /dev/null +++ b/test/test_files/encoding/Txtfiles/Del USB drive System... - UCD=ANSI (see issue #1121).bat @@ -0,0 +1,11 @@ +@echo off +exit +echo 输入u盘目录 +set /p DriveU= +echo on +attrib "%DriveU%:\System Volume Information" -s +rd /s /q "%DriveU%:\System Volume Information" +del /f /q /A:RH "%DriveU%:\System Volume Information" +echo. >"%DriveU%:\System Volume Information" +attrib "%DriveU%:\System Volume Information" +R +H +pause diff --git a/test/test_files/encoding/Txtfiles/clean windos tray - UCD=GB18030 (see issue #1121).bat b/test/test_files/encoding/Txtfiles/clean windos tray - UCD=GB18030 (see issue #1121).bat new file mode 100644 index 000000000..a24defac9 --- /dev/null +++ b/test/test_files/encoding/Txtfiles/clean windos tray - UCD=GB18030 (see issue #1121).bat @@ -0,0 +1,62 @@ +@ ECHO OFF +exit +SET PROG=清理系统通知区域 (XP/WIN7/VISTA) +COLOR 1F +@ ECHO. +@ ECHO. 说 明 +@ ECHO. +@ ECHO -------------------------------------------------------------------------------- +@ ECHO. +@ ECHO. WINDOWS 系统能在通知区域自动隐藏不活动的图标,这是个非常实用的功能。但是日积 +@ ECHO.月累之下,通知区域的图标越来越多,有的是很久之前的图标,甚至该软件已经卸载,图标 +@ ECHO.的增多带来了臃肿,此批处理文件能帮你清理掉通知区域的历史图标。但此方法操作会清除 +@ ECHO.你对图标进行的任何设置。 +@ ECHO. +@ ECHO -------------------------------------------------------------------------------- +TITLE %PROG% +PAUSE +CLS +@ ECHO. +@ ECHO. ☆☆☆ 第一步:清理通知区域在注册表内的相关子项 ☆☆☆ +@ ECHO. +@ ECHO. +ECHO     ║   [1] WINDOWS XP     ║ +ECHO     ║   [2] WINDOWS 7 / VISTA  ║ +@ ECHO. +@ ECHO. +SET /P CHOICE=   请选择你当前的操作系统版本 (1/2) ,然后按回车键执行: +IF /I '%CHOICE%'=='1' GOTO WINXP +IF /I '%CHOICE%'=='2' GOTO WIN7 +:WINXP +REG DELETE "HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\TRAYNOTIFY" /V ICONSTREAMS /F +REG DELETE "HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\EXPLORER\TRAYNOTIFY" /V PASTICONSSTREAM /F +PAUSE +GOTO SUCCESS +:WIN7 +REG DELETE "HKEY_CLASSES_ROOT\LOCAL SETTINGS\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\TRAYNOTIFY" /V ICONSTREAMS /F +REG DELETE "HKEY_CLASSES_ROOT\LOCAL SETTINGS\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\TRAYNOTIFY" /V PASTICONSSTREAM /F +PAUSE +GOTO SUCCESS +:SUCCESS +CLS +@ ECHO. +@ ECHO. ☆☆☆ 第二步:重启EXPLORER进程 ☆☆☆ +@ ECHO. +@ ECHO. 警告:执行此命令,以完成清理通知区域的整个过程。为了安全起见,执行前请保存当 +@ ECHO.前正在编辑的文件或文档,然后选择第 1 项继续。如果你不想执行此步,请选择第 2 项 +@ ECHO.退出,清理任务在下次启动计算机后生效。 +@ ECHO. +@ ECHO. +ECHO     ║   [1] 重启EXPLORER进程    ║ +ECHO     ║   [2] 退出程序  ║ +@ ECHO. +@ ECHO. +SET /P CHOICE=   请选择要进行的操作 (1/2) ,然后按回车键执行: +IF /I '%CHOICE%'=='1' GOTO EXPLORER +IF /I '%CHOICE%'=='2' GOTO SUCCESS1 +:EXPLORER +TASKKILL /IM EXPLORER.EXE /F +START EXPLORER.EXE +GOTO SUCCESS1 +:SUCCESS1 +EXIT \ No newline at end of file diff --git a/test/test_files/extensions/AU3/Configure_NP3 (Craigo-).au3 b/test/test_files/extensions/AU3/Configure_NP3 (Craigo-).au3 new file mode 100644 index 000000000..ef96510a6 --- /dev/null +++ b/test/test_files/extensions/AU3/Configure_NP3 (Craigo-).au3 @@ -0,0 +1,612 @@ +#cs --------------------------------------------------- + + AutoIt Version: 3.3.14.5 + Author: Craig O'Brien + + Script Function: + Configure the supplied Notepad3 executable how I like it + Designed for Notepad3 5.19.709+ + Prerequisites: + - Cousine font + To Do: + - Cope with element repositioning caused by font scaling + +#ce --------------------------------------------------- + +autoitsetoption("MustDeclareVars", 1) ; must declare variables +autoitsetoption("WinTitleMatchMode", 2) ; window title: match anywhere +autoitsetoption("MouseCoordMode", 0) ; mouse coordinate mode: window +autoitsetoption("PixelCoordMode", 0) ; pixel coordinate mode: window + +If $CmdLine[0] <> 1 Then + MsgBox(0, "Error - Incorrect Arguments", "This script must be passed exactly one argument - the full path and filename to the Notepad3 executable to be configured. Check that this script has been passed an argument, and that if the argument includes spaces, that it is enclosed in quotes.", 10) + Exit(1) +EndIf + +Dim $PathToNotepad3 = $CmdLine[1] +Dim $WindowTitle = "Untitled - Notepad3" +Dim $WindowTitleShort = " - Notepad3" +Dim $DefaultWait = 250 +Dim $ToolTip_X +Dim $ToolTip_Y +Dim $WindowLeftEdge = (@DesktopWidth / 2) + 16 +Dim $WindowTopEdge = 90 +Dim $WindowWidth = (@DesktopWidth / 2) - 32 +Dim $WindowHeight = @DesktopHeight - 146 +Dim $Reply +Dim $Colour_MenuTickbox = 0x333333 +; Dim $Colour_ExitButtonHighDPIOff = 0x2244AD +Dim $Colour_ExitButtonHighDPIOn = 0x5B9FE2 +; Dim $Colour_HistoryButton = +Dim $CheckboxToggled + +; Launch Notepad3 +ToolTip("") +ToolTip("Launching Notepad3...", 800, 0) +ShellExecute($PathToNotepad3) +Sleep(1800) +ToolTip("") +ToolTip("Waiting for Notepad3 window...", 800, 0) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") + +; Position Window +ToolTip("") +ToolTip("Positioning application window...", 800, 0) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +WinMove($WindowTitle, "", $WindowLeftEdge, $WindowTopEdge, $WindowWidth, $WindowHeight, 3) + +; Set ToolTip coordinates relative to application window +$ToolTip_X = $WindowLeftEdge + 275 +$ToolTip_Y = $WindowTopEdge + +; This is a good place to do a coordinate check +; CheckCoords("!p", 120, 130, 134, 144) +; Exit + +; Enter some text so we can see what's going on +ToolTip("") +ToolTip("Entering some text...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("O0 1Il{ENTER}TMasgqlI|12345{+}6-7*8/9{^}0Oo'""$&?.,;:-(){{}{}}[]<>{ENTER}Illegal1 = O0{ENTER}") + +; FILE MENU + +; Default Encoding: UTF8 +ToolTip("") +ToolTip("Setting default encoding to UTF-8...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!f") +Sleep($DefaultWait) +Send("e") +Sleep($DefaultWait) +Send("{UP}") +Sleep($DefaultWait) +Send("{ENTER}") +Sleep($DefaultWait) +WinWait("Encoding", "Default Encoding") +WinActivate("Encoding", "Default Encoding") +ControlCommand("Encoding", "Default Encoding", "ComboBoxEx321", "SetCurrentSelection", 6) +Sleep($DefaultWait) +ControlClick("Encoding", "Default Encoding", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) + +; Page Margins: 10mm everywhere +ToolTip("") +ToolTip("Setting page margins to 10mm...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!f") +Sleep($DefaultWait) +Send("t") +Sleep($DefaultWait) +WinWait("Page Setup", "Margins (millimeters)") +WinActivate("Page Setup", "Margins (millimeters)") +While ControlGetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:1]") <> "10" + ControlSetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:1]", "10") + Sleep($DefaultWait) +WEnd +While ControlGetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:2]") <> "10" + ControlSetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:2]", "10") + Sleep($DefaultWait) +WEnd +While ControlGetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:3]") <> "10" + ControlSetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:3]", "10") + Sleep($DefaultWait) +WEnd +While ControlGetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:4]") <> "10" + ControlSetText("Page Setup", "Margins (millimeters)", "[CLASS:Edit; INSTANCE:4]", "10") + Sleep($DefaultWait) +WEnd +ControlClick("Page Setup", "Margins (millimeters)", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) + +; VIEW MENU + +; Word Wrap: enable +ToolTip("") +ToolTip("Checking Word Wrap is enabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While Not DisplayElementSet("!v", 80, 56, 94, 70, $Colour_MenuTickbox) + Send("^w") + Sleep($DefaultWait) +WEnd + +; Long Line Marker: disable +ToolTip("") +ToolTip("Checking Long Line Marker is disabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!v", 80, 78, 94, 92, $Colour_MenuTickbox) + Send("^L") + Sleep($DefaultWait) +WEnd + +; Show Wrap Symbols: disable +ToolTip("") +ToolTip("Checking Show Wrap Symbols is disabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!v", 80, 129, 94, 143, $Colour_MenuTickbox) + Send("^+7") + Sleep($DefaultWait) +WEnd + +; Show Blanks: enable +ToolTip("") +ToolTip("Checking Show Blanks is enabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While Not DisplayElementSet("!v", 80, 151, 94, 165, $Colour_MenuTickbox) + Send("^+8") + Sleep($DefaultWait) +WEnd + +; Selection Margin: disable +ToolTip("") +ToolTip("Checking Selection Margin is disabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!v", 80, 341, 94, 355, $Colour_MenuTickbox) + Send("^M") + Sleep($DefaultWait) +WEnd + +; Customise Toolbar: remove Exit button and preceding separator +ToolTip("") +ToolTip("Customising Toolbar...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!v") +Sleep($DefaultWait) +Send("t") +Sleep($DefaultWait) +Send("c") +Sleep($DefaultWait) +WinWait("Customize Toolbar", "A&vailable toolbar buttons:") +WinActivate("Customize Toolbar", "A&vailable toolbar buttons:") +If DisplayElementSet("", 286, 143, 306, 161, $Colour_ExitButtonHighDPIOn) Then + ControlClick("Customize Toolbar", "A&vailable toolbar buttons:", "[CLASS:ListBox; INSTANCE:2]", "left", 1, 11, 101) + Sleep($DefaultWait) + ControlClick("Customize Toolbar", "A&vailable toolbar buttons:", "[CLASS:Button; TEXT:<- &Remove]") ; Remove + Sleep($DefaultWait) + ControlClick("Customize Toolbar", "A&vailable toolbar buttons:", "[CLASS:ListBox; INSTANCE:2]", "left", 1, 11, 101) + Sleep($DefaultWait) + ControlClick("Customize Toolbar", "A&vailable toolbar buttons:", "[CLASS:Button; TEXT:<- &Remove]") ; Remove + Sleep($DefaultWait) +EndIf +ControlClick("Customize Toolbar", "A&vailable toolbar buttons:", "[CLASS:Button; TEXT:&Close]") ; Close +Sleep($DefaultWait) + +; Save as Default Position +ToolTip("") +ToolTip("Saving Default Position...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!v") +Sleep($DefaultWait) +Send("{UP}") +Sleep($DefaultWait) +Send("{RIGHT}") +Sleep($DefaultWait) +Send("{DOWN}") +Sleep($DefaultWait) +Send("{DOWN}") +Sleep($DefaultWait) +Send("{ENTER}") +Sleep($DefaultWait) + +; APPEARANCE MENU + +; Default Text Font: Cousine Regular 10 +ToolTip("") +ToolTip("Disabling 2nd Default Text...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!p", 120, 130, 134, 144, $Colour_MenuTickbox) + Send("+{F12}") + Sleep($DefaultWait) +WEnd +ToolTip("") +ToolTip("Setting Default Text font to Cousine Regular 10...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!{F12}") +WinWait(" BASE (Default Style)", "") +WinActivate(" BASE (Default Style)", "") +While ControlGetText(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:1]") <> "Cousine" + ControlFocus(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:1]") + Sleep($DefaultWait) + Send("Cousine") + Sleep($DefaultWait * 4) +WEnd +While ControlGetText(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:2]") <> "Regular" + ControlFocus(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:2]") + Sleep($DefaultWait) + Send("Regular") + Sleep($DefaultWait * 4) +WEnd +While ControlGetText(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:3]") <> "10" + ControlFocus(" BASE (Default Style)", "", "[CLASS:Edit; INSTANCE:3]") + Sleep($DefaultWait) + Send("10") + Sleep($DefaultWait * 4) +WEnd +ControlClick(" BASE (Default Style)", "", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) + +; 2nd Default Text Font: Verdana Regular 10 +ToolTip("") +ToolTip("Enabling 2nd Default Text...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While Not DisplayElementSet("!p", 120, 130, 134, 144, $Colour_MenuTickbox) + Send("+{F12}") + Sleep($DefaultWait) +WEnd +ToolTip("") +ToolTip("Setting 2nd Default Text font to Verdana Regular 10...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!{F12}") +WinWait(" BASE (2nd Default Style)", "") +WinActivate(" BASE (2nd Default Style)", "") +While ControlGetText(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:1]") <> "Verdana" + ControlFocus(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:1]") + Sleep($DefaultWait) + Send("Verdana") + Sleep($DefaultWait * 4) +WEnd +While ControlGetText(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:2]") <> "Regular" + ControlFocus(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:2]") + Sleep($DefaultWait) + Send("Regular") + Sleep($DefaultWait * 4) +WEnd +While ControlGetText(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:3]") <> "10" + ControlFocus(" BASE (2nd Default Style)", "", "[CLASS:Edit; INSTANCE:3]") + Sleep($DefaultWait) + Send("10") + Sleep($DefaultWait * 4) +WEnd +ControlClick(" BASE (2nd Default Style)", "", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) +ToolTip("") +ToolTip("Activating Default Text...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!p", 120, 130, 134, 144, $Colour_MenuTickbox) + Send("+{F12}") + Sleep($DefaultWait) +WEnd + +; SETTINGS MENU + +; Insert Tabs as Spaces: enable +ToolTip("") +ToolTip("Checking Insert Tabs as Spaces is enabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While Not DisplayElementSet("!s", 196, 86, 210, 100, $Colour_MenuTickbox) + Send("!s") + Sleep($DefaultWait) + Send("s") + Sleep($DefaultWait) +WEnd + +; Word Wrap Settings: no wrap indent +ToolTip("") +ToolTip("Checking No wrap indent...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("!s") +Sleep($DefaultWait) +Send("w") +Sleep($DefaultWait) +WinWait("Word Wrap Settings") +WinActivate("Word Wrap Settings") +ControlCommand("Word Wrap Settings", "", "ComboBox1", "SetCurrentSelection", 0) +Sleep($DefaultWait) +ControlClick("Word Wrap Settings", "", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) + +; Save Settings on Exit: disabled +ToolTip("") +ToolTip("Checking Save Settings on Exit is disabled...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +While DisplayElementSet("!sa", 522, 474, 536, 488, $Colour_MenuTickbox) + Send("!s") + Sleep($DefaultWait) + Send("a") + Sleep($DefaultWait) + Send("x") + Sleep($DefaultWait) +WEnd + +; Save Settings Now +ToolTip("") +ToolTip("Saving settings...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("{F7}") +WinWait("Notepad3", "The current program settings have been saved.") +WinActivate("Notepad3", "The current program settings have been saved.") +ControlClick("Notepad3", "The current program settings have been saved.", "[CLASS:Button; TEXT:OK]") ; OK +Sleep($DefaultWait) + +; SETTINGS FILE + +; Open Settings File +ToolTip("") +ToolTip("Opening settings file...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") +Send("^{F7}") +WinWait("Notepad3", "Save changes to ""Untitled""?") +WinActivate("Notepad3", "Save changes to ""Untitled""?") +ControlClick("Notepad3", "Save changes to ""Untitled""?", "[CLASS:Button; TEXT:&No]") ; No +Sleep($DefaultWait) + +; Settings File: DefaultExtension +ToolTip("") +ToolTip("Setting DefaultExtension...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitleShort, "") +WinActivate($WindowTitleShort, "") +Send("^h") +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:1]", ";DefaultExtension=txt\r\n;") ; Search String +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:2]", ";DefaultExtension=txt\r\nDefaultExtension=txt\r\n;") ; Replace with +If Not ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "IsChecked") Then + ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "Check") + $CheckboxToggled = True +Else + $CheckboxToggled = False +EndIf +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Replace &All]") ; Replace All +WinWait("Notepad3", "specified text") +WinActivate("Notepad3", "specified text") +ControlClick("Notepad3", "specified text", "[CLASS:Button; TEXT:OK]"); OK +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +If $CheckboxToggled Then + ControlClick("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]") +EndIf +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Close]") ; Close +Sleep($DefaultWait) + +; Settings File: FileLoadWarning +ToolTip("") +ToolTip("Setting FileLoadWarning...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitleShort, "") +WinActivate($WindowTitleShort, "") +Send("^h") +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:1]", ";FileLoadWarningMB=1\r\n;") ; Search String +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:2]", ";FileLoadWarningMB=1\r\nFileLoadWarningMB=5\r\n;") ; Replace with +If Not ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "IsChecked") Then + ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "Check") + $CheckboxToggled = True +Else + $CheckboxToggled = False +EndIf +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Replace &All]") ; Replace All +WinWait("Notepad3", "specified text") +WinActivate("Notepad3", "specified text") +ControlClick("Notepad3", "specified text", "[CLASS:Button; TEXT:OK]"); OK +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +If $CheckboxToggled Then + ControlClick("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]") +EndIf +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Close]") ; Close +Sleep($DefaultWait) + +; Settings File: MarkOccurrencesMaxCount +ToolTip("") +ToolTip("Setting MarkOccurrencesMaxCount...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitleShort, "") +WinActivate($WindowTitleShort, "") +Send("^h") +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:1]", ";MarkOccurrencesMaxCount=2000\r\n;") ; Search String +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:2]", ";MarkOccurrencesMaxCount=2000\r\nMarkOccurrencesMaxCount=30000\r\n;") ; Replace with +If Not ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "IsChecked") Then + ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "Check") + $CheckboxToggled = True +Else + $CheckboxToggled = False +EndIf +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Replace &All]") ; Replace All +WinWait("Notepad3", "specified text") +WinActivate("Notepad3", "specified text") +ControlClick("Notepad3", "specified text", "[CLASS:Button; TEXT:OK]"); OK +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +If $CheckboxToggled Then + ControlClick("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]") +EndIf +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Close]") ; Close +Sleep($DefaultWait) + +; Settings file: VisibleSections +ToolTip("") +ToolTip("Setting VisibleSections...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitleShort, "") +WinActivate($WindowTitleShort, "") +Send("^h") +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:1]", ";VisibleSections=0 1 12 14 2 4 5 6 7 8 9 10 11\r\n;") ; Search String +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:2]", ";VisibleSections=0 1 12 14 2 4 5 6 7 8 9 10 11\r\nVisibleSections=0 1 14 2 4 5 6 7 8 9 10 11\r\n;") ; Replace with +If Not ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "IsChecked") Then + ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "Check") + $CheckboxToggled = True +Else + $CheckboxToggled = False +EndIf +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Replace &All]") ; Replace All +WinWait("Notepad3", "specified text") +WinActivate("Notepad3", "specified text") +ControlClick("Notepad3", "specified text", "[CLASS:Button; TEXT:OK]"); OK +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +If $CheckboxToggled Then + ControlClick("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]") +EndIf +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Close]") ; Close +Sleep($DefaultWait) + +; Settings file: SectionWidthSpecs +ToolTip("") +ToolTip("Setting SectionWidthSpecs...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitleShort, "") +WinActivate($WindowTitleShort, "") +Send("^h") +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:1]", ";SectionWidthSpecs=30 20 20 20 20 20 0 0 0 0 0 0 20 20 20\r\n;") ; Search String +ControlSetText("Replace Text", "Replace wit&h:", "[CLASS:Edit; INSTANCE:2]", ";SectionWidthSpecs=30 20 20 20 20 20 0 0 0 0 0 0 20 20 20\r\nSectionWidthSpecs=30 20 20 20 20 20 0 0 -44 -32 -32 0 20 20 20\r\n;") ; Replace with +If Not ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "IsChecked") Then + ControlCommand("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]", "Check") + $CheckboxToggled = True +Else + $CheckboxToggled = False +EndIf +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Replace &All]") ; Replace All +WinWait("Notepad3", "specified text") +WinActivate("Notepad3", "specified text") +ControlClick("Notepad3", "specified text", "[CLASS:Button; TEXT:OK]"); OK +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +If $CheckboxToggled Then + ControlClick("Replace Text", "&Transform backslashes", "[CLASS:Button; TEXT:&Transform backslashes]") +EndIf +WinWait("Replace Text", "Replace wit&h:") +WinActivate("Replace Text", "Replace wit&h:") +ControlClick("Replace Text", "Replace wit&h:", "[CLASS:Button; TEXT:Close]") ; Close +Sleep($DefaultWait) + +; Check Settings +ToolTip("") +ToolTip("Check Settings...", $ToolTip_X, $ToolTip_Y) +$Reply = MsgBox(4, "Check Settings", "Check settings and make any additional required manual changes." & @CRLF & @CRLF & "Save?") +Switch $Reply + Case 6 + ; Yes - save and close settings file + ToolTip("") + ToolTip("Saving and closing settings file...", $ToolTip_X, $ToolTip_Y) + Send("^s") + Send("!{F4}") + Case 7 + ; No - close settings file without saving + ToolTip("") + ToolTip("Closing settings file without saving...", $ToolTip_X, $ToolTip_Y) + Send("!{F4}") + Sleep($DefaultWait) + If WinExists("Notepad3", "Save changes to ") Then + ControlClick("Notepad3", "Save changes to ", "[CLASS:Button; TEXT:&No]") ; No + EndIf + Case Else + ; Should never happen - exit + Exit(1000) +EndSwitch + +; Relaunch Notepad3 +ToolTip("") +ToolTip("Relaunching Notepad3...", $ToolTip_X, $ToolTip_Y) +ShellExecute($PathToNotepad3) +Sleep(1800) +ToolTip("") +ToolTip("Waiting for Notepad3 window...", $ToolTip_X, $ToolTip_Y) +WinWait($WindowTitle, "") +WinActivate($WindowTitle, "") + +; FUNCTIONS + +; DisplayElementSet: searches given box area for colour that indicates set +; Parameters: +; $PreFuncCommand: keys to send first to invoke menu (optional) +; $Coord_Left: left edge +; $Coord_Top: top edge +; $Coord_Right: right edge +; $Coord_Bottom: bottom edge +; $Colour_Set: colour to search for that indicates element is set +Func DisplayElementSet($PreFuncCommand, $Coord_Left, $Coord_Top, $Coord_Right, $Coord_Bottom, $Colour_Set) + ; MouseMove(150, 8) + Dim $CheckboxArea + Dim $IsSet + If $PreFuncCommand <> "" Then + Send($PreFuncCommand) + Sleep($DefaultWait) + EndIf + $CheckboxArea = PixelSearch($Coord_left, $Coord_top, $Coord_right, $Coord_bottom, $colour_set, 5) + If @error Then + $IsSet = False + Else + $IsSet = True + EndIf + If $PreFuncCommand <> "" Then + Send("{ALT}") + EndIf + Return $IsSet +EndFunc + +; CheckCoords: move mouse pointer to window coordinates to check screen element position +; (called for testing) +; Parameters: +; $PreFuncCommand: keys to send first to invoke menu (optional) +; $Coord_Left: left edge +; $Coord_Top: top edge +; $Coord_Right: right edge +; $Coord_Bottom: bottom edge +Func CheckCoords($PreFuncCommand, $Coord_Left, $Coord_Top, $Coord_Right, $Coord_Bottom) + If $PreFuncCommand <> "" Then + Send($PreFuncCommand) + Sleep($DefaultWait) + EndIf + MouseMove($Coord_Left, $Coord_Top) + Sleep(1000) + MouseMove($Coord_Right, $Coord_Top) + Sleep(1000) + MouseMove($Coord_Left, $Coord_Bottom) + Sleep(1000) + MouseMove($Coord_Right, $Coord_Bottom) + Sleep(1000) + ; Send("{ALT}") +EndFunc \ No newline at end of file diff --git a/test/test_files/extensions/DIFF/Fix broken Style Scheme Export (#1409).diff b/test/test_files/extensions/DIFF/Fix broken Style Scheme Export (#1409).diff new file mode 100644 index 000000000..b1915a002 --- /dev/null +++ b/test/test_files/extensions/DIFF/Fix broken Style Scheme Export (#1409).diff @@ -0,0 +1,246 @@ +diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp +index 567ac09c..021d940f 100644 +--- a/src/Config/Config.cpp ++++ b/src/Config/Config.cpp +@@ -1370,6 +1370,7 @@ bool SaveSettings(bool bSaveSettingsNow) + + if (ok) { + Style_Save(); // Scintilla Styles ++ Globals.bIniFileFromScratch = false; + } + return ok; + } +diff --git a/src/Styles.c b/src/Styles.c +index 4e394569..4e7e78bc 100644 +--- a/src/Styles.c ++++ b/src/Styles.c +@@ -633,7 +633,7 @@ bool Style_ImportFromFile(const WCHAR* szFile) + // + void Style_Save() + { +- Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, false); ++ Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, Globals.bIniFileFromScratch); + + if (s_idxSelectedTheme > 1) { + IniFileSetString(Globals.IniFile, L"Styles", STYLING_THEME_NAME, Theme_Files[s_idxSelectedTheme].szName); +@@ -667,17 +667,15 @@ bool Style_Export(HWND hwnd) + ofn.Flags = /*OFN_FILEMUSTEXIST |*/ OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT + | OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/ | OFN_OVERWRITEPROMPT; + +- Globals.dwLastError = ERROR_SUCCESS; +- ++ bool ok = false; + if (GetSaveFileName(&ofn)) + { +- Globals.dwLastError = Style_ExportToFile(szFile, true); +- +- if (Globals.dwLastError != ERROR_SUCCESS) { ++ ok = Style_ExportToFile(szFile, true); ++ if (!ok) { + InfoBoxLng(MB_ICONERROR, NULL, IDS_MUI_EXPORT_FAIL, PathFindFileName(szFile)); + } + } +- return (Globals.dwLastError == ERROR_SUCCESS); ++ return ok; + } + + +@@ -694,115 +692,112 @@ bool Style_ExportToFile(const WCHAR* szFile, bool bForceAll) + return false; + } + +- bool const ok = LoadIniFile(szFile); +- +- if (ok) { ++ LoadIniFile(szFile); // reset + + // Custom colors +- const WCHAR* const CustomColors_Section = L"Custom Colors"; ++ const WCHAR* const CustomColors_Section = L"Custom Colors"; + +- for (int i = 0; i < 16; i++) { +- if (bForceAll || (g_colorCustom[i] != s_colorDefault[i])) { +- WCHAR tch[32] = { L'\0' }; +- WCHAR wch[32] = { L'\0' }; +- StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1); +- 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); +- } ++ for (int i = 0; i < 16; i++) { ++ if (bForceAll || (g_colorCustom[i] != s_colorDefault[i])) { ++ WCHAR tch[32] = { L'\0' }; ++ WCHAR wch[32] = { L'\0' }; ++ StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1); ++ 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); + } ++ } + +- const WCHAR* const Styles_Section = L"Styles"; ++ const WCHAR* const Styles_Section = L"Styles"; + +- // auto select +- bool const bUse2ndSty = Style_GetUse2ndDefault(); +- if (bUse2ndSty) { +- IniSectionSetBool(Styles_Section, L"Use2ndDefaultStyle", bUse2ndSty); +- } +- else { +- IniSectionDelete(Styles_Section, L"Use2ndDefaultStyle", false); +- } ++ // auto select ++ bool const bUse2ndSty = Style_GetUse2ndDefault(); ++ if (bUse2ndSty) { ++ IniSectionSetBool(Styles_Section, L"Use2ndDefaultStyle", bUse2ndSty); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"Use2ndDefaultStyle", false); ++ } + +- // default scheme +- if (s_iDefaultLexer != 0) { +- IniSectionSetInt(Styles_Section, L"DefaultScheme", s_iDefaultLexer); +- } +- else { +- IniSectionDelete(Styles_Section, L"DefaultScheme", false); +- } ++ // default scheme ++ if (s_iDefaultLexer != 0) { ++ IniSectionSetInt(Styles_Section, L"DefaultScheme", s_iDefaultLexer); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"DefaultScheme", false); ++ } + +- // auto select +- if (!s_bAutoSelect) { +- IniSectionSetBool(Styles_Section, L"AutoSelect", s_bAutoSelect); +- } +- else { +- IniSectionDelete(Styles_Section, L"AutoSelect", false); +- } ++ // auto select ++ if (!s_bAutoSelect) { ++ IniSectionSetBool(Styles_Section, L"AutoSelect", s_bAutoSelect); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"AutoSelect", false); ++ } + +- // scheme select dlg dimensions +- if (s_cxStyleSelectDlg != STYLESELECTDLG_X) { +- IniSectionSetInt(Styles_Section, L"SelectDlgSizeX", s_cxStyleSelectDlg); ++ // scheme select dlg dimensions ++ if (s_cxStyleSelectDlg != STYLESELECTDLG_X) { ++ IniSectionSetInt(Styles_Section, L"SelectDlgSizeX", s_cxStyleSelectDlg); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"SelectDlgSizeX", false); ++ } ++ if (s_cyStyleSelectDlg != STYLESELECTDLG_Y) { ++ IniSectionSetInt(Styles_Section, L"SelectDlgSizeY", s_cyStyleSelectDlg); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"SelectDlgSizeY", false); ++ } ++ ++ // create canonical order of lexer sections ++ if (bForceAll) { ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) ++ { ++ IniSectionClear(g_pLexArray[iLexer]->pszName, true); + } +- else { +- IniSectionDelete(Styles_Section, L"SelectDlgSizeX", false); ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) ++ { ++ IniSectionSetString(g_pLexArray[iLexer]->pszName, NULL, NULL); + } +- if (s_cyStyleSelectDlg != STYLESELECTDLG_Y) { +- IniSectionSetInt(Styles_Section, L"SelectDlgSizeY", s_cyStyleSelectDlg); ++ bForceAll = !Globals.bIniFileFromScratch; ++ } ++ ++ WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE]; ++ ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) ++ { ++ LPCWSTR const Lexer_Section = g_pLexArray[iLexer]->pszName; ++ ++ if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->szExtensions, g_pLexArray[iLexer]->pszDefExt) != 0)) ++ { ++ IniSectionSetString(Lexer_Section, L"FileNameExtensions", g_pLexArray[iLexer]->szExtensions); + } + else { +- IniSectionDelete(Styles_Section, L"SelectDlgSizeY", false); ++ IniSectionDelete(Lexer_Section, L"FileNameExtensions", false); + } + +- // create canonical order of lexer sections +- if (bForceAll) { +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) +- { +- IniSectionClear(g_pLexArray[iLexer]->pszName, true); +- } +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) +- { +- IniSectionSetString(g_pLexArray[iLexer]->pszName, NULL, NULL); +- } +- } +- +- WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE]; +- +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) ++ unsigned i = 0; ++ while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) + { +- LPCWSTR const Lexer_Section = g_pLexArray[iLexer]->pszName; ++ // normalize defaults ++ szTmpStyle[0] = L'\0'; // clear ++ Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].pszDefault, szTmpStyle, COUNTOF(szTmpStyle), true, true); + +- if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->szExtensions, g_pLexArray[iLexer]->pszDefExt) != 0)) ++ if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle) != 0)) + { +- IniSectionSetString(Lexer_Section, L"FileNameExtensions", g_pLexArray[iLexer]->szExtensions); ++ // normalize value ++ szTmpStyle[0] = L'\0'; // clear ++ Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle), true, true); ++ IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle); + } + else { +- IniSectionDelete(Lexer_Section, L"FileNameExtensions", false); +- } +- +- 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), true, true); +- +- if (bForceAll || (StringCchCompareXI(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), true, true); +- IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle); +- } +- else { +- IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false); +- } +- ++i; ++ IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false); + } ++ ++i; + } +- +- SaveIniFile(szFile); + } +- return ok; ++ ++ return SaveIniFile(szFile); + } + + diff --git a/test/test_files/extensions/DIFF/No pre-defined font for Text Files (#1445).diff b/test/test_files/extensions/DIFF/No pre-defined font for Text Files (#1445).diff new file mode 100644 index 000000000..e8ae02747 --- /dev/null +++ b/test/test_files/extensions/DIFF/No pre-defined font for Text Files (#1445).diff @@ -0,0 +1,140 @@ +diff --git a/Versions/build.txt b/Versions/build.txt +index 38ac9c59..8c88d58d 100644 +--- a/Versions/build.txt ++++ b/Versions/build.txt +@@ -1 +1 @@ +-2398 ++2399 +diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf +index 051bb650..cb40e1bf 100644 +--- a/res/Notepad3.exe.manifest.conf ++++ b/res/Notepad3.exe.manifest.conf +@@ -3,7 +3,7 @@ + + Notepad3 BETA +diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx +index 28596fa7..12fd7173 100644 +--- a/scintilla/win32/ScintillaWin.cxx ++++ b/scintilla/win32/ScintillaWin.cxx +@@ -1437,22 +1437,12 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam + break; + } + +- // Hold RIGHT MOUSE BUTTON and SCROLL to cycle through UNDO history +- if (wParam & MK_RBUTTON) { +- if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { +- Redo(); +- } +- else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) { +- Undo(); +- } +- return 0; +- } +- + // Don't handle datazoom. + // (A good idea for datazoom would be to "fold" or "unfold" details. + // i.e. if datazoomed out only class structures are visible, when datazooming in the control + // structures appear, then eventually the individual statements...) +- if (wParam & MK_SHIFT) { ++ if (wParam & (MK_SHIFT | MK_RBUTTON)) { ++ // send to client + return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); + } + +diff --git a/src/Notepad3.c b/src/Notepad3.c +index b70ad278..53a8e102 100644 +--- a/src/Notepad3.c ++++ b/src/Notepad3.c +@@ -142,6 +142,7 @@ static int s_cyReBar; + static int s_cyReBarFrame; + static int s_cxEditFrame; + static int s_cyEditFrame; ++static bool s_bUndoRedoScroll = false; + + // for tiny expression calculation + static double s_dExpression = 0.0; +@@ -1557,7 +1558,20 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) + break; + + case WM_MOUSEWHEEL: +- if (wParam & MK_CONTROL) { ShowZoomCallTip(); } ++ if (wParam & MK_CONTROL) { ++ ShowZoomCallTip(); ++ } ++ else if (wParam & MK_RBUTTON) { ++ // Hold RIGHT MOUSE BUTTON and SCROLL to cycle through UNDO history ++ if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { ++ s_bUndoRedoScroll = true; ++ SciCall_Redo(); ++ } ++ else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) { ++ s_bUndoRedoScroll = true; ++ SciCall_Undo(); ++ } ++ } + break; + + case WM_INPUTLANGCHANGE: +@@ -2846,21 +2860,25 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam) + // + LRESULT MsgContextMenu(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) + { +- HMENU hmenu; +- int imenu = 0; +- POINT pt; +- int nID = GetDlgCtrlID((HWND)wParam); ++ // no context menu after undo/redo history scrolling ++ if (s_bUndoRedoScroll) { ++ s_bUndoRedoScroll = false; ++ return FALSE; ++ } + ++ int nID = GetDlgCtrlID((HWND)wParam); + if ((nID != IDC_EDIT) && (nID != IDC_STATUSBAR) && + (nID != IDC_REBAR) && (nID != IDC_TOOLBAR)) + return DefWindowProc(hwnd, umsg, wParam, lParam); + +- hmenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_POPUPMENU)); ++ HMENU hmenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_POPUPMENU)); + //SetMenuDefaultItem(GetSubMenu(hmenu,1),0,false); + ++ POINT pt; + pt.x = (int)(short)LOWORD(lParam); + pt.y = (int)(short)HIWORD(lParam); + ++ int imenu = 0; + switch (nID) { + case IDC_EDIT: + { +diff --git a/src/StyleLexers/styleLexStandard.c b/src/StyleLexers/styleLexStandard.c +index 9aafcd5f..0a9868b0 100644 +--- a/src/StyleLexers/styleLexStandard.c ++++ b/src/StyleLexers/styleLexStandard.c +@@ -53,7 +53,7 @@ SCLEX_NULL, IDS_LEX_STR_63266, L"2nd Common Base", L"", L"", + EDITLEXER lexTEXT = { + SCLEX_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:Segoe UI; size:11; smoothing:cleartype", 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"" }, + { {SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT}, IDS_LEX_STD_X_SPC, L"Extra Line Spacing (Size)", L"size:-1", L"" }, + EDITLEXER_SENTINEL } }; +diff --git a/src/VersionEx.h b/src/VersionEx.h +index f400c6a1..53bab1d5 100644 +--- a/src/VersionEx.h ++++ b/src/VersionEx.h +@@ -8,7 +8,7 @@ + #define VERSION_MAJOR 5 + #define VERSION_MINOR 19 + #define VERSION_REV 719 +-#define VERSION_BUILD 2398 ++#define VERSION_BUILD 2399 + #define SCINTILLA_VER 420 + #define ONIGURUMA_REGEX_VER 6.9.3 + #define VERSION_PATCH BETA diff --git a/test/test_files/extensions/PATCH/Fix broken Style Scheme Export (#1409).patch b/test/test_files/extensions/PATCH/Fix broken Style Scheme Export (#1409).patch new file mode 100644 index 000000000..5815e009e --- /dev/null +++ b/test/test_files/extensions/PATCH/Fix broken Style Scheme Export (#1409).patch @@ -0,0 +1,257 @@ +From 7b76641b14b04c38b561a58ba9a7b2f5b7bdb045 Mon Sep 17 00:00:00 2001 +From: Rainer Kottenhoff +Date: Mon, 8 Jul 2019 22:08:49 +0200 +Subject: [PATCH] + fix: broken Style Scheme Export (due to new ini file + handler) + +--- + src/Config/Config.cpp | 1 + + src/Styles.c | 181 ++++++++++++++++++++---------------------- + 2 files changed, 89 insertions(+), 93 deletions(-) + +diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp +index 567ac09c..021d940f 100644 +--- a/src/Config/Config.cpp ++++ b/src/Config/Config.cpp +@@ -1370,6 +1370,7 @@ bool SaveSettings(bool bSaveSettingsNow) + + if (ok) { + Style_Save(); // Scintilla Styles ++ Globals.bIniFileFromScratch = false; + } + return ok; + } +diff --git a/src/Styles.c b/src/Styles.c +index 4e394569..4e7e78bc 100644 +--- a/src/Styles.c ++++ b/src/Styles.c +@@ -633,7 +633,7 @@ bool Style_ImportFromFile(const WCHAR* szFile) + // + void Style_Save() + { +- Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, false); ++ Style_ExportToFile(Theme_Files[s_idxSelectedTheme].szFilePath, Globals.bIniFileFromScratch); + + if (s_idxSelectedTheme > 1) { + IniFileSetString(Globals.IniFile, L"Styles", STYLING_THEME_NAME, Theme_Files[s_idxSelectedTheme].szName); +@@ -667,17 +667,15 @@ bool Style_Export(HWND hwnd) + ofn.Flags = /*OFN_FILEMUSTEXIST |*/ OFN_HIDEREADONLY | OFN_NOCHANGEDIR | OFN_DONTADDTORECENT + | OFN_PATHMUSTEXIST | OFN_SHAREAWARE /*| OFN_NODEREFERENCELINKS*/ | OFN_OVERWRITEPROMPT; + +- Globals.dwLastError = ERROR_SUCCESS; +- ++ bool ok = false; + if (GetSaveFileName(&ofn)) + { +- Globals.dwLastError = Style_ExportToFile(szFile, true); +- +- if (Globals.dwLastError != ERROR_SUCCESS) { ++ ok = Style_ExportToFile(szFile, true); ++ if (!ok) { + InfoBoxLng(MB_ICONERROR, NULL, IDS_MUI_EXPORT_FAIL, PathFindFileName(szFile)); + } + } +- return (Globals.dwLastError == ERROR_SUCCESS); ++ return ok; + } + + +@@ -694,115 +692,112 @@ bool Style_ExportToFile(const WCHAR* szFile, bool bForceAll) + return false; + } + +- bool const ok = LoadIniFile(szFile); +- +- if (ok) { ++ LoadIniFile(szFile); // reset + + // Custom colors +- const WCHAR* const CustomColors_Section = L"Custom Colors"; ++ const WCHAR* const CustomColors_Section = L"Custom Colors"; + +- for (int i = 0; i < 16; i++) { +- if (bForceAll || (g_colorCustom[i] != s_colorDefault[i])) { +- WCHAR tch[32] = { L'\0' }; +- WCHAR wch[32] = { L'\0' }; +- StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1); +- 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); +- } ++ for (int i = 0; i < 16; i++) { ++ if (bForceAll || (g_colorCustom[i] != s_colorDefault[i])) { ++ WCHAR tch[32] = { L'\0' }; ++ WCHAR wch[32] = { L'\0' }; ++ StringCchPrintf(tch, COUNTOF(tch), L"%02i", i + 1); ++ 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); + } ++ } + +- const WCHAR* const Styles_Section = L"Styles"; ++ const WCHAR* const Styles_Section = L"Styles"; + +- // auto select +- bool const bUse2ndSty = Style_GetUse2ndDefault(); +- if (bUse2ndSty) { +- IniSectionSetBool(Styles_Section, L"Use2ndDefaultStyle", bUse2ndSty); +- } +- else { +- IniSectionDelete(Styles_Section, L"Use2ndDefaultStyle", false); +- } ++ // auto select ++ bool const bUse2ndSty = Style_GetUse2ndDefault(); ++ if (bUse2ndSty) { ++ IniSectionSetBool(Styles_Section, L"Use2ndDefaultStyle", bUse2ndSty); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"Use2ndDefaultStyle", false); ++ } + +- // default scheme +- if (s_iDefaultLexer != 0) { +- IniSectionSetInt(Styles_Section, L"DefaultScheme", s_iDefaultLexer); +- } +- else { +- IniSectionDelete(Styles_Section, L"DefaultScheme", false); +- } ++ // default scheme ++ if (s_iDefaultLexer != 0) { ++ IniSectionSetInt(Styles_Section, L"DefaultScheme", s_iDefaultLexer); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"DefaultScheme", false); ++ } + +- // auto select +- if (!s_bAutoSelect) { +- IniSectionSetBool(Styles_Section, L"AutoSelect", s_bAutoSelect); +- } +- else { +- IniSectionDelete(Styles_Section, L"AutoSelect", false); +- } ++ // auto select ++ if (!s_bAutoSelect) { ++ IniSectionSetBool(Styles_Section, L"AutoSelect", s_bAutoSelect); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"AutoSelect", false); ++ } + +- // scheme select dlg dimensions +- if (s_cxStyleSelectDlg != STYLESELECTDLG_X) { +- IniSectionSetInt(Styles_Section, L"SelectDlgSizeX", s_cxStyleSelectDlg); ++ // scheme select dlg dimensions ++ if (s_cxStyleSelectDlg != STYLESELECTDLG_X) { ++ IniSectionSetInt(Styles_Section, L"SelectDlgSizeX", s_cxStyleSelectDlg); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"SelectDlgSizeX", false); ++ } ++ if (s_cyStyleSelectDlg != STYLESELECTDLG_Y) { ++ IniSectionSetInt(Styles_Section, L"SelectDlgSizeY", s_cyStyleSelectDlg); ++ } ++ else { ++ IniSectionDelete(Styles_Section, L"SelectDlgSizeY", false); ++ } ++ ++ // create canonical order of lexer sections ++ if (bForceAll) { ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) ++ { ++ IniSectionClear(g_pLexArray[iLexer]->pszName, true); + } +- else { +- IniSectionDelete(Styles_Section, L"SelectDlgSizeX", false); ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) ++ { ++ IniSectionSetString(g_pLexArray[iLexer]->pszName, NULL, NULL); + } +- if (s_cyStyleSelectDlg != STYLESELECTDLG_Y) { +- IniSectionSetInt(Styles_Section, L"SelectDlgSizeY", s_cyStyleSelectDlg); ++ bForceAll = !Globals.bIniFileFromScratch; ++ } ++ ++ WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE]; ++ ++ for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) ++ { ++ LPCWSTR const Lexer_Section = g_pLexArray[iLexer]->pszName; ++ ++ if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->szExtensions, g_pLexArray[iLexer]->pszDefExt) != 0)) ++ { ++ IniSectionSetString(Lexer_Section, L"FileNameExtensions", g_pLexArray[iLexer]->szExtensions); + } + else { +- IniSectionDelete(Styles_Section, L"SelectDlgSizeY", false); ++ IniSectionDelete(Lexer_Section, L"FileNameExtensions", false); + } + +- // create canonical order of lexer sections +- if (bForceAll) { +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) +- { +- IniSectionClear(g_pLexArray[iLexer]->pszName, true); +- } +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); iLexer++) +- { +- IniSectionSetString(g_pLexArray[iLexer]->pszName, NULL, NULL); +- } +- } +- +- WCHAR szTmpStyle[BUFSIZE_STYLE_VALUE]; +- +- for (int iLexer = 0; iLexer < COUNTOF(g_pLexArray); ++iLexer) ++ unsigned i = 0; ++ while (g_pLexArray[iLexer]->Styles[i].iStyle != -1) + { +- LPCWSTR const Lexer_Section = g_pLexArray[iLexer]->pszName; ++ // normalize defaults ++ szTmpStyle[0] = L'\0'; // clear ++ Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].pszDefault, szTmpStyle, COUNTOF(szTmpStyle), true, true); + +- if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->szExtensions, g_pLexArray[iLexer]->pszDefExt) != 0)) ++ if (bForceAll || (StringCchCompareXI(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle) != 0)) + { +- IniSectionSetString(Lexer_Section, L"FileNameExtensions", g_pLexArray[iLexer]->szExtensions); ++ // normalize value ++ szTmpStyle[0] = L'\0'; // clear ++ Style_CopyStyles_IfNotDefined(g_pLexArray[iLexer]->Styles[i].szValue, szTmpStyle, COUNTOF(szTmpStyle), true, true); ++ IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle); + } + else { +- IniSectionDelete(Lexer_Section, L"FileNameExtensions", false); +- } +- +- 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), true, true); +- +- if (bForceAll || (StringCchCompareXI(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), true, true); +- IniSectionSetString(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, szTmpStyle); +- } +- else { +- IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false); +- } +- ++i; ++ IniSectionDelete(Lexer_Section, g_pLexArray[iLexer]->Styles[i].pszName, false); + } ++ ++i; + } +- +- SaveIniFile(szFile); + } +- return ok; ++ ++ return SaveIniFile(szFile); + } + + diff --git a/test/test_files/extensions/PATCH/No pre-defined font for Text Files (#1445).patch b/test/test_files/extensions/PATCH/No pre-defined font for Text Files (#1445).patch new file mode 100644 index 000000000..4c0dc2371 --- /dev/null +++ b/test/test_files/extensions/PATCH/No pre-defined font for Text Files (#1445).patch @@ -0,0 +1,155 @@ +From 421e3c89a27d36a195c56a57e69995a6856f0144 Mon Sep 17 00:00:00 2001 +From: Rainer Kottenhoff +Date: Fri, 19 Jul 2019 15:15:51 +0200 +Subject: [PATCH] + chg: no pre-defined font for "Text Files" + fix: no context + menu after undo/redo history scrolling + +--- + Versions/build.txt | 2 +- + res/Notepad3.exe.manifest.conf | 2 +- + scintilla/win32/ScintillaWin.cxx | 14 ++------------ + src/Notepad3.c | 30 ++++++++++++++++++++++++------ + src/StyleLexers/styleLexStandard.c | 2 +- + src/VersionEx.h | 2 +- + 6 files changed, 30 insertions(+), 22 deletions(-) + +diff --git a/Versions/build.txt b/Versions/build.txt +index 38ac9c59..8c88d58d 100644 +--- a/Versions/build.txt ++++ b/Versions/build.txt +@@ -1 +1 @@ +-2398 ++2399 +diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf +index 051bb650..cb40e1bf 100644 +--- a/res/Notepad3.exe.manifest.conf ++++ b/res/Notepad3.exe.manifest.conf +@@ -3,7 +3,7 @@ + + Notepad3 BETA +diff --git a/scintilla/win32/ScintillaWin.cxx b/scintilla/win32/ScintillaWin.cxx +index 28596fa7..12fd7173 100644 +--- a/scintilla/win32/ScintillaWin.cxx ++++ b/scintilla/win32/ScintillaWin.cxx +@@ -1437,22 +1437,12 @@ sptr_t ScintillaWin::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam + break; + } + +- // Hold RIGHT MOUSE BUTTON and SCROLL to cycle through UNDO history +- if (wParam & MK_RBUTTON) { +- if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { +- Redo(); +- } +- else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) { +- Undo(); +- } +- return 0; +- } +- + // Don't handle datazoom. + // (A good idea for datazoom would be to "fold" or "unfold" details. + // i.e. if datazoomed out only class structures are visible, when datazooming in the control + // structures appear, then eventually the individual statements...) +- if (wParam & MK_SHIFT) { ++ if (wParam & (MK_SHIFT | MK_RBUTTON)) { ++ // send to client + return ::DefWindowProc(MainHWND(), iMessage, wParam, lParam); + } + +diff --git a/src/Notepad3.c b/src/Notepad3.c +index b70ad278..53a8e102 100644 +--- a/src/Notepad3.c ++++ b/src/Notepad3.c +@@ -142,6 +142,7 @@ static int s_cyReBar; + static int s_cyReBarFrame; + static int s_cxEditFrame; + static int s_cyEditFrame; ++static bool s_bUndoRedoScroll = false; + + // for tiny expression calculation + static double s_dExpression = 0.0; +@@ -1557,7 +1558,20 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) + break; + + case WM_MOUSEWHEEL: +- if (wParam & MK_CONTROL) { ShowZoomCallTip(); } ++ if (wParam & MK_CONTROL) { ++ ShowZoomCallTip(); ++ } ++ else if (wParam & MK_RBUTTON) { ++ // Hold RIGHT MOUSE BUTTON and SCROLL to cycle through UNDO history ++ if (GET_WHEEL_DELTA_WPARAM(wParam) > 0) { ++ s_bUndoRedoScroll = true; ++ SciCall_Redo(); ++ } ++ else if (GET_WHEEL_DELTA_WPARAM(wParam) < 0) { ++ s_bUndoRedoScroll = true; ++ SciCall_Undo(); ++ } ++ } + break; + + case WM_INPUTLANGCHANGE: +@@ -2846,21 +2860,25 @@ LRESULT MsgCopyData(HWND hwnd, WPARAM wParam, LPARAM lParam) + // + LRESULT MsgContextMenu(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam) + { +- HMENU hmenu; +- int imenu = 0; +- POINT pt; +- int nID = GetDlgCtrlID((HWND)wParam); ++ // no context menu after undo/redo history scrolling ++ if (s_bUndoRedoScroll) { ++ s_bUndoRedoScroll = false; ++ return FALSE; ++ } + ++ int nID = GetDlgCtrlID((HWND)wParam); + if ((nID != IDC_EDIT) && (nID != IDC_STATUSBAR) && + (nID != IDC_REBAR) && (nID != IDC_TOOLBAR)) + return DefWindowProc(hwnd, umsg, wParam, lParam); + +- hmenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_POPUPMENU)); ++ HMENU hmenu = LoadMenu(Globals.hLngResContainer, MAKEINTRESOURCE(IDR_MUI_POPUPMENU)); + //SetMenuDefaultItem(GetSubMenu(hmenu,1),0,false); + ++ POINT pt; + pt.x = (int)(short)LOWORD(lParam); + pt.y = (int)(short)HIWORD(lParam); + ++ int imenu = 0; + switch (nID) { + case IDC_EDIT: + { +diff --git a/src/StyleLexers/styleLexStandard.c b/src/StyleLexers/styleLexStandard.c +index 9aafcd5f..0a9868b0 100644 +--- a/src/StyleLexers/styleLexStandard.c ++++ b/src/StyleLexers/styleLexStandard.c +@@ -53,7 +53,7 @@ SCLEX_NULL, IDS_LEX_STR_63266, L"2nd Common Base", L"", L"", + EDITLEXER lexTEXT = { + SCLEX_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:Segoe UI; size:11; smoothing:cleartype", 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"" }, + { {SCI_SETEXTRAASCENT + SCI_SETEXTRADESCENT}, IDS_LEX_STD_X_SPC, L"Extra Line Spacing (Size)", L"size:-1", L"" }, + EDITLEXER_SENTINEL } }; +diff --git a/src/VersionEx.h b/src/VersionEx.h +index f400c6a1..53bab1d5 100644 +--- a/src/VersionEx.h ++++ b/src/VersionEx.h +@@ -8,7 +8,7 @@ + #define VERSION_MAJOR 5 + #define VERSION_MINOR 19 + #define VERSION_REV 719 +-#define VERSION_BUILD 2398 ++#define VERSION_BUILD 2399 + #define SCINTILLA_VER 420 + #define ONIGURUMA_REGEX_VER 6.9.3 + #define VERSION_PATCH BETA