View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000018 | Wishes | Macro | public | 2005-10-21 07:02 | 2013-02-03 00:33 |
Reporter | vskirdin | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Summary | 0000018: Библиотека макрофункций | ||||
Description | В реестре держать раздел KeyMacros\Funcs - библиотека сторонних макрофункций. Функция либо местная, в терминах макроязыка, либо предоставляемая плагином (посредством ProcessMacroW). Имя подраздела - это имя "функции" Значения у каждого подраздела: Syntax:reg_sz - синтаксис функции Params:reg_dword - количество параметров у функции OParams:reg_dword - необязательные параметры функции Sequence:reg_sz - тело функции Flags:reg_dword - флаги GUID:reg_sz - GUID или путь к плагину в терминах PluginsCache (зависит от Flags) Description:reg_sz - необязательное описание Flags - набор битов 0: в GUID путь к плагину, как в PluginsCache иначе GUID 1: использовать Sequence вместо плагина; оно же будет юзаться, если GUID пуст 2: ... Обращение к такой функции, как к обычной abs, mix, len, etc. Если Plugin не пуст, Sequence игнорируется. Plugin - имя подраздела из ветки PluginsCache Например: [HKEY_CURRENT_USER\Software\Far2\KeyMacros\Funcs\rad2grd] "Syntax"="d=rad2grd(V)" "Params"=dword:1 "OParams"=dword:0 "Sequence"="(PI/180)*$1" "Flags"=dword:1 "GUID"="" "Description"="Преобразование угла из радиан в градусы" [HKEY_CURRENT_USER\Software\Far2\KeyMacros\Funcs\sin] "Syntax"="d=sin(V)" "Params"=dword:1 "OParams"=dword:0 "Sequence"="" "Flags"=dword:0 "GUID"="C:/Program Files/Far/Plugins/Calc/calc.dll" "Description"="Вычисление значения синуса в военное время" Параметры: $1, $2, $3 - параметры для Sequence (пока недодумал) ... Возвращаемое значение (для "местных"): пока as is - результат последнего действия будет результатом функции.. хотя... можно придумать какой нибудь $Ret ... | ||||
Tags | No tags attached. | ||||
Build | 0 | ||||
|
Пример для большего понимания идеи ;-) Допустим у нас решен 0000466 и есть плагин, который: 0) называется calc.dll (C:\Program Files\Far\Plugins\Calc\calc.dll) 1) в PluginsCache он, плагин, прокеширован и его ветка зовется "C:/Program Files/Far/Plugins/Calc/calc.dll" 2) экспортирует функцию ProcessMacroW 3) в функции ProcessMacroW знает как обработать "sin" Тогда, при наличии вот такого конструкта: [HKEY_CURRENT_USER\Software\Far2\KeyMacros\MCode\sin] "Params"=dword:1 "OParams"=dword:0 "Sequence"="" "Plugin"="C:/Program Files/Far/Plugins/Calc/calc.dll" "Description"="Вычисление значения синуса в военное время" макроядро при компиляции макроса корректно отработает кусок "%d=sin(0.12);" |
|
идея интересна тем. что подгребает под себя идею алиасов и расширение макросов плагинами. недурно, но, конечно возникают другие трудности - неудобно менеджерить всю эту кухню (ну для этого можно написать плагин или доработать MacroEdit) и мне не очень нравится то, что надо писать полный путь к плагину. опять никакой портабельности или гибкости. эх, когда уже там гуиды появятся у плагинов?... ну и о коллизиях надо подумать. хотя если например мржно будет называть "функцию", например [HKEY_CURRENT_USER\Software\Far2\KeyMacros\MCode\alt.sin] то это будет как неймспейс. ну или [HKEY_CURRENT_USER\Software\Far2\KeyMacros\MCode\alt_sin] вобщем я за то, что проще реализовать |
|
Да, на счет пути это хреново... Но можно для начала так, а потом в "Plugin" писать GUID (или вообще отдельный параметр "GUID" ввести, наравне с "Plugin", но приоритет будет у гуида) |
|
в поставке рег файлов с плагином надо будет пользователю самому указывать где он положил плагин. или делать установщик батниковский как у zg в BCopy |
|
Обновил описание |
|
начальное приближение в build 1127 |
|
неактуально |
Date Modified | Username | Field | Change |
---|---|---|---|
2005-10-21 07:02 | vskirdin | New Issue | |
2009-09-08 13:16 | vskirdin | Description Updated | |
2009-09-08 13:40 | vskirdin | Note Added: 0004043 | |
2009-09-08 13:40 | vskirdin | Relationship added | related to 0000466 |
2009-09-08 15:06 | CrOm | Note Added: 0004044 | |
2009-09-08 15:16 | vskirdin | Note Added: 0004046 | |
2009-09-08 15:33 | CrOm | Note Added: 0004047 | |
2009-09-08 17:40 | vskirdin | Note Added: 0004049 | |
2009-09-08 17:40 | vskirdin | Summary | Библиотека MCode (MLibrary) => Библиотека макрофункций |
2009-09-08 17:40 | vskirdin | Description Updated | |
2009-09-08 17:41 | vskirdin | Description Updated | |
2009-09-08 17:42 | vskirdin | Description Updated | |
2009-09-08 17:45 | vskirdin | Description Updated | |
2009-09-15 16:45 | vskirdin | Note Added: 0004085 | |
2012-11-06 11:08 | vskirdin | Build | => 0 |
2012-11-06 11:08 | vskirdin | Note Added: 0009706 | |
2012-11-06 11:08 | vskirdin | Status | new => closed |
2012-11-06 11:08 | vskirdin | Assigned To | => vskirdin |
2012-11-06 11:08 | vskirdin | Resolution | open => fixed |
2013-02-03 00:33 | alexy | Severity | minor => feature |