View Issue Details

IDProjectCategoryView StatusLast Update
0000018WishesMacropublic2013-02-03 04:33
ReportervskirdinAssigned Tovskirdin 
PrioritynormalSeverityfeatureReproducibilityalways
Status closedResolutionfixed 
Product Version 
Target VersionFixed in Version 
Summary0000018: Библиотека макрофункций
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
...
TagsNo tags attached.
Build0

Relationships

related to 0000466 closedshmuel Расширение макроязыка плагинами 

Activities

vskirdin

2009-09-08 17:40

administrator   bugnote:0004043

Пример для большего понимания идеи ;-)

Допустим у нас решен 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);"

CrOm

2009-09-08 19:06

reporter   bugnote:0004044

идея интересна тем. что подгребает под себя идею алиасов и расширение макросов плагинами.

недурно, но, конечно возникают другие трудности - неудобно менеджерить всю эту кухню (ну для этого можно написать плагин или доработать MacroEdit)

и мне не очень нравится то, что надо писать полный путь к плагину. опять никакой портабельности или гибкости.
эх, когда уже там гуиды появятся у плагинов?...

ну и о коллизиях надо подумать. хотя если например мржно будет называть "функцию", например
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\MCode\alt.sin]
то это будет как неймспейс.
ну или
[HKEY_CURRENT_USER\Software\Far2\KeyMacros\MCode\alt_sin]

вобщем я за то, что проще реализовать

vskirdin

2009-09-08 19:16

administrator   bugnote:0004046

Да, на счет пути это хреново...
Но можно для начала так, а потом в "Plugin" писать GUID (или вообще отдельный параметр "GUID" ввести, наравне с "Plugin", но приоритет будет у гуида)

CrOm

2009-09-08 19:33

reporter   bugnote:0004047

в поставке рег файлов с плагином надо будет пользователю самому указывать где он положил плагин. или делать установщик батниковский как у zg в BCopy

vskirdin

2009-09-08 21:40

administrator   bugnote:0004049

Обновил описание

vskirdin

2009-09-15 20:45

administrator   bugnote:0004085

начальное приближение в build 1127

vskirdin

2012-11-06 15:08

administrator   bugnote:0009706

неактуально

Issue History

Date Modified Username Field Change
2005-10-21 11:02 vskirdin New Issue
2009-09-08 17:16 vskirdin Description Updated View Revisions
2009-09-08 17:40 vskirdin Note Added: 0004043
2009-09-08 17:40 vskirdin Relationship added related to 0000466
2009-09-08 19:06 CrOm Note Added: 0004044
2009-09-08 19:16 vskirdin Note Added: 0004046
2009-09-08 19:33 CrOm Note Added: 0004047
2009-09-08 21:40 vskirdin Note Added: 0004049
2009-09-08 21:40 vskirdin Summary Библиотека MCode (MLibrary) => Библиотека макрофункций
2009-09-08 21:40 vskirdin Description Updated View Revisions
2009-09-08 21:41 vskirdin Description Updated View Revisions
2009-09-08 21:42 vskirdin Description Updated View Revisions
2009-09-08 21:45 vskirdin Description Updated View Revisions
2009-09-15 20:45 vskirdin Note Added: 0004085
2012-11-06 15:08 vskirdin Build => 0
2012-11-06 15:08 vskirdin Note Added: 0009706
2012-11-06 15:08 vskirdin Status new => closed
2012-11-06 15:08 vskirdin Assigned To => vskirdin
2012-11-06 15:08 vskirdin Resolution open => fixed
2013-02-03 04:33 alexy Severity minor => feature