Интроспекция макросов/скриптов: получить описание и пр.

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6066
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 299 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Shmuel »

Latest post of the previous page:

LAT wrote:
Fri 06 Dec, 2019 16:19
Имхо, стоило бы начать с рассмотрения реальных задач, для которых могут потребоваться такие возможности.
Согласен с вами, не стоит рубить сплеча. Время покажет.

citRiks
Posts: 471
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 137 times
Been thanked: 41 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by citRiks »

LAT wrote:
Fri 06 Dec, 2019 16:19
стоило бы начать с рассмотрения реальных задач, для которых могут потребоваться такие возможности
Вероятно, прежде всего для беглого обзора сложных и объёмных макросов. Я набросал себе для интереса черновик тестового .
Который, кроме прочего, показывает, что некоторые позиции (action, condition, selected, original) с налёта не берутся.

LAT
Posts: 296
Joined: Thu 21 Jan, 2010 20:00
Has thanked: 15 times
Been thanked: 28 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by LAT »

citRiks wrote:
Fri 06 Dec, 2019 17:09
LAT wrote:
Fri 06 Dec, 2019 16:19
стоило бы начать с рассмотрения реальных задач, для которых могут потребоваться такие возможности
Вероятно, прежде всего для беглого обзора сложных и объёмных макросов...
А чем уже существующие инструменты обзора/мониторинга макросов не устраивают?
UPD. И зачем для беглого мониторинга возможность изменения полей (кроме key и area)?
Last edited by LAT on Fri 06 Dec, 2019 17:23, edited 1 time in total.

citRiks
Posts: 471
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 137 times
Been thanked: 41 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by citRiks »

LAT wrote:
Fri 06 Dec, 2019 17:17
А чем уже существующие инструменты обзора/мониторинга макросов не устраивают?
Мне нравится форма представления макроса уже в том несовершенном , который получается по результатам работы вышеприведённого тестового макроса. Тем, что всё приведено в целом обзорно. И, я полагаю, имхо, что добавление этой формы в "существующие инструменты обзора/мониторинга" будет к лучшему.
зачем для беглого мониторинга возможность изменения полей (кроме key и area)?
Лично я об этом и не заикался. И, более того, дистанционное, не непосредственное, изменение полей (в т.ч. и key, и area) не нахожу практичным. Ну, разве что, умозрительно могу представить их для оперативной отладки и опробования скриптов.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

citRiks wrote:
Fri 06 Dec, 2019 17:09
Который, кроме прочего, показывает, что некоторые позиции (action, condition, selected, original) с налёта не берутся.
Не, тогда уж надо так, в теле макроса:

Code: Select all

for k,v in pairs(_mmd) do mf.printconsole(k, " = ", v) end
"_mmd_original" в другом варианте реализации (третий "изящный") [utils.lua] равноценна "_mmd" (без ничего)
Если у вас третий "изящный" вариант, тогда лучше как здесь выше.
там и увидите ваши функции (=action, condition, selected) :) нечитаемые правда.
но! зато ее можно использовать отделно от самого макроса.. если ты уже находишься в макросе.. т.е., создать рекурсивный макрос.. хехе..
или если ее куда нибудь отдельно положить на этапе построения в [utils.lua], то можно ею пользоваться совсем-совсем отдельно.
и так как она будет бежать в том же контексте обьекта макроса, то тогда имеем возможность "дистанционно" управлять макросом, без необходимости его срабатывания на его триггер (клавиатурные, аутостарт, др.)
Я слегка модифицировал ваш тестовый макрос для пущей наглядности:
  1. local l = 41 -- ширина участка поля description в меню выбора макроса
  2. -- (при применении key2Process
  3. -- (см. key2Process.lua - автор IgorZ https://forum.farmanager.com/viewtopic.php?p=152518#p152518))
  4.  
  5. Macro { description = "получить макроопределения (Xerox)";
  6.     code="Keys(\"Right F4 End Left CtrlShiftLeft CtrlIns Esc ShiftIns\")";
  7.     area = "common"; id="7F621267-55A7-4CFE-8A0B-BCEE38DE67B7";
  8.     guid="";
  9.     selected=true;
  10.     lang="";
  11.     define="";
  12.     flags="";
  13.     priority=50;
  14.     sortpriority="100";
  15.     prefixes="";
  16.     filemask="*.*";
  17.     callback="";
  18.     callbackId="";
  19.     group="";
  20.     mode="";
  21.     key="CtrlAltShiftF12 CtrlAltF12 ShiftF12";
  22.     key2="CtrlAltF12";
  23.     bdsize=l; --key="CtrlAltF12";  
  24.     condition=function() return 1==1 end;
  25.     action = function()
  26. far.Message(
  27. "\n1. description - описание: ".._mmd_description.."\n"..
  28. "2. area - области действия: ".._mmd_area.."\n"..
  29. "3. id - идентификатор: ".._mmd_id.."\n"..
  30. "4. guid - идентификатор: ".._mmd_guid.."\n"..
  31. "5. key - ключи макроса: ".._mmd_key.."\n"..
  32. "6. sortpriority - приоритет сортировки в меню выбора: ".._mmd_sortpriority.."\n"..
  33. "7. priority - приоритет исполнения: ".._mmd_priority.."\n"..
  34. "8. flags - флаги: ".._mmd_flags.."\n"..
  35. "9. prefixes - префиксы: ".._mmd_prefixes.."\n"..
  36. "10. filemask - маски файлов: ".._mmd_filemask.."\n"..
  37. "11. key2 - ключ вызова из меню выбора макроса: ".._mmd_key2.."\n"..
  38. "11а. bdsize - ширина участка поля description в меню выбора макроса: ".._mmd_bdsize.."\n"..
  39. "12. callback: ".._mmd_callback.."\n"..
  40. "13. callbackId: ".._mmd_callbackId.."\n"..
  41. "14. group: ".._mmd_group.."\n"..
  42. "15. lang - язык: ".._mmd_lang.."\n"..
  43. "16. mode: ".._mmd_mode.."\n"..
  44. "17. define: ".._mmd_define.."\n"..
  45. "18. FileName - имя файла: ".._mmd_filename, "Макроописания данного тестового макроса:", nil, "l"
  46.     )
  47. mf.printconsole("===== full introspection/metadata is here: =====")
  48. for k,v in pairs(_mmd) do mf.printconsole(k, " = ", v) end
  49. mf.printconsole("===== end of that suff =====")
  50.     end
  51.     end;
  52. }
На выходе получилось:

И тут становится понятным почему у вас не было видно все что функции, потому что это уже не текст а уже сами функии, т.е видим ее адрес а не ее текст.
Выцепить текст конкретной функции в рамках моего подхода, я пока не знаю как
Можно еще впрочем в метадату добавить целиком текст файла из которого загрусился каждый макрос, но это вряд ли нужно, так как path все рано у нас уже есть (_mmd_filename), а разбиения текста на функции все равно не получим

П.С.
Просьба польозваться 3-м "изящным" вариантом, который технически более корректен.
Смотреть результат лучше как я здесь привел пример, с циклом по таблице _ММД
Last edited by Xerox on Sat 07 Dec, 2019 11:26, edited 12 times in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

citRiks wrote:
Fri 06 Dec, 2019 18:23
И, я полагаю, имхо, что добавление этой формы в "существующие инструменты обзора/мониторинга" будет к лучшему.
Да. Ничуть не умаляя достоинств уже существующего,
предложенное решение поражает своим изяществом.
Реализация оного сделает ФАР недостижимым для конкурентов,
особенно в области самоописания программных модулей,
и как следствие, более полной автоматизации.

citRiks
Posts: 471
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 137 times
Been thanked: 41 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by citRiks »

Xerox wrote:
Fri 06 Dec, 2019 19:20
Просьба польозваться 3-м "изящным" вариантом
Да.
Xerox wrote:
Fri 06 Dec, 2019 19:20
Смотреть результат лучше как я здесь привел пример, с циклом по таблице _ММД
Результаты вывода в диалог легко копируются по CtrlC, а как Вы снимали вышеприведённый output с консоли? Через AltIns?

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

citRiks wrote:
Sat 07 Dec, 2019 05:11
Результаты вывода в диалог легко копируются по CtrlC, а как Вы снимали вышеприведённый output с консоли? Через AltIns?
Ой и правда, про Ктл-С нa диалогe я не знал O_o.
Вывод в консоль - да, по Альт-Инс, Ктл-<стрелка> еще там дает шаг в 10 позиций курсора
Знакомы ли вы еще с какими удобными способами?

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

В плане других инструментов насчет менеджинга скриптов - значительную помощь оказывает "Менеджер Скриптов Луа" и "Луа Експорер Адвансед".
Их возможности впечатляют.
Я пытался оттуда понять как они берут всю эту метадату, и сломал себе мозги.
Может кто-нибудь подскажет принцип как "Луа Експлорер" выцепляет код макроса и остальное тут?

(здесь на этом диалоге кстати Ктл-С не сработал, скопировал только заголовок.. есть ли еще варианты копирования диалога?)
А хотелось элементарного "самоанализа", для которого надо тащить минимум изменений, минимум ЦПУ, минимум мозгов.
Поэтому и сделан такой вариант, 4 строчки добавлены в utils.lua, и все как на ладони.
В том же месте, в принципе, также просто можно сделать дамппинг загруженного кода, для последующего анализа
Last edited by Xerox on Sat 07 Dec, 2019 11:25, edited 1 time in total.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

Возможно (я так думаю и довольно уверен), тем же способом можно получить разобранный регексп макроса.
Который тут кто-то очень и давно хотел.
Если будет общественное одобрение и/или согласие включить предложенное изменение в мастер, то попробую доколупать эту тему

citRiks
Posts: 471
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 137 times
Been thanked: 41 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by citRiks »

Xerox wrote:
Mon 16 Dec, 2019 10:54
тем же способом можно получить разобранный регексп макроса
Это было бы очень полезно! Давно удивляюсь почему в макробраузерах не встречается такого, чтобы ключи, заданные в макросах регекспами, можно было бы посмотреть также и в виде перечисления реальных клавишесочетаний.

User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 9 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by Xerox »

citRiks,
Это типа превращать регекспы обратно в нажатия кнопок?
Та не, тут в соседних темах хотели не это, хотели обьект РегЕкспа, который строится из того что мы задаем строкой регексп-выражения
Из того что мы создаем так, создается обьект регекспа, который типа эффективнее держать живым, чем создавать заново каждый раз из строчки, для чего-то там.
С другой стороны, если мы им (желающим использовать регексп в каком скриптинге) уже даем в метадате строку, то они уж могут из нее создать регексп один раз и пользоваться дальше.
так что я беру обратно вопрос-предложение, то что я имелл ввиду, по сути уже есть и так во мною предложенном.
Ну это если я правильно всех понял, конечно

buniak_a_h
Posts: 1606
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 109 times
Been thanked: 139 times
Contact:

Интроспекция макросов/скриптов: получить описание и пр.

Post by buniak_a_h »

citRiks wrote:
Mon 16 Dec, 2019 14:16
Давно удивляюсь почему в макробраузерах не встречается такого, чтобы ключи, заданные в макросах регекспами, можно было бы посмотреть также и в виде перечисления реальных клавишесочетаний.
Ну Вы даёте! Вот например регэксп /.*T/i Формально "расширений" бесконечно (т.к. в начале - любое количество любых символов). И даже если ограничить возможными именами клавиш, их будет много. Тут как в электронной подписи: проверить легко, а сформировать (найти варианты подписей, проходящие проверку) - трудно…

citRiks
Posts: 471
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 137 times
Been thanked: 41 times

Интроспекция макросов/скриптов: получить описание и пр.

Post by citRiks »

buniak_a_h wrote:
Mon 16 Dec, 2019 23:05
Вот например регэксп /.*T/i Формально "расширений" бесконечно (т.к. в начале - любое количество любых символов). И даже если ограничить возможными именами клавиш, их будет много
Разумеется, подобные регекспы тоже применяются. (Например, ключ key="/.*/"; используется в одном из макросов популярного скрипта Автофильтр вместо быстрого поиска). И такой регексп в развёрнутом режиме можно было бы показывать макробраузером как "любой ключ". Но всё же это крайний случай. Большинство регекспов, применяемых в ключах макросов, вполне воспроизводимы в развёрнутом виде.

Кстати, имхо, было бы хорошей манерой наряду с ключами, содержащими регекспы, одновременно помещать в макросы в закомментированном виде те же ключи также и развёрнутыми. Это даёт возможность быстрого поиска макросов, назначенных на одинаковые ключи.

Post Reply

Return to “Обсуждение макросов”