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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12829
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 290 times

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

Post by John Doe »

Latest post of the previous page:

gene.pavlovsky wrote: но как этот скрипт узнает, что при явном запуске `Far.exe dir1 dir2` не надо восстанавливать состояние из конфига?
Скрипт может работать (например) только если far.exe запущен без параметров.
Или наоборот, работать только если задан определённый параметр.
(просто идеи, в порядке мозгового штурма)

User avatar
zg
zero-gravity
Posts: 5833
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 151 times
Contact:

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

Post by zg »

John Doe wrote:Я утверждаю (1) некоторое количество некорректных тикетов на мантисе не создают проблем и (2) если что-то или невозможность чего-то описана в документации, то закрывать такие тикеты можно не тратя время на объяснения, стандартной формулировкой типа "см. документацию".
про выход из редактора/просмотра я уже постил. вашу позицию про EE_REDRAW vs EE_READ я тоже прекрасно помню. ваши навязчивые переоткрытия псевдобагов про altgr я тоже не забыл. и вы там, если я помню, очень хотели объяснений, я на них тратил время и силы, а они вас не устраивали. или всё что вы написали — это для других и себя вы к ним не относите.
про какие некорректные тикеты вы говорите, я не понял. тот что приводил я, он вполне корректен. он как раз показывает очень хорошо (по крайней мере мне), что нельзя лепить бездумно внешние интерфейсы на реализацию состоящую из костылей чуть менее, чем полностью.
John Doe wrote:Это возможно, если скрипт при старте фара будет самостоятельно восстанавливать нужные пути на панелях.
это единственно правильный подход.
gene.pavlovsky wrote:Абсолютно с этим согласен. Не раз слышал (в нескольких проектах) "мы эту фичу делать не будем, т.к. переживаем, что юзеры отстрелят себе ногу" - тогда как уже есть средства отстрелить себе всё туловище.
если юзер стреляет себе в ногу где-то там тихо, то пожалуйста. но у нас есть богатый опыт, когда юзеры начали вопить, верните как раньше было. на форуме и на трекере. агрессивно.

gene.pavlovsky
Posts: 166
Joined: Tue 16 Feb, 2010 17:55
Has thanked: 11 times
Been thanked: 8 times

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

Post by gene.pavlovsky »

John Doe wrote:Скрипт может работать (например) только если far.exe запущен без параметров.
Или наоборот, работать только если задан определённый параметр.
(просто идеи, в порядке мозгового штурма)
Ну это первая моя мысль была, но как узнать из макроса, с какими параметрами запущен фар? Я, как всегда, не сумел найти в мануалах ничего на эту тему (то ли я тупой, то ли мануалы такие, то ли поиск в hh.exe такой "замечательный"). Хорошо б все мануалы свести в один, в html формате.

gene.pavlovsky
Posts: 166
Joined: Tue 16 Feb, 2010 17:55
Has thanked: 11 times
Been thanked: 8 times

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

Post by gene.pavlovsky »

zg wrote:если юзер стреляет себе в ногу где-то там тихо, то пожалуйста. но у нас есть богатый опыт, когда юзеры начали вопить, верните как раньше было. на форуме и на трекере. агрессивно.
Я вас понимаю. Юзеры они на то и юзеры. Разработчики частенько делают то, что им самим кажется правильным. Полагаю, если бы вам самим нужна была эта фича и казалась бы хорошей, наверно она уже была бы :)

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

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

Post by John Doe »

gene.pavlovsky wrote: но как узнать из макроса, с какими параметрами запущен фар?
Это в MSDN, и применять через ffi.
Обратный подход в реализации проще: если скрипт определит префикс, то его можно будет запустить указав в командной строке фара.

gene.pavlovsky
Posts: 166
Joined: Tue 16 Feb, 2010 17:55
Has thanked: 11 times
Been thanked: 8 times

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

Post by gene.pavlovsky »

John Doe wrote:Обратный подход в реализации проще: если скрипт определит префикс, то его можно будет запустить указав в командной строке фара.
Уж на сколько интересно будет рано или поздно овладеть всеми возможностями макросов в Фаре, сейчас я уже что-то подустал от новой информации. Больно много приходится с этим копаться, да и вас напрягать вопросами. Текущий вариант вполне рабочий, и ладно. Улучшать можно до опупения...

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 times

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

Post by citRiks »

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

Было поломано, перезагрузил
(особенно относится к тому если кто уже успел взять)
Attachments
ConsoleInputEvent+ExitFAREvent_PanelChangeDir.@Xer0X.Lua.7z
(1.9 KiB) Downloaded 9 times
Last edited by citRiks on Sun 12 Apr, 2020 22:40, edited 2 times in total.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 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 11 times
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

Yegor
Posts: 1075
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 14 times
Been thanked: 25 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) Мичурин

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 times

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

Post by citRiks »

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

Скрипт хорош тем что нем уже сидит своего рода внутреннняя история папок и обьекты папок,
и к ним легко добавить например кастомную сортировку для папок
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

User avatar
zg
zero-gravity
Posts: 5833
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 151 times
Contact:

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

Post by zg »

а зачем вот так if elm_text == DLG_MSG_EXIT_FAR делать?

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 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: 5833
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 151 times
Contact:

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

Post by zg »

citRiks wrote:
Sun 19 Apr, 2020 20:59
Это наиболее оптимальный детект выхода, чтобы перед выходом сохранить состояние панелей,
больше на самом деле для current items панелей.
:facepalm: у этого диалога есть уникальный гуид, а вы строки проверяете.

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 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.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 times

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

Post by citRiks »

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

<вложения удалено, см. последнее сообщение>
Last edited by citRiks on Sat 20 Jun, 2020 17:33, edited 2 times in total.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

citRiks
Posts: 674
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 198 times
Been thanked: 44 times

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

Post by citRiks »

Исправлено поведение на плохих directory junctions, зависало насмерть.
Для немедленности "евента" (триггера) надо добавить хоть какие-то content/status columns.
В этом примере используется полезный односимвольный content column,
(изза этого и было зависание, когда он пытался прочитать никуда не ведущий junction)
но можно любой другой, можно фэйковый пустой.
Attachments
ContentColumn+ExitFAREvent_PanelChangeDir.@Xer0X.Lua.7z
(5.08 KiB) Downloaded 20 times
Last edited by citRiks on Thu 25 Jun, 2020 10:22, edited 1 time in total.
А кто не поверит в наше миролюбие,
Тот кровью умоется.
И будет такая борьба за мир,
Что камня на камне не останется.

Post Reply

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