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

Здесь обсуждается всё, что касается макросов.
User avatar
zg
zero-gravity
Posts: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Wed 09 Nov, 2016 14:15

Latest post of the previous page:

там не только клавиатура, там весь консольный ввод, включая мышь. всё, кроме нажатий на кнопки клавиатуры и мыши можно точно фильтровать.
ещё можно проверять текущее окно, если не панели, то тоже фильтровать, хотя тут не 100%.

Shmuel
Posts: 5225
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 09 Nov, 2016 14:37

zg, есть ли какие-то принципиальные сложности реализовать нормальное событие смены директории в панели (экспортируемую функцию для плагинов), или просто ни у кого руки не доходят?
Last edited by Shmuel on Wed 09 Nov, 2016 14:39, edited 1 time in total.

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

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

Post by zg » Wed 09 Nov, 2016 15:10

Shmuel wrote: zg, есть ли какие-то принципиальные сложности реализовать нормальное событие смены директории в панели (экспортируемую функцию для плагинов), или просто ни у кого руки не доходят?
есть. все сразу начнут показывать мессаджбоксы из этого события и писать об этом на багтрекер. причём по ощущениям в панелях проблем больше, чем в диалогах.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Wed 09 Nov, 2016 15:47

Что надо добавить в Event { group="ConsoleInput";, чтобы события приходили только на клавиатуру?

А по-моему, было бы здорово иметь событие о смене директории. В хелпе о нём написать предупреждение, чего нельзя делать и о чём не писать на багтрекер.

Вообще я мечтаю о какой-нибудь стандартной ф-ции навроде trace(message) (actionscript), console.log(message) (javascript) и т.д. Чтоб при разработке макросов писать дебаг инфу в какой-то стандартный дебаг лог, который в другом окошке можно удобно `tail -f`-ить. Если есть уже такая фича, то извиняюсь, и буду оч рад о ней узнать.
Last edited by gene.pavlovsky on Wed 09 Nov, 2016 15:51, edited 1 time in total.

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

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

Post by John Doe » Wed 09 Nov, 2016 16:01

gene.pavlovsky wrote: Вообще я мечтаю о какой-нибудь стандартной ф-ции
win.OutputDebugString
gene.pavlovsky wrote: Что надо добавить в Event { group="ConsoleInput";, чтобы события приходили только на клавиатуру?
Проверку аргументов

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

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

Post by zg » Wed 09 Nov, 2016 16:17

gene.pavlovsky wrote:А по-моему, было бы здорово иметь событие о смене директории. В хелпе о нём написать предупреждение, чего нельзя делать и о чём не писать на багтрекер.
смена директории на панели происходит много где в фаре: собственно навигация по панелям, история, фолдер шоткатс, ctrl-f10 в редакторе. но это не так страшно. плагин/макрос могут сменить директорию в любой момент. например во время таскания диалога по экрану. что там нельзя вызывать, что можно — я лично не знаю.
можно конечно разрешить только безопасные функции, но слова надо подкреплять делом, так как хелп никто не читает и особо продвинутые модераторы будут использовать сверх того, что разрешено, а потом возмущаться, что в каком-то билде это перестало работать. а стандартного механизма ограничить вызов части апи в какой-то момент — нет.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Wed 09 Nov, 2016 18:22

John Doe wrote: win.OutputDebugString

Проверку аргументов
И куда идёт вывод OutputDebugString? В хелпе это ни разу не развёрнуто...

Не затруднит ли вас дать пример кода (проверку документоваргументов)

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Wed 09 Nov, 2016 18:22

zg, вас понял.

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

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

Post by John Doe » Wed 09 Nov, 2016 18:40

gene.pavlovsky wrote: И куда идёт вывод OutputDebugString? В хелпе это ни разу не развёрнуто...
То, в какой библиотеке расположена функция как бы намекает, где искать справку.
Обсуждалось тут viewtopic.php?f=15&t=8483
gene.pavlovsky wrote: Не затруднит ли вас дать пример кода (проверку документоваргументов)
viewtopic.php?f=15&t=8764

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

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

Post by John Doe » Wed 09 Nov, 2016 18:49

zg wrote: есть. все сразу начнут показывать мессаджбоксы из этого события и писать об этом на багтрекер
Имхо, на багтрекере не так много подобных примеров, а те что всё-таки есть (и будут) не должно быть сложно закрыть, с соответствующей формулировкой.

Особенно если в Энциклопедии действительно будет сказано о недопустимости или нежелательности тех или иных действий.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 10 Nov, 2016 02:48

Модуль для отладки чрезвычайно полезная вещь, большое спасибо за наводку.
В MacroEx подсмотрел на тему эвентов, и наваял вот что.

При отсутствии эвентов клавиатуры или мыши таймер проверяет панели раз в 5 секунд.
При нажатии на клавиши / кнопки мыши таймер ставится на 250 мс после эвента. Если подряд идёт много эвентов, таймер каждый раз
запускается заново, то есть если зажать и держать вверх/вниз/ввод, панели проверяться не будут. Через 250 мс после последнего эвента панели проверяются. Если состояние изменилось - запускается второй таймер на 250 мс, если за это время не пришло новых эвентов, изменения коммитятся в localconfig.db.

По идее скрипт стал более оптимизирован, на практие разницы никакой не чувствуется )


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

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

Post by John Doe » Thu 10 Nov, 2016 11:53

gene.pavlovsky wrote: При отсутствии эвентов клавиатуры или мыши таймер проверяет панели раз в 5 секунд.
Перестраховка?
gene.pavlovsky wrote:Через 250 мс после последнего эвента панели проверяются. Если состояние изменилось - запускается второй таймер на 250 мс, если за это время не пришло новых эвентов, изменения коммитятся в localconfig.db.
А просто проверять (и сразу записывать) через 500 мс после последнего события не то же самое будет?

P.S.
Вместо sqlite можно попробовать far.exe /import
Last edited by John Doe on Thu 10 Nov, 2016 13:50, edited 1 time in total.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 10 Nov, 2016 15:52

John Doe wrote:Перестраховка?
Ага.
John Doe wrote:А просто проверять (и сразу записывать) через 500 мс после последнего события не то же самое будет?
Да, чёрт возьми, перемудрил я что-то :)


John Doe wrote:Вместо sqlite можно попробовать far.exe /import
Никогда этим не пользовался, и что ему давать на вход? И будет ли оно быстрее отрабатывать?

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 10 Nov, 2016 15:57

Может быть перенести тему в рабочие макросы?

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

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

Post by John Doe » Thu 10 Nov, 2016 16:03

Никогда этим не пользовался, и что ему давать на вход? И будет ли оно быстрее отрабатывать?
На вход xml. Сделайте export, и посмотрите что именно (ещё не факт что в экспорте будет то что вам надо, я не проверял)
Быстрее вряд ли заработает, но зато не будет иметь зависимостей.

gene.pavlovsky
Posts: 163
Joined: Tue 11 Aug, 2015 16:53
Has thanked: 11 times

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

Post by gene.pavlovsky » Thu 10 Nov, 2016 16:38

В экспорте все конфиги. Но если всё лишнее убрать и оставить только <localconfig>, импорт работает нормально.
На скорую руку протестил
100x far -import - 2.85 s
100x sqlite3 - 2.43 s
Оставлю как есть. Если у кого нету sqlite3.exe, и принципиально не хочется ставить, могут доработать с far -import. Благо там всего навсего надо подменить ф-цию CommitPanelState()

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

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

Post by zg » Thu 10 Nov, 2016 21:31

зачем такие сложные приседания с sqlite и far /import? чем far.CreateSettings не угодил?
John Doe wrote:Особенно если в Энциклопедии действительно будет сказано о недопустимости или нежелательности тех или иных действий.
я всё помню и вам не верю.

Post Reply

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