StackTracePlus @Xer0X — расширенный анализ стека, полный обзор контекста ошибки или любого другого runtime-контекстa

Здесь обсуждается всё, что касается макросов.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by Ann »

Latest post of the previous page:

citRiks,
Ann wrote: Sat 20 Feb, 2021 05:15А нельзя ли для того, чтобы в каждом новом экземпляре Фара не копипастить Ваше дополнение в _макроинит.луа, сделать с ним примерно то, что в своё время сделал со своим дополнением 2useven10? Он преобразовал его в макрос с flags="RunAfterFARStart" (см. viewtopic.php?p=133096#p133096)
Отбой. buniak_a_h указал как надо делать в соответствии с %FarHome%\Encyclopedia\macroapi_manual.ru.chm и я проверил и подтверждаю это.

Т.е. вполне можно сразу же пользоваться указанной Вами ссылкой на _macroinit.lua без лишней суеты.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by Shmuel »

Ann wrote: Sat 20 Feb, 2021 21:39
buniak_a_h wrote: Sat 20 Feb, 2021 18:00 1. Я только что проверил.
[...] Ну я и решил попробовать…
Сделал по Вашему совету и подтверждаю, что это вполне работает.
Оно работает чисто случайно, видимо far.RecursiveSearch подхватывает _macroinit.lua раньше, чем файлы, где имена не начинаются с подчёркивания.
Это может на одной системе работать, а на другой нет (или измениться после апгрейда Фара или ОС).
Кроме того, в папке может быть файл, например, _abc.lua, который подхватится раньше.
Гарантия исполнения _macroinit.lua в первую очередь - только если лежит в "root"-папке (например %farprofile%\Macros\Scripts), но не для подпапок.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by citRiks »

Ann, Замечательно :) а я уже распихал у себя макроинит,
в принципе @JD прав что если можно обойтись без макроинита,
то значит нужно обойтись без этого.
и действительно, все зачем нужен макроинит, можно решить и модульно
пока у меня сидит, пусть потестируется какое то время
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

Shmuel, хотя и жаль, но:
значит, видимо, надо указать путь к этой папке в luamacro.ini.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

John Doe wrote: Sat 20 Feb, 2021 18:41 Похоже главная ошибка тут - использовать _macroinit.lua не по назначению.
Это не в мой адрес. Я даже не смотрел, что внутри. Просто рассказал, как может быть сделано (я так думал. Оказалось - чисто случайно)
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by Ann »

Shmuel wrote: Sat 20 Feb, 2021 22:03Оно работает чисто случайно
Большое спасибо за столь своевременное предупреждение. Хоть я и несколько сожалею о том, что разбитое было уважаемым buniak_a_h`ом моё предубеждение о единственности и неповторимости _macroinit.lua оказалось таки вовсе и не предубеждением, а, увы, всего лишь верным предположением.

При этом, полагаю, что насчёт _macroinit.lua целесообразно было бы в %FarHome%\Encyclopedia\macroapi_manual.ru.chm внести более однозначную директиву. Дабы проявившиеся здесь в его отношении разночтения не повторялись бы вновь.
citRiks wrote: Sat 20 Feb, 2021 23:19пусть потестируется какое то время
Желаю Вам удачи в тестировании Ваших задумок. И сочувствую, что Вам приходится даже в относительно простых случаях постоянно подстраиваться не только под объективно изменяющуюся ситуацию, но и под субъективные отношения к ней пользователей. Особенно таких капризных, как я, например.
buniak_a_h wrote: Sat 20 Feb, 2021 23:24видимо, надо указать путь к этой папке в luamacro.ini
Спасибо за подстраховывающую подсказку.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by John Doe »

Ann wrote: Sun 21 Feb, 2021 03:41 При этом, полагаю, что насчёт _macroinit.lua целесообразно было бы в %FarHome%\Encyclopedia\macroapi_manual.ru.chm внести более однозначную директиву. Дабы проявившиеся здесь в его отношении разночтения не повторялись бы вновь.
А чем не устраивает общая формулировка?
Для каждого дерева rootN первым всегда исполняется макрофайл
rootN\_macroinit.lua, если такой файл существует. Порядок исполнения прочих макрофайлов в данном дереве не определён.
https://t.me/FarManager — Telegram чат
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by Ann »

John Doe wrote: Sun 21 Feb, 2021 11:52А чем не устраивает общая формулировка?
Для каждого дерева rootN первым всегда исполняется макрофайл
rootN\_macroinit.lua, если такой файл существует. Порядок исполнения прочих макрофайлов в данном дереве не определён.
Как трактовать сокращение rootN?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by John Doe »

Ann wrote: Sun 21 Feb, 2021 12:39 Как трактовать сокращение rootN?
Очевидно надо статью с начала читать.
macroapi_manual.ru.chm - Загрузка макрофайлов
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

Ann, на самом деле легко организовать выполнение скриптов с каким-нибудт именем (файла) рекурсивно: напишите в %FarProfile%\macros\scripts\_macroinit.lua примерно такой код%
far.RecursiveSearch(win.GetEnv"farprofile"..[[\macros\scripts]], '_*.init',function(_,f)loadfile(f)(), 'FRS_RECUR')
а выполняемый код класть в файлы с именами _*.init
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

Было несколько неточностей. Полностью работающий и проверенный код выглядит так:

Code: Select all

far.RecursiveSearch(win.GetEnv"farprofile"..[[\macros\scripts]], '_*.init>>D', function(_,f) loadfile(f)(f) end, 'FRS_RECUR')
P/S.
1. Вложенные init-файлы не должны быть *.lua, иначе они будут выполняться дважды.
2. Если порядок выполнения этих скриптов Вам неважен, то можно тупо поместить их в любой подкаталог %FarProfile%=macros\scripts (но уже с расширением *.lua). Эти скрипты будут выполнены при загрузке макросов (до из выполнения!). Мне казалось, Вам именно это и нужно было.
Last edited by buniak_a_h on Sun 21 Feb, 2021 22:33, edited 1 time in total.
User avatar
Ann
Posts: 478
Joined: Tue 26 Jun, 2007 11:05
Has thanked: 141 times
Been thanked: 45 times

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by Ann »

buniak_a_h wrote: Sun 21 Feb, 2021 22:16
Большая Вам благодарность!

Я воспользовался Вашей рекомендацией и тот _macroinit.lua, который скачал по ссылке, данной citRiks`ом, переименовал в _macroinit(citRiks)20210219.init и положил его в %FarProfile%\Macros\scripts\ рядом со штатным _macroinit.lua. И теперь перекопировывать блок из одного файла в другой не требуется. А скачиваемому с сайта файлу можно сразу же задавать нужное имя и присваивать расширение .init, и всё отлично работает. Т.е. получилось именно то, что мне и нужно было. Так гораздо удобнее, чем было раньше.
Если порядок выполнения этих скриптов Вам неважен, то можно тупо поместить их в любой подкаталог %FarProfile%=macros\scripts (но уже с расширением *.lua). Эти скрипты будут выполнены при загрузке макросов (до из выполнения!). Мне казалось, Вам именно это и нужно было
А вот практического значения этой возможности я пока что не осознал. Поясните, пожалуйста, в каких случаях это может быть полезно.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

Ann wrote: Mon 22 Feb, 2021 03:43 Поясните, пожалуйста, в каких случаях это может быть полезно.
Например, Вам надоело в каждом скрипте писать
local le = require"le"
Пишете lua-файл такого содержания:

Code: Select all

_G.le = require"le"
и используете le в любом скрипте, и даже из комстроки (так: lua:le(panel))
Лично я в глобальную таблицу _G добавляю таблицу BAX, содержащую всё, что есть в …\midules\BAX\ . В сочетании с моими TableBrowser from BAX и LuaComplete Tabbed это даёт возможность при редактировании вставлять функции из моих модулей, а из Shell-а - просматривать состав и выполнять функции.
Last edited by buniak_a_h on Mon 22 Feb, 2021 04:13, edited 4 times in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by John Doe »

buniak_a_h wrote: Sun 21 Feb, 2021 22:16 Например, Вам надоело в каждом скрипте писать
local le = require"le"
Вот не надо лениться.
Если прям сильно надоело, лучше воспользоваться шаблоном.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by buniak_a_h »

John Doe wrote: Mon 22 Feb, 2021 10:11
buniak_a_h wrote: Sun 21 Feb, 2021 22:16 Например, Вам надоело в каждом скрипте писать
local le = require"le"
Вот не надо лениться.
Если прям сильно надоело, лучше воспользоваться шаблоном.
Про шаблон не понял. Если б был препроцессор - можно было бы объявить функцию. Но это всё - о скрипте. На самом деле я, в основном, для комстроки это сделал. Чтоб писать lua:le(panel.GetPanelInfo(nil,1)). Здесь же в строке писать require… - совсем запутаешься
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

StackTracePlus @Xer0X — расширенный анализ стека, дает ПОЛНЫЙ обзор контекста ошибки, + любого другого runtime контекстa

Post by John Doe »

buniak_a_h wrote: Mon 22 Feb, 2021 11:06 Про шаблон не понял.
Например тут предусмотрены шаблоны для быстрого ввода разнообразных конструкций Луа: http://raidar.github.io/Programs/FarScr ... Rh_Scripts
Аналогичным образом можно намакросить и подключение любого частоиспользуемого скрипта.
buniak_a_h wrote: Mon 22 Feb, 2021 11:06 Здесь же в строке писать require… - совсем запутаешься
Рекомендую консольные алиасы: viewtopic.php?f=60&t=8546

Можно и без скриптов, через doskey
https://t.me/FarManager — Telegram чат
Post Reply

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