По нажатию клавиш (или их комбинаций) в списке скриптов будут оставаться только те, у которых эта клавиша(или комбинация) присутствует в ключе
Настройки: переменная gConfig в начале скрипта или (более высокий приоритет) файл fastmacro.cfg, который должен находиться в той же папке, что и текущий скрипт.
Клавиши управления по умолчанию:
Enter – запуск макроса.
Esc – отмена последнего фильтра для ключа или отмена поиска.
Up,Down – перемещение по списку.
Клавиши (или их комбинации), не задействованные в настройках: установка/сброс фильтра для ключа.
Нюансы:
1. Если какая-то клавиша из настроек не нужна, соответствующую переменную нужно установить в "" или удалить
2. Если при запуске скрипта выводятся ненужные меню или диалоги, нужно установить gConfig.precheck в false
3. Может использоваться совместно со SmartMenuFilter (viewtopic.php?f=60&t=8463) (автор John Doe).
4. Для быстрого листания длинного списка можно использовать макрос viewtopic.php?p=151729#p151729 (автор sToLp).
local maxDelay = 500 -- промежуток времени между двумя нажатиями пусковой клавиши (в миллисекундах)
-- двойное нажатие John Doe Wed 13 Jul 2016 19:50 http://forum.farmanager.com/viewtopic.php?p=139385#p139385
local t = 0
local ID = "D1E0EA8C-B62A-43E0-8045-2667B88BCBB3" -- гуид меню макроса fastmacro.lua
Macro {
description="листать ↕ в меню макроса 'fastmacro.lua' дважды-Down-Up";
area="Menu"; priority = 100; key="Down Up"; id="ED9EE14C-C8D5-411F-924D-69777AA55361";
condition=function() -- обеспечивает работу данного макроса только в меню макроса fastmacro.lua и срабатывание ключа на двойное нажатие
local t1 = Far.UpTime
local delay = t1-t
t = t1
return Menu.Id==ID and delay<maxDelay
end;
action=function()
if akey(1,1):match('Down') then Keys("PgDn") else Keys("PgUp") end;
end;
}
. Он, по методуJohn Doe, по двойному нажатию на Up и Down, листает меню как по PgUp и PgDn, соответственно.
Попробовал, как-то неудобно (непривычно?): если хочется сместиться и не на одну строку, но и не на целую страницу, а, например, на 2-3 строки, приходится делать паузы между нажатиями. Что раздражает.
ЗЫ. Насколько я понимаю, скрипт реагирует не только на двойное нажатие одной и той же клавиши (вверх или вниз), но и разных (вверх-вниз или вниз-вверх).
ЗЗЫ. Есть ли у такого приема преимущество перед использованием waitkey?
condition=function()
if Menu.Id ~= ID then return false end
local k = mf.waitkey(maxDelay)
return (k=="Up") or (k=="Down")
end;
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 07 Dec, 2018 17:24
by LAT
sToLp wrote: ↑Thu 06 Dec, 2018 23:17...Я, например, насчитал в своей тестовой сборке макросов 82 макроса с невалидными ключами. А сам список всех макросов занимает несколько страниц. Вот поэтому их и желательно вычленить...
Отфильтровать макросы, у которых в качестве ключа назначена пустая строка, вроде бы не сложно. А вот если в качестве ключа указан какой-нибудь мусор, даже не представляю разумного способа определить это... mf.key не дружит с регэкспами, плюс плохо реагирует на LCtrl, LAlt, может, еще на что-то.
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 07 Dec, 2018 18:15
by LAT
v 19.
1. клавиша запуска изменена на CtrlAltM (предыдущая совпадала со стандартной комбинацией восстановления пометки файлов)
2. + возможность фильтрации для получения списка скриптов, которым не назначены клавиши
3. + новые поля для настроек в gConfig
4. + немного динамики в формирование информационной строки для меню
5. + возможность открытия скриптов в редакторе. Переход в редактор изучался по коду LuaManager (автор IgorZ). Выполняется по долгому нажатию Alt+F4 (настраивается в gConfig)
6. + возможность работы с клавиатурными макросами (без action, но с code)
7. проверка условий запуска скриптов обернута в pcall
8. в связи с этим убрал танцы с gConfig.precheck
9. мелкие правки
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 07 Dec, 2018 22:27
by sToLp
LAT wrote: ↑Fri 07 Dec, 2018 16:59
ЗЗЫ. Есть ли у такого приема преимущество перед использованием waitkey?
condition=function()
if Menu.Id ~= ID then return false end
local k = mf.waitkey(maxDelay)
return (k=="Up") or (k=="Down")
end;
По-видимому, дело привычки. Потому что, на мой взгляд, метод через waitkey более дёрганый что-ли, с непредсказуемыми скачками, а по двойному нажатию просто дублирует привычные PgUp и PgDn. Но, повторюсь, возможно, что дело и в привычке.
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 07 Dec, 2018 22:50
by sToLp
LAT wrote: ↑Fri 07 Dec, 2018 17:24если в качестве ключа указан какой-нибудь мусор, даже не представляю разумного способа определить это
Чаще всего, как раз, не мусор, а целенаправленные подходящие к ситуации названия ключей типа: "таймерКода", "широкаяПанель", "гуиды", "префиксы" и т.п. М.б. имеет смысл посмотреть с этой позиции и далее у John Doe. Но там через готовый круто навороченный макробраузер. А в другой теме ещё IgorZ намеревается подобное сделать, но тоже через свой мощный макробраузер.
FastMacro – Быстрый поиск доступных макросов
Posted: Sat 08 Dec, 2018 08:45
by John Doe
LAT wrote: ↑Fri 07 Dec, 2018 16:59
Насколько я понимаю, скрипт реагирует не только на двойное нажатие одной и той же клавиши (вверх или вниз), но и разных (вверх-вниз или вниз-вверх).
Да. Но можно исправить.
LAT wrote: ↑Fri 07 Dec, 2018 16:59
Есть ли у такого приема преимущество перед использованием waitkey?
В приведённом коде waitkey проглотит любую клавишу, нажатую в пределах maxDelay.
Можно исправить.
LAT wrote: ↑Fri 07 Dec, 2018 17:24
mf.key не дружит с регэкспами
Регэкспы в данном случае нас не интересуют, и их легко отсеять.
LAT wrote: ↑Fri 07 Dec, 2018 17:24
плохо реагирует на LCtrl, LAlt
Поправимо.
FastMacro – Быстрый поиск доступных макросов
Posted: Sun 09 Dec, 2018 16:38
by LAT
v.20
Пришлось вернуть gConfig.precheck. Совсем забыл, что в condition() могут выводиться меню и диалоги . По умолчанию установлено в true, а если при запуске скрипта выводится что-то "левое", нужно установить в false.
FastMacro – Быстрый поиск доступных макросов
Posted: Mon 10 Dec, 2018 08:17
by John Doe
LAT wrote: ↑Sun 09 Dec, 2018 16:38
Совсем забыл, что в condition() могут выводиться меню и диалоги
LAT wrote: ↑Sun 09 Dec, 2018 16:38
Совсем забыл, что в condition() могут выводиться меню и диалоги
Можно пример, где такое используется?
viewtopic.php?p=105665#p105665 (скрипт Plugin.BackgroundCopy.lua), проблема описана у sToLp-а (viewtopic.php?p=151672#p151672, пункт 1)
UPD. Этот макрос можно исправить вставкой строчки 14: Keys("Esc"). Плюс такая проблема возникает только в том случае, если в меню плагинов нет строки Background copy, т.е. нет плагина, т.е. этот макрос не используется для работы . И при попытке вызвать этот макрос по кнопкосочетанию CtrlShiftI, выскакивает экран с ошибкой "attempt to yield across C-call boundary". Но дело не в этом конкретном макросе, а в том, что такая ситуация возможна, и ее нужно как-то обрабатывать.
FastMacro – Быстрый поиск доступных макросов
Posted: Mon 10 Dec, 2018 09:23
by John Doe
LAT wrote: ↑Mon 10 Dec, 2018 09:03
Этот макрос можно исправить
Насколько я понимаю, макрос тот следует исправить использованием Plugin.Exist.
LAT wrote: ↑Mon 10 Dec, 2018 09:03
Но дело не в этом конкретном макросе, а в том, что такая ситуация возможна, и ее нужно как-то обрабатывать.
Макрос же некорректный.
Разве он вообще может работать?
FastMacro – Быстрый поиск доступных макросов
Posted: Mon 10 Dec, 2018 09:28
by LAT
John Doe wrote: ↑Mon 10 Dec, 2018 09:23Макрос же некорректный.
Разве он вообще может работать?
По-моему, вся его работа сводится к тому, чтобы выводить лишнее меню, когда запускается FastMacro
FastMacro – Быстрый поиск доступных макросов
Posted: Sat 15 Dec, 2018 22:44
by LAT
v.23
+ фильрация по невалидным ключам
+ учет регистра
в определении Ctrl,Alt,Shift велосипед заменен на использование far.NameToInputRecord()
+ обработка комбинаций клавиш AltCtrl*
немного оптимизации
исправлен баг при фильтрации
Прежде всего опробовал его путём добавления во вновь установленную свежую сборку FAR Manager UE3 x86 от Victor_VG с руборда. При вызове из панелей вылезает
LuaMacro
...es (x86)\Far3\Far\Profile\Macros\scripts\fastmacro23.lua:327: invalid order function for sorting
Stack Traceback
===============
(1) Lua function 'main' at file 'C:\Program Files (x86)\Far3\Far\Profile\Macros\scripts\fastmacro23.lua:
327' (best guess)
Local variables:
t_macro = table: 0x05209798 {1:table: 0x0520fe08, 2:table: 0x0458a2b8, 3:table: 0x045873d0, 4:table:
0x04586ec8 (more...)}
imac = number: 295
. Возможно, это связано с самыми последними изменениями в luamacro. При вызове из редактора ошибки нет. Попробовал на рабочей копии Far`а — то же самое.
Поскольку в панелях означенная ошибка препятствует работе макроса, то и посмотреть работу вывода списка панельных макросов с не валидными ключами пока что не смог. А тот список, который выводится в редакторе, на первый взгляд показался мне ограниченным. Но, м.б. это и субъективно. Поэтому подумаю как сделать объективное сопоставление.
Не очень удачное, мне кажется, определение ключей — invalid в строке 33
и, соответственно, далее по макросу. Ведь это не совсем верно, поскольку речь идёт о ключах, по большей части как раз не ущербных, а о нарочито не соответствующих общему правилу для применения в сервисных целях. Поэтому, на мой взгляд, целесообразнее было бы именовать их более определённо, а именно как "не валидные", т.е. "not valid", например, так:
И, наконец, два пожелания:
а) выводить список макросов с не валидными ключами в т.ч. гуртом всех вместе по всем областям;
б) нельзя ли кроме того сделать возможность вывода файлов, соответствующих результирующим спискам макросов, во временную панель?
sToLp wrote: ↑Sun 16 Dec, 2018 08:49Не очень удачное, мне кажется, определение ключей...
Изменил клавишу на CtrlN (а названия переменных пусть пока остаются как есть).
sToLp wrote: ↑Sun 16 Dec, 2018 08:49И, наконец, два пожелания:
а) выводить список макросов с не валидными ключами в т.ч. гуртом всех вместе по всем областям;
б) нельзя ли кроме того сделать возможность вывода файлов, соответствующих результирующим спискам макросов, во временную панель?
Рассматриваемая проблема следующая: когда макросов много, начинаешь немного путаться или забывать, какие клавиши для каких целей нажимать (особенно для редко используемых макросов). Существующие интрументы для работы с макросами (например, LuaManager), имхо, хорошо подходят для задач учета и контроля, но не для быстрого поиска нужных клавиш. Этот скрипт задумывался как инструмент для быстрого и безопасного вспоминания, что там надо нажимать, да и вообще – чтобы осмотреться, а что вообще есть. В то же время Ваши предложения лежат в сторону создания инструмента для анализа невалидных ключей. Имхо, лучше не превращать скрипт в «комбайн», а создать отдельный скрипт для анализа невалидных ключей.
FastMacro – Быстрый поиск доступных макросов
Posted: Sun 16 Dec, 2018 15:02
by LAT
v.24
исправлен баг с сортировкой
FastMacro – Быстрый поиск доступных макросов
Posted: Sun 16 Dec, 2018 18:42
by sToLp
LAT wrote: ↑Sun 16 Dec, 2018 15:02лучше не превращать скрипт в «комбайн», а создать отдельный скрипт для анализа невалидных ключей
Да, Вы правы. Вполне согласен.
sToLp wrote: ↑Sun 16 Dec, 2018 08:49нельзя ли сделать возможность вывода файлов, соответствующих результирующим спискам макросов, во временную панель?
При этом прошу Вас, по возможности, не сбрасывать со счетов данное пожелание, поскольку оно относится к спискам макросов с любыми ключами, а не только лишь с не валидными.