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

Здесь обсуждается всё, что касается макросов.
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

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

Post by Yegor »

Latest post of the previous page:

buniak_a_h wrote: Wed 22 Feb, 2023 19:18 Логично было бы предположить, что в PanelEvent
Это SynchroEvent (SE_FOLDERCHANGED) via ProcessSynchroEvent().
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Yegor wrote: Wed 22 Feb, 2023 21:52Это SynchroEvent
Ну, я так и думал. Просто в энциклопедии написано:
%FarHome%\Encyclopedia\macroapi_manual.ru.chm wrote: Поле group может иметь одно из следующих значений:
"DialogEvent", "EditorEvent", "EditorInput", "ExitFAR", "ViewerEvent", "ConsoleInput".
Получается, что скриптом такое событие не обработать :-(
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

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

Post by Yegor »

Попробуйте "FolderChanged", энциклопедию не обновляли потому что "experimental".
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Yegor wrote: Wed 22 Feb, 2023 23:28 Попробуйте "FolderChanged"

Не работает.



Action не вызывается
Last edited by buniak_a_h on Sat 25 Feb, 2023 15:57, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

P/S. В том же мануале написано, что группы получаются из имён функций export.Process… отбрасыванием начала. export.ProcessFolderChanged нету. . Больше всего по смыслу (по имени) подходит PanelEvent, но:
(а) такой группы нет в списке
(б) даже если указать, action всё равно не выполняется.
Last edited by buniak_a_h on Thu 23 Feb, 2023 00:12, edited 2 times in total.
User avatar
lordmuzer
Posts: 533
Joined: Mon 12 Nov, 2007 22:05
Location: Киев
Has thanked: 20 times
Contact:

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

Post by lordmuzer »

Code: Select all

Event { description = "PanelChangeDir";
	group = "FolderChanged";
	action = function()
		far.Message("changed!", nil, "w")
	end;
}
Работает на актуальной ночной сборке
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Я прошу прощения.
У меня не получилось обновление по renewal, я заметил поздно, а сообщение не удалить. При попытке откорректировать (зачеркнуть) сайт не отвечает.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

lordmuzer wrote: Thu 23 Feb, 2023 00:23 Работает на актуальной ночной сборке
На самом деле работает, но в action не передаётся никаких параметров. Это - жаль. Часто требуется предыдущая и новая папки; т.е. надо самому запоминать, куда перешли. Жаль… Или это будет доделываться? Ну и если будет доделываться, то надо также передавать, какая панель сменила папку (активная/пассивная/обе)
Last edited by buniak_a_h on Thu 23 Feb, 2023 00:52, edited 1 time in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

По Tab событие генерится (хотя с чего бы?)
По Swap panels (CtrlU) не генерится (Вроде как тоже самое).
Ну и признак, какая панель изменилась - очень нужен. А то непонятно, какую панель анализировать.
Пример - в сообщении:
gotar wrote: Wed 22 Feb, 2023 18:03 А можно попросить пример макроса, использующего это событие. Например, загрузить макросы из текущей директории.
Представьте, что сменилась пассивная панель. Надо ли загружать макросы (выполнять скрипты, выводить user menu и т.п.)? Вот я и думаю: признак нужен. Битовый хотя бы
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Thu 23 Feb, 2023 02:03 Представьте, что сменилась пассивная панель
Разве при смене директории (например, диска) на пассивной панели это событие приходит? Как я понял из ответов на мои вопросы, событие приходит, когда каким бы то ни было образом сменилась «текущая» директория Фара. Если же я неправ, то да, придётся хранить пути обеих панелей и сравнивать с новыми, хоть это и лишняя работа по сравнению с нормальными параметрами (какая панель, старая директория, новая директория).
Фар есть инструмент, а не нянька. © 2009 DrKnS
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

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

Post by Yegor »

buniak_a_h wrote: Thu 23 Feb, 2023 02:03 По Tab событие генерится (хотя с чего бы?)
By design :) Выше этот вопрос уже задавался.

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

P.S. Но это не значит что не нужно стремится к лучшему.
Last edited by Yegor on Thu 23 Feb, 2023 02:23, edited 1 time in total.
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Yegor wrote: Thu 23 Feb, 2023 02:21 проблема создания события по изменению папки уже была решена и раньше с помощью костылей
Да, есть скрипт от citRiks-а. Он, кстати, передаёт здоровенную таблицу, содержащую новые и старые папки для активной и пассивной панелей, а также признаки - какая изменилась. КМК там есть лишнее, но лучше пусть так. А вот признак, какая панель изменилась - это важно.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

buniak_a_h wrote: Thu 23 Feb, 2023 02:29 какая панель изменилась
Если пути обеих панелей хранить, а в обработчике события спросить у Фара новые и сравнить со старыми, то так и станет понятно, на какой панели путь сменился.
Но я согласен, что это неудобно, да и повторять придётся чуть ли не в каждом скрипте, который хочет что-то содержательное делать по смене директории. Отсюда идея написать красивую и удобную обёртку, которой все прикладные скрипты смогут пользоваться.
Last edited by HaRT on Thu 23 Feb, 2023 02:35, edited 1 time in total.
Reason: Добавлена ещё одна строка
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

HaRT wrote: Thu 23 Feb, 2023 02:15
buniak_a_h wrote: Thu 23 Feb, 2023 02:03 Представьте, что сменилась пассивная панель
Разве при смене директории (например, диска) на пассивной панели это событие приходит?
Да. (1) Есть плагин (и скрипт) SameFolder, меняющий папку на пассивной панели, (2) есть скрипт, отражающий на пассивной панели содержимое папки, на которой стоит указатель на активной панели и меняющий папку пассивной панели при перемещении по папкам активной панели, (3) есть мой скрипт - дерево, открывающий на пассивной панели текущую папку (на которой стоит указатель в дереве), и у этого дерева есть режим автоматического отображения папки на пассивной панели. Я проверил для всех перечисленных случаев, кроме (2) - событие генерится.
Last edited by buniak_a_h on Thu 23 Feb, 2023 02:37, edited 2 times in total.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

HaRT wrote: Thu 23 Feb, 2023 02:32 Если пути обеих панелей хранить, а в обработчике события спросить у Фара новые и сравнить со старыми, то так и станет понятно, на какой панели путь сменился.
Но я согласен, что это неудобно…
На самом деле не только неудобно, но и, КМК, нерационально: это инфа есть в той процедуре, что генерит событие. Просто её надо передавать. Пока интерфейс не устоялся…
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

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

Post by buniak_a_h »

Возможно, есть чисто технические сложности (трудоёмкости), делающие передачу сложных данных (таблиц, строк) неудобной. Поэтому я и сильно ограничил желание: хотя бы только признак, какая панель изменила папку. 1 - активная; 2 - пассивная; 1+2=3 - обе. И проверять можно битовой маской, и передавать просто.
Я к тому, что "история" (откуда пришли) нужна крайне редко. А вот куда пришли - естественное желание. Подстроиться под новый директорий, например. Я несколько таких скриптов разным людям писал (папка с медиафайлами - кастомные столбцы и сортировка, например; автоматически показывать UserMenu, если в новой папке есть файл usermenu.ini и эта папка открывается на активной панели)
Last edited by buniak_a_h on Thu 23 Feb, 2023 02:49, edited 1 time in total.
Post Reply

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