(citRix) Запуск макроса по событию смены директории

Здесь обсуждается всё, что касается макросов.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

(citRix) Запуск макроса по событию смены директории

Post by citRiks »

Хорошая тема, жаль что заглохла
Предоставлю свою версию на ту же тему,
Значительно переработана и улучшена.
С оригинальной версией от @Gene.Pavlovsky было довольно много проблем,
но если бы он не подготовил базу (вместе с @ZG & @JD), то я бы и не взялся
(точнее, мы с @Хеr0X-м бы не взялись, основные кредиты относятся к нему)

брать из ГитХаба

GitHub home:
https://github.com/dr-dba/far-lua-direc ... ange-event
Put the script here:
%FARPROFILE%\Macros\scripts\ContentColumn+ExitFAREvent_PanelChangeDir.@Xer0X.Lua

DEPENDS ON THE LUA MODULE:
https://github.com/dr-dba/far-lua-general-utils
Put the Lua module here:
%FARPROFILE%\Macros\modules\Lib-Common-@Xer0X.Lua

You may use custom script for panel change events trackings:
%FARPROFILE%\Macros\scripts\ContentColumn+ExitFAREvent_PanelChangeDir.@Xer0X.Lua.Cfg
An example of custom script can be seen or taken from the GitHub repository
Last edited by citRiks on Mon 27 Dec, 2021 09:40, edited 7 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

дооптимизировано на след. темы:
* light-weight
* мгновенность реакции (мгновенная генерации условного евента)
* никаких побочных эффектов (признаться, в прежней версии были)
* есть logging, можно смотреть все милисекунды

функциональность:

* если в фар:конфиг задать такой промпт:
$#60(b)%panel_host_file%(a)%panel_prefix%(0:8)$m()$P|(e:1)%time_short_x%
.. то в промпте будет показываться время и текущий архив (то что есть в Panel.HostFile + Panel.Prefix)

* возвращает убежавший изза System.UpdateEnvironment=true %TEMP% на место

* запоминает состояние папок до след. перезапуска FAR-a

* Флаг USE_TIMER = true обновляет секунды в промпте в real time

* механизм для прекращения вычисления контент-колумнов если берут в сумме больше 5 секунд на определенную директорию
(актуально для сетевых и прочих тормознутых директориев)

--------

Призываю помощь добровольцев избавиться от зависимости в sqlite3.exe
Это будет интересный вопрос, особенно в связи не пострадает ли производительность,
сейчас импорт с SQLite берет порядка 100 милисекудн на компах посильнее, и 500 мс на компах послабее.
и в некоторый сценариях юзером заметно подтормаживание изза этого.
Attachments
ContentColumn+ExitFAREvent_PanelChangeDir.@Xer0X.Lua.7z
(4.92 KiB) Downloaded 114 times
Yegor
Posts: 1328
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Запуск макроса по событию смены директории

Post by Yegor »

citRiks wrote: Sun 19 Apr, 2020 03:56 Призываю помощь добровольцев избавиться от зависимости в sqlite3.exe
Добровольцем не буду, т.к. макрос не использую, просто почему бы не воспользоваться чем-то вроде http://lua.sqlite.org/index.cgi/doc/tip ... lite3.wiki (1я ссылка из интернета). Не знаю совместима ли эта библиотека с Фаровским луа.

Должно быть быстрее чем exe.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

Yegor,
спасибо за наводку, да, это тоже помощь
Да, тут есть варианты и такие,
и в том числе и @Shmuel создавал некий proof of concept,
и в том числе можно ФАРовским импортом, как @JD предлагал в этой же теме.
да, я наверное соберусь как нибудь и сам доделаю,
но только не знаю когда, так как мотивации нет особой, - и так работает достаточно Ок.
В то же время отмечаю типа проблемные точки, если кто-то захочет меня опередить.

Скрипт хорош тем что нем уже сидит своего рода внутреннняя история папок и обьекты папок,
и к ним легко добавить например кастомную сортировку для папок
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Запуск макроса по событию смены директории

Post by zg »

а зачем вот так if elm_text == DLG_MSG_EXIT_FAR делать?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

zg wrote: Sun 19 Apr, 2020 11:33 а зачем вот так if elm_text == DLG_MSG_EXIT_FAR делать?
Это наиболее оптимальный детект выхода, чтобы перед выходом сохранить состояние панелей,
больше на самом деле для current items панелей.
(Ну можно добавить еще мульти-язычную поддержку разве что, но это вопрос больше "а кому это надо?")
Почему наиболее оптимальный - потому что в ExitFarEvent будет уже поздно сохранять, все обьекты уже будут разрушены.
И еще потому что меньше зависимости от таймера, его в некоторых сценариях можно вообще убрать тогда.
"Некоторый сценарий" - это когда есть content column (любой в панели, даже статусный)
все content column сами начинают кидать что-то вроде "евентов" смены директории.
смены current item они не дадут впрочем, вот и нужен еще или таймер или своевременный детект выхода
User avatar
zg
zero-gravity
Posts: 6034
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Запуск макроса по событию смены директории

Post by zg »

citRiks wrote: Sun 19 Apr, 2020 20:59Это наиболее оптимальный детект выхода, чтобы перед выходом сохранить состояние панелей,
больше на самом деле для current items панелей.
:facepalm: у этого диалога есть уникальный гуид, а вы строки проверяете.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

zg wrote: Sun 19 Apr, 2020 23:24 :facepalm: у этого диалога есть уникальный гуид, а вы строки проверяете.
Твоя правда, а @Xer0X'y (как он сам сказал) нет прощения
приаттаченно исправленное и дополненное

<вложения удалено, см. последнее сообщение>
Last edited by citRiks on Sat 20 Jun, 2020 17:36, edited 1 time in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

Хорошо что дедушка @Xer0X нас не забывает.
Сказал что пару багов починено, и действительно,
ранее имевшие место быть периодические вылеты прекратились

<вложения удалено, см. последнее сообщение>
Last edited by citRiks on Sat 20 Jun, 2020 17:33, edited 2 times in total.
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

Исправлено поведение на плохих directory junctions, зависало насмерть.
Для немедленности "евента" (триггера) надо добавить хоть какие-то content/status columns.
В этом примере используется полезный односимвольный content column,
(изза этого и было зависание, когда он пытался прочитать никуда не ведущий junction)
но можно любой другой, можно фэйковый пустой.

ВЛОЖЕНИЕ УДАЛЕНО, ПОТОМУ ЧТО ПРЕДОСТАВЛЕНА АКТУАЛьНАЯ ВЕРСИЯ ДАЛЕЕ
Last edited by citRiks on Wed 12 Aug, 2020 23:26, edited 2 times in total.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

В каком месте надо поменять этот скрипт, чтобы при смене каталога он загружал lua скрипты из этого каталога?
User avatar
citRiks
Posts: 1733
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 610 times
Been thanked: 102 times

Запуск макроса по событию смены директории

Post by citRiks »

gotar,
там есть такая пустая функция:

Code: Select all

local function fnc_evt_dir_chg(evt_data)

end
В нее можно написать ваш код загрузки ваших скриптов, или все что угодно.

BTW
У меня тоже есть код (загрузки скриптов) для этого
(если память не изменяет как раз на основе вашего кода, но я там чего-то еще наулучшал),
но этот код не здесь конечно
Last edited by citRiks on Thu 25 Jun, 2020 12:32, edited 2 times in total.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Запуск макроса по событию смены директории

Post by gotar »

Я то думал вызвать far.MacroLoadAll, но хотел бы посмотреть и Ваш код
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar, всё верно, far.MacroLoadAll. Только надо учитывать, что ранее загруженные макросы выгрузятся. Т.е. если Вы хотите, чтоб остались стандартно загруженные, то надо писать нечто тиипа
far.MacroLoadAll(CurrDir .. ';' .. win.GetEnv('FARPROFILE') .. [[\Macros\scripts]])
Впрочем, надо ещё проверить, обрабатываются вложенные папки. У меня был такой скрипт, увы - пропал.
Last edited by buniak_a_h on Thu 25 Jun, 2020 18:49, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4259
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Запуск макроса по событию смены директории

Post by buniak_a_h »

gotar wrote: Thu 25 Jun, 2020 11:37 В каком месте надо поменять этот скрипт, чтобы при смене каталога он загружал lua скрипты из этого каталога?
Что-то я затупил…
1. А Вы уверены, что Вам надо именно загружать макросы, а не выполнить некий скрипт, описанный в файле в новой папке?
2. Если Вам надо повесить некий скрипт, зависящий от папки, на одну и ту же клавишу, то это делается проще: пишете один макрос, в condition указываете наличие файла (напр., FolderScript.lua), а в execute - выполнение скрипта, указанного в файле (например, через LoadFile('FolderScript.lua')([параметры])).
Post Reply

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