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

Здесь обсуждается всё, что касается макросов.
User avatar
Xerox
Posts: 393
Joined: Sun 20 Oct, 2019 15:50
Has thanked: 354 times
Been thanked: 8 times

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

Post by Xerox »

Подскажите пожалуйста как получить description (и другую metadata?) для макроса, из самого макроса в runtime (при исполнении)?
Зачем нужно - писать например какой нибудь лог,
где макрос пишет "я, такой то макрос, делаю/сделал то-то" (kind of self-tracing ability)

Поможите чем можити
ответ смотреть в моих сообщениях на этой странице, -
полное пошаговое описание


Keywords/tags: macro, script, metadata, self, description, self-reading, introspection
Last edited by Xerox on Tue 10 Dec, 2019 11:50, edited 10 times in total.

buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by buniak_a_h »

mf.GetMacroCopy не пробовали?
Он, конечно, требует номера … Но если знаешь Id, то можно найти "себя".

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

buniak_a_h, Спасибо, да!
но хотелось бы его как раз избежать, так как там унутри реализован простой перебор,
да еще и опять же нужен ключ, что не круто.
Впрочем, если там все равно перебор по ключу, то можно проверить нельзя ли сделать перебор еще по чему другому без требования ключа..
В любом случае огромное спасибо что прояснили, думал я чего-то напрочь упускаю
немного странно что нет без костылей в виде перебора, но это точно не самое страшное.
Если мнея читают девелоперы, то просьба добавить функциональность, если можно,
или прояснить может еще чего есть хитрого для интроспекции энтой?

PS
А свой собственный ключ мы "иcкоропки" знаем?
Или надо сделать отдельную переменную, и ее задать и в "кей = мой_кей;", и потом и в ГетМакроКопи(мой_кей)?
Но тогда получается что проще и в дескрипшион хранить в переменной и не париться .. ?
Last edited by Xerox on Thu 05 Dec, 2019 11:42, edited 1 time in total.

buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by buniak_a_h »

Xerox wrote:
Thu 05 Dec, 2019 11:34
просьба добавить функциональность
Да, было бы удобно, чтобы эта функция с аргументом index=0 возвращала всё тоже самое для выполняемого макроса.

User avatar
John Doe
Бюрократ
Posts: 12598
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 35 times
Been thanked: 260 times

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by John Doe »

buniak_a_h wrote:
Thu 05 Dec, 2019 11:44
Да, было бы удобно, чтобы эта функция с аргументом index=0 возвращала всё тоже самое для выполняемого макроса.
Не уверен, что стоит наворачивать такое.
Альтернативы:
- передавать в функцию параметром
- вернуть числовое возвращаемое значение для Macro/Event (как было до LuaMacro build 538)

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

John Doe wrote:
Thu 05 Dec, 2019 11:52
- передавать в функцию параметром
3виняюсь, это как? параметр - это гуид, который я и предлагал (за неимением выбора) хранить отдельно в переменной?
John Doe wrote:
Thu 05 Dec, 2019 11:52
- вернуть числовое возвращаемое значение для Macro/Event (как было до LuaMacro build 538)
Как это было и сейчас так нет?
Пока не до конца понял, но если можно вернуть, то пусть будет?
Функционал юзеру карман на тянет, насчет девелопмента? - не знаю,
но думаю что всем лучше будет если внутри макроса можно будет знать что мы за макрос там такой..
Если и сейчас как-то можно "вернуть возвращяемое значение", то прошу примерчик?
Last edited by Xerox on Thu 05 Dec, 2019 13:09, edited 1 time in total.

buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by buniak_a_h »

John Doe wrote:
Thu 05 Dec, 2019 11:52
Альтернативы:
- передавать в функцию параметром
- вернуть числовое возвращаемое значение для Macro/Event (как было до LuaMacro build 538)
Первое можно, но лично не вижу особой проблемы пробежаться по всем макросам, сравнить Id-ы с текущим (он известен) и получить description. Насколько я понимаю, проблема в том, что description может зависеть от контекста, языка и пр. … А Guid - константа.
Второе я не понял.

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

buniak_a_h wrote:
Thu 05 Dec, 2019 14:41
сравнить Id-ы с текущим (он известен)
Эммм.. и откуда он известен внутри исполняемого макроса во время исполнения?
(если мы его предварительно снаружи руками не сохранили в переменной)
buniak_a_h wrote:
Thu 05 Dec, 2019 14:41
вижу особой проблемы пробежаться по всем макросам
в жизни вообще есть только лишь одна единственная проблема, это когда нет денег :)
Ну ок, получается надо перебор делать, сохранив ручками descriptions & guids
Last edited by Xerox on Thu 05 Dec, 2019 18:36, edited 2 times in total.

buniak_a_h
Posts: 1398
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 96 times
Been thanked: 108 times
Contact:

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by buniak_a_h »

Xerox wrote:
Thu 05 Dec, 2019 18:29
Эммм.. и откуда он известен внутри исполняемого макроса во время исполнения?
Исходник у Вас. Менять Id смысла нет. Задайте константу, определите её том же файле, что и макрос - и он будет её знать.
Вариант с динамическим добавлением макроса по far.MacroAdd - наверно, можно исхитриться запоминать Id в таблице. Над этим я не думал…
Xerox wrote:
Thu 05 Dec, 2019 18:29
(если мы его предварительно снаружи руками не сохранили в переменной)
Наоборот будет правильней. Пишете
local MacroID='…'
и ниже

Code: Select all

Macro {id = MacroID;
…
}
Last edited by buniak_a_h on Thu 05 Dec, 2019 19:00, edited 1 time in total.

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

buniak_a_h wrote:
Thu 05 Dec, 2019 18:59
Вариант с динамическим добавлением макроса по far.MacroAdd - наверно, можно исхитриться запоминать Id в таблице. Над этим я не думал…
а я не только думал, но и сделал ;)
и собственно вот и ультимативное решение всех метаданных и интроспекций будь они неладны,
далее по тексту:

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

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

Post by Xerox »

Смело берем за шкирку "%farhome%\Plugins\LuaMacro\utils.lua",
и у него где то на 350-й строчке есть такой код:


.. но мы его не пугаемся, и аккурат за ним лепим ему свою блямбу:

:!: прим: смотреть более рекомедованные 2-й и 3-й варианты блямбы на второй странице: viewtopic.php?p=157564#p157564
Last edited by Xerox on Fri 06 Dec, 2019 17:18, edited 16 times in total.

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

Уффф...
Но отдыхать некогда, надо же как-то продемонстрировать достижения.
Уже из последних сил пишем такой макрос:
  1. Macro { description = "-=# cool macro description here #=-";
  2.     area = "common";
  3.     key = "CtrlAltF12";
  4.     action = function()
  5.         far.Message(_description .. "\n..\nTa-dammm!",
  6.             "Here above, we finally get macro self description: ")
  7.     end;
  8. }

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

Как получить description для макроса из самого макроса в runtime при исполнении?

Post by Xerox »

.. твердой рукой жамкаем Ctrl+Alt+F12, и .. - вот он, невероятный успех!
image.png
image.png (4.45 KiB) Viewed 491 times

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

Как получить description для макроса из самого макроса в runtime при исполнении? (+решение)

Post by Xerox »

Как пытливый взгляд читателя уже успел заметить, мы собрали здесь не только description, но и вообще все возможные метаданные.
Идут с подчеркиванием, чтобы не сконфликтовать там с какими уже существующими искаропки блямбами (нидайбожиупасигосподь):
Last edited by Xerox on Thu 05 Dec, 2019 22:35, edited 1 time in total.

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

Как получить description для макроса из самого макроса в runtime при исполнении? (+РЕШЕНИЕ ВСЕ МЕТАДАННЫЕ/ ИНТРОСПЕКЦИЯ)

Post by Xerox »

Технически же, я и сам не понял что мы тут сделали.
То ли корявое ООП для ЛУА, то ли другую какую неведомую зверюшку, поскольку что на знакомое мне ООП это мало похоже

Свершили же мы это, дабы облегчить жизнь следующим поколениям, ступившим на тяжкую стезю ФАР скриптинга на ЛУА.
Думаю практических применений тут довольно много, и часть из них, как я считаю, совершенно необходима для нормального девелопмента.
Надеюсь одмины внесут эту небольшую правку "%farhome%\Plugins\LuaMacro\utils.lua" в дистрибутив?
Потому что никакого вреда кроме пользы я лично не вижу..
Last edited by Xerox on Thu 05 Dec, 2019 23:23, edited 3 times in total.

Post Reply

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