From fdbe6e9ba3c3d878d423ad4bc71c9966ab8c084c Mon Sep 17 00:00:00 2001 From: Aleksey Dobrunov Date: Thu, 6 May 2021 16:47:33 +0500 Subject: [PATCH] fix #41 --- misc/Plugin.Colorer.lua | 157 +++++++++++++++++++--------------------- misc/colorere.hlf | 23 +++--- misc/colorerr.hlf | 23 +++--- src/FarEditorSet.cpp | 151 ++++++++++++++++++++++---------------- src/FarEditorSet.h | 1 + 5 files changed, 190 insertions(+), 165 deletions(-) diff --git a/misc/Plugin.Colorer.lua b/misc/Plugin.Colorer.lua index 0fb5ce4..44296d2 100644 --- a/misc/Plugin.Colorer.lua +++ b/misc/Plugin.Colorer.lua @@ -1,150 +1,139 @@ local ColorerGUID = "D2F36B62-A470-418D-83A3-ED7A3710E5B5"; -local function ColorerProcess() - local KeysArray = { - ["Alt'"] = "6", -- find errors - ["RAlt'"] = "6", -- find errors - ["Alt;"] = "5", -- list functions - ["RAlt;"] = "5", -- list functions - AltK = "7", -- select region - RAltK = "7", -- select region - F5 = "5", -- list functions - AltL = "1", -- list types - RAltL = "1", -- list types - AltO = "8", -- find function - RAltO = "8", -- find function - AltP = "4", -- select pair - RAltP = "4", -- select pair - AltR = "R", -- reload colorer - RAltR = "R", -- reload colorer - ["Alt["] = "2", -- match pair - ["RAlt["] = "2", -- match pair - ["Alt]"] = "3", -- select block - ["RAlt]"] = "3", -- select block - CtrlShiftC = "C Tab", -- cross on/off - RCtrlShiftC = "C Tab" -- cross on/off - }; - local akey = mf.akey(2); - local key = KeysArray[mf.akey(2)]; - Plugin.Menu(ColorerGUID) ; - if Object.CheckHotkey(key) ~= 0 then - Keys(key); - if akey == "CtrlShiftC" or akey == "RCtrlShiftC" then - State=Dlg.GetValue(3, 0); - if State==0 then Keys("Add") else Keys("Subtract") end - Keys("Enter") - end - else - Keys("Esc") - end -end - Macro { - area="Editor"; - description="Colorer: Find Errors"; - key="/.Alt'/"; + area = "Editor"; + description = "Colorer: Find Errors"; + key = "/.Alt'/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Errors", "Show") + end; } Macro { - area="Editor"; - description="Colorer: List Functions"; - key="/.Alt;/"; + area = "Editor"; + description = "Colorer: List Functions"; + key = "/.Alt;/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Functions", "Show") + end; } Macro { - area="Editor"; - description="Colorer: List Functions"; - key="F5"; + area = "Editor"; + description = "Colorer: List Functions"; + key = "F5"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Functions", "Show") + end; } Macro { - area="Editor"; - description="Colorer: Select Region"; - key="/.AltK/"; + area = "Editor"; + description = "Colorer: Select Region"; + key = "/.AltK/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Region", "Select") + end; } Macro { - area="Editor"; - description="Colorer: List Types"; - key="/.AltL/"; + area = "Editor"; + description = "Colorer: List Types"; + key = "/.AltL/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Types", "Menu") + end; } Macro { - area="Editor"; - description="Colorer: Find Function"; - key="/.AltO/"; + area = "Editor"; + description = "Colorer: Find Function"; + key = "/.AltO/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Functions", "Find") + end; } Macro { - area="Editor"; - description="Colorer: Select Pair"; - key="/.AltP/"; + area = "Editor"; + description = "Colorer: Select Pair"; + key = "/.AltP/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Brackets", "SelectAll") + end; } Macro { - area="Editor"; - description="Colorer: Reload Colorer"; - key="/.AltR/"; + area = "Editor"; + description = "Colorer: Reload Colorer"; + key = "/.AltR/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Settings", "Reload") + end; } Macro { - area="Editor"; - description="Colorer: Match Pair"; - key="/.Alt\\[/"; + area = "Editor"; + description = "Colorer: Match Pair"; + key = "/.Alt\\[/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Brackets", "SelectAll") + end; } Macro { - area="Editor"; - description="Colorer: Select Block"; - key="/.Alt]/"; + area = "Editor"; + description = "Colorer: Select Block"; + key = "/.Alt]/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; + action = function() + Plugin.Call(ColorerGUID, "Brackets", "SelectIn") + end; } Macro { - area="Editor"; - description="Colorer: Cross on/off"; - key="/.CtrlShiftC/"; + area = "Editor"; + description = "Colorer: Cross in current editor on/off"; + key = "/.CtrlShiftC/"; condition = function() return Plugin.Exist(ColorerGUID) end; - action=ColorerProcess; -} + action = function() + visible, style = Plugin.Call(ColorerGUID, "Editor", "CrossVisible") + if (visible == 1) then + visible = 0 + else + visible = 1 + end + Plugin.Call(ColorerGUID, "Editor", "CrossVisible", visible) + end; +} \ No newline at end of file diff --git a/misc/colorere.hlf b/misc/colorere.hlf index 94cec62..840e5ea 100644 --- a/misc/colorere.hlf +++ b/misc/colorere.hlf @@ -247,7 +247,7 @@ $# Macro functions Ограничений на макрорегионы не установлено. #...,"Settings",, )# : принимает следующие значения - "Menu" - Открывает меню настроек + "Menu" - Открывает меню настроек. Значение по умолчанию, если пустой. "Main" - Открывает окно главных настроек "Log" - Открывает окно настроек логирования "Hrc" - Открывает окно настроек параметров схем @@ -258,6 +258,11 @@ $# Macro functions Если не задан, возвращает текущее значение "SaveSettings" - Сохраняет настройки плагина. + #Работа с меню# + Работает только в MACROAREA_EDITOR. + #...,"Menu")# + Открывает меню плагина в редакторе + #Работа с типами файлов# Работает только в MACROAREA_EDITOR. #...,"Types",, )# @@ -322,22 +327,22 @@ $# Macro functions : принимает следующие значения "Refresh" - обновляет раскраску "Status" - Статус активности плагина для текущего редактора - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "CrossVisible" - Видимость и тип креста в редакторе Возвращает текущий стиль креста и правила отображения для данного редактора. - Число: 0 - не отображается; 1 - вертикальный; 2 - горизонтальный; 3 - полный крест - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы - Если указаны дополнительные параметры, то изменяет стиль и правила отображения - - Число: 1 - вертикальный; 2 - горизонтальный; 3 - полный крест - - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + Число: 0 - не отображается; 1 - вертикальный; 2 - горизонтальный; 3 - полный крест + Если указаны дополнительные параметры, то изменяет стиль и правила отображения. + - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + - Необязательный. Число: 1 - вертикальный; 2 - горизонтальный; 3 - полный крест "Pair" - Статус отображения парных элементов - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "Syntax" - Статус отображения синтаксиса - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "Progress" - возвращает процент парсинга текущего файла в редакторе. Целочисленное значение. diff --git a/misc/colorerr.hlf b/misc/colorerr.hlf index 9f18215..827521c 100644 --- a/misc/colorerr.hlf +++ b/misc/colorerr.hlf @@ -258,7 +258,7 @@ $# Macro functions Ограничений на макрорегионы не установлено. #...,"Settings",, )# : принимает следующие значения - "Menu" - Открывает меню настроек + "Menu" - Открывает меню настроек. Значение по умолчанию, если пустой. "Main" - Открывает окно главных настроек "Log" - Открывает окно настроек логирования "Hrc" - Открывает окно настроек параметров схем @@ -269,6 +269,11 @@ $# Macro functions Если не задан, возвращает текущее значение "SaveSettings" - Сохраняет настройки плагина. + #Работа с меню# + Работает только в MACROAREA_EDITOR. + #...,"Menu")# + Открывает меню плагина в редакторе + #Работа с типами файлов# Работает только в MACROAREA_EDITOR. #...,"Types",, )# @@ -333,22 +338,22 @@ $# Macro functions : принимает следующие значения "Refresh" - обновляет раскраску "Status" - Статус активности плагина для текущего редактора - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "CrossVisible" - Видимость и тип креста в редакторе Возвращает текущий стиль креста и правила отображения для данного редактора. - Число: 0 - не отображается; 1 - вертикальный; 2 - горизонтальный; 3 - полный крест - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы - Если указаны дополнительные параметры, то изменяет стиль и правила отображения - - Число: 1 - вертикальный; 2 - горизонтальный; 3 - полный крест - - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + Число: 0 - не отображается; 1 - вертикальный; 2 - горизонтальный; 3 - полный крест + Если указаны дополнительные параметры, то изменяет стиль и правила отображения. + - Число: 0 - выключен; 1 - включен; 2 - согласно параметрам схемы + - Необязательный. Число: 1 - вертикальный; 2 - горизонтальный; 3 - полный крест "Pair" - Статус отображения парных элементов - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "Syntax" - Статус отображения синтаксиса - - Число: 0 - выключен; 1 - включен; + - Число: 0 - выключен; 1 - включен; Если задан, то изменяется текущее значение и возвращает предыдущее значение Если не задан, возвращает текущее значение для данного редактора "Progress" - возвращает процент парсинга текущего файла в редакторе. Целочисленное значение. diff --git a/src/FarEditorSet.cpp b/src/FarEditorSet.cpp index 89f7ccb..290c9a2 100644 --- a/src/FarEditorSet.cpp +++ b/src/FarEditorSet.cpp @@ -410,8 +410,8 @@ INT_PTR WINAPI SettingDialogProc(HANDLE hDlg, intptr_t Msg, intptr_t Param1, voi int CurPosCons = (int) Info.SendDlgMessage(hDlg, DM_LISTGETCURPOS, fes->settingWindow.hrdCons, nullptr); int CurPosTm = (int) Info.SendDlgMessage(hDlg, DM_LISTGETCURPOS, fes->settingWindow.hrdTM, nullptr); - return !fes->TestLoadBase(temp, userhrd, userhrc, &fes->hrd_con_instances.at(CurPosCons)->hrd_name, &fes->hrd_rgb_instances.at(CurPosTm)->hrd_name, - false, FarEditorSet::HRCM_BOTH); + return !fes->TestLoadBase(temp, userhrd, userhrc, &fes->hrd_con_instances.at(CurPosCons)->hrd_name, + &fes->hrd_rgb_instances.at(CurPosTm)->hrd_name, false, FarEditorSet::HRCM_BOTH); } return Info.DefDlgProc(hDlg, Msg, Param1, Param2); @@ -1096,15 +1096,6 @@ bool FarEditorSet::configureLogging() return true; } -HANDLE FarEditorSet::openFromMacro(const struct OpenInfo* oInfo) -{ - auto area = (FARMACROAREA) Info.MacroControl(&MainGuid, MCTL_GETAREA, 0, nullptr); - auto* mi = (OpenMacroInfo*) oInfo->Data; - if (mi->Count > 1) - return execMacro(area, mi); - return nullptr; -} - HANDLE FarEditorSet::openFromCommandLine(const struct OpenInfo* oInfo) { auto* ocli = (OpenCommandLineInfo*) oInfo->Data; @@ -1208,18 +1199,82 @@ void FarEditorSet::enableColorerInEditor() #pragma region macro_functions +HANDLE FarEditorSet::openFromMacro(const struct OpenInfo* oInfo) +{ + auto area = (FARMACROAREA) Info.MacroControl(&MainGuid, MCTL_GETAREA, 0, nullptr); + auto* mi = (OpenMacroInfo*) oInfo->Data; + return execMacro(area, mi); +} + +void* FarEditorSet::execMacro(FARMACROAREA area, OpenMacroInfo* params) +{ + if (params->Values[0].Type != FMVT_STRING) { + return nullptr; + } + + SString command_type = SString(CString(params->Values[0].String)); + if (CString("Settings").equalsIgnoreCase(&command_type)) { + return macroSettings(area, params); + } + + if (CString("Menu").equalsIgnoreCase(&command_type)) { + return macroMenu(area, params); + } + + // one parameter functions only up here + if (params->Count == 1) { + return nullptr; + } + + if (CString("Types").equalsIgnoreCase(&command_type)) { + return macroTypes(area, params); + } + + if (CString("Brackets").equalsIgnoreCase(&command_type)) { + return macroBrackets(area, params); + } + + if (CString("Region").equalsIgnoreCase(&command_type)) { + return macroRegion(area, params); + } + + if (CString("Functions").equalsIgnoreCase(&command_type)) { + return macroFunctions(area, params); + } + + if (CString("Errors").equalsIgnoreCase(&command_type)) { + return macroErrors(area, params); + } + + if (CString("Editor").equalsIgnoreCase(&command_type)) { + return macroEditor(area, params); + } + + if (CString("ParamsOfType").equalsIgnoreCase(&command_type)) { + return macroParams(area, params); + } + + return nullptr; +} + void* FarEditorSet::macroSettings(FARMACROAREA area, OpenMacroInfo* params) { (void) area; - if (FMVT_STRING != params->Values[1].Type) + if (params->Count == 1) { + menuConfigure(); + return INVALID_HANDLE_VALUE; + } + + if (FMVT_STRING != params->Values[1].Type) { return nullptr; + } SString command = SString(CString(params->Values[1].String)); if (CString("Main").equalsIgnoreCase(&command)) { return configure() ? INVALID_HANDLE_VALUE : nullptr; } if (CString("Menu").equalsIgnoreCase(&command)) { - openMenu(12); + menuConfigure(); return INVALID_HANDLE_VALUE; } if (CString("Log").equalsIgnoreCase(&command)) { @@ -1254,6 +1309,18 @@ void* FarEditorSet::macroSettings(FARMACROAREA area, OpenMacroInfo* params) return nullptr; } +void* FarEditorSet::macroMenu(FARMACROAREA area, OpenMacroInfo* params) +{ + if (area != MACROAREA_EDITOR) + return nullptr; + + if (params->Count == 1) { + openMenu(); + return INVALID_HANDLE_VALUE; + } + return nullptr; +} + void* FarEditorSet::macroTypes(FARMACROAREA area, OpenMacroInfo* params) { if (area != MACROAREA_EDITOR || !Opt.rEnabled || FMVT_STRING != params->Values[1].Type) @@ -1504,23 +1571,23 @@ void* FarEditorSet::macroEditor(FARMACROAREA area, OpenMacroInfo* params) auto cur_status = editor->getCrossStatus(); if (params->Count > 2) { - // change style + // change status int val = static_cast(macroGetValue(params->Values + 2)); - if (val >= FarEditor::CROSS_STYLE::CSTYLE_VERT && val <= FarEditor::CROSS_STYLE::CSTYLE_BOTH) - editor->setCrossStyle(val); + if (val >= FarEditor::CROSS_STATUS::CROSS_OFF && val <= FarEditor::CROSS_STATUS::CROSS_INSCHEME) + editor->setCrossState(val, Opt.CrossStyle); } if (params->Count > 3) { - // change status + // change style int val = static_cast(macroGetValue(params->Values + 3)); - if (val >= FarEditor::CROSS_STATUS::CROSS_OFF && val <= FarEditor::CROSS_STATUS::CROSS_INSCHEME) - editor->setCrossStatus(val); + if (val >= FarEditor::CROSS_STYLE::CSTYLE_VERT && val <= FarEditor::CROSS_STYLE::CSTYLE_BOTH) + editor->setCrossStyle(val); } auto* out_params = new FarMacroValue[2]; out_params[0].Type = FMVT_INTEGER; - out_params[0].Integer = cur_style; + out_params[0].Integer = cur_status; out_params[1].Type = FMVT_INTEGER; - out_params[1].Integer = cur_status; + out_params[1].Integer = cur_style; return macroReturnValues(out_params, 2); } @@ -1679,46 +1746,4 @@ void* FarEditorSet::macroParams(FARMACROAREA area, OpenMacroInfo* params) return nullptr; } - -void* FarEditorSet::execMacro(FARMACROAREA area, OpenMacroInfo* params) -{ - if (params->Count < 2 || params->Values[0].Type != FMVT_STRING) - return nullptr; - - SString command_type = SString(CString(params->Values[0].String)); - if (CString("Settings").equalsIgnoreCase(&command_type)) { - return macroSettings(area, params); - } - - if (CString("Types").equalsIgnoreCase(&command_type)) { - return macroTypes(area, params); - } - - if (CString("Brackets").equalsIgnoreCase(&command_type)) { - return macroBrackets(area, params); - } - - if (CString("Region").equalsIgnoreCase(&command_type)) { - return macroRegion(area, params); - } - - if (CString("Functions").equalsIgnoreCase(&command_type)) { - return macroFunctions(area, params); - } - - if (CString("Errors").equalsIgnoreCase(&command_type)) { - return macroErrors(area, params); - } - - if (CString("Editor").equalsIgnoreCase(&command_type)) { - return macroEditor(area, params); - } - - if (CString("ParamsOfType").equalsIgnoreCase(&command_type)) { - return macroParams(area, params); - } - - return nullptr; -} - #pragma endregion macro_functions diff --git a/src/FarEditorSet.h b/src/FarEditorSet.h index 1887c0e..6542d65 100644 --- a/src/FarEditorSet.h +++ b/src/FarEditorSet.h @@ -210,6 +210,7 @@ class FarEditorSet void setEmptyLogger(); void* macroSettings(FARMACROAREA area, OpenMacroInfo* params); + void* macroMenu(FARMACROAREA area, OpenMacroInfo* params); void* macroTypes(FARMACROAREA area, OpenMacroInfo* params); void* macroBrackets(FARMACROAREA area, OpenMacroInfo* params); void* macroRegion(FARMACROAREA area, OpenMacroInfo* params);