--- utils_old.lua
+++ utils.lua
@@ -43,7 +43,7 @@
local LoadingInProgress
local EnumState = {}
local Events
-local EventGroups = {"dialogevent","editorevent","editorinput","exitfar","viewerevent"}
+local EventGroups = {"dialogevent","editorevent","editorinput","exitfar","viewerevent","consoleinput"}
local AddMacro_filename
package.nounload = {lpeg=true}
@@ -166,7 +166,7 @@
for _,i in ipairs(indexes) do
if priorities[i] < 0 then break end
local ret = macros[i].action(...)
- if ret and (macros==Events.dialogevent or macros==Events.editorinput or macros==Events.commandline) then
+ if ret and (macros==Events.dialogevent or macros==Events.editorinput or macros==Events.commandline or macros==Events.consoleinput) then
return ret
end
end
@@ -218,6 +218,10 @@
local function export_ProcessEditorInput (Rec)
return EV_Handler(Events.editorinput, editor.GetFileName(nil), Rec)
+end
+
+function export.ProcessConsoleInput (Rec, flags)
+ return EV_Handler(Events.consoleinput, nil, Rec, flags)
end
local ExpandKey do -- измеренное время исполнения на ключе "CtrlAltShiftF12" = ??? (Lua); 2.3uS (LuaJIT);
Macro {
area="Shell"; key="Alt"; description="Use Alt for search by name (activate)";
action = function()
Keys('Alt<')
end;
}
Macro {
area="Search"; key="Alt"; description="Use Alt for search by name (deactivate)";
action = function()
Keys('Esc')
end;
}
Сейчас в ОС старше Висты при переключении с помощью AltTab консоль почему-то получает нажатие Alt, что приводит к неожиданному запуску макроса.
Мы этого не видим только потому, что фар проблему скрывает, закрывая при потере фокуса окошко быстрого поиска.
Но ведь макрос на Alt может в реальности быть любой, и тогда это ухищрение не поможет!
Например:
local F = far.Flags
Event { description="watch for focus";
group="ConsoleInput";
action=function(Rec)
if Rec.EventType==F.FOCUS_EVENT then
mf.postmacro(eval,Rec.SetFocus and "GOTFOCUS" or "LOSTFOCUS",2)
return 1
end
end;
}
Macro {
area="Shell"; key="Alt"; description="Use Alt for search by name (activate)";
action = function()
Keys('Alt<')
end;
}
Macro {
area="Search"; key="Alt LOSTFOCUS"; description="Use Alt for search by name (deactivate)";
action = function()
Keys('Esc')
end;
}
Тут при поступлении фокусного события обработчик пытается выполнить макрос с именем "GOTFOCUS" или "LOSTFOCUS", что значительно гибче.
local F = far.Flags
local LostFocus
Event { description="watch for focus";
group="ConsoleInput";
action=function(Rec)
if Rec.EventType==F.FOCUS_EVENT then
LostFocus = not Rec.SetFocus
return 1
end
end;
}
local function skipAltTab()
LostFocus = false
mf.waitkey(1)
return not LostFocus
end
Macro {
area="Shell"; key="Alt"; description="Use Alt for search by name (activate)";
condition=skipAltTab;
action = function()
Keys('Alt<')
end;
}
Macro {
area="Search"; key="Alt"; description="Use Alt for search by name (deactivate)";
condition=skipAltTab;
action = function()
Keys('Esc')
end;
}
Преимущество перед прочими вариантами: если быстрый поиск был открыт до переключения по AltTab, то он и остаётся открытым.
DrKnS wrote: Быстрый поиск по одиночному Alt - это привычный и востребованный аудиторией паттерн, а "любой макрос на Alt" - это какая-то фантасмагория, не делайте так.
В Addons недалеко от AltSearch.lua лежит и AltMenu.lua
Cyberwatcher wrote: если в поиске нажать точку на цифровой клавиатуре, то поиск вылетает в историю
А если точнее, то быстрый поиск закрывается, и точка вводится в командную строку, вызывая открытие меню автодополнения. Странное поведение; хотел бы я знать, зачем/почему так.
Far 2.0.0.1807 - открываем быстрый поиск, нажимаем Ctrl+Shift/Shif+Alt/Caps Lock для переключения раскладки - быстрый поиск на месте.
Far 3.0.4900.0/3.0.4944.0 - после нажатия указанных комбинаций быстрый поиск закрывается. Так и должно быть или это какой-то глюк и можно писать на Mantis?
Как альтернативное решение можно использовать плагин FastFind Enhanced.
Вот вам версия со всеми исправлениями из его темы и макрос для вызова который не реагирует на Alt+Tab.
DrKnS wrote: ↑Fri 23 Jan, 2015 18:12
Быстрый поиск по одиночному Alt - это привычный и востребованный аудиторией паттерн
То, что быстрый поиск в панелях необходим, это, бесспорно, и этого никто, кажется, не отрицает. Как и того, что к вызову быстрого поиска по одиночному Alt`у аудитория Far` попривыкла. Однако при этом создано уже несколько альтернативных макросов, также исполняющих быстрый поиск.
В составе популярной сборки на ru-board`e для вызова штатного "быстрого поиска" в панелях применяется макрос Shell_CtrlS.lua. Victor_VG, автор сборки, по его поводу пишет: "Я для себя давно задачу решил простым макросом (автор?) на Ctrl-S (так вызывается поиск в mc - Midnight Commander на UNIX) и не обращаю внимания на занятость Alt-буква … этот скрипт у меня уже столь давно, что не помню откуда он взят"
В составе популярного набора макросов авторства SimSU для в качестве варианта "быстрого поиска" есть макрос Shell_QuickSearch.lua, в котором его автор, в частности, пишет: "Стандартный поиск на панели отключен - пользуйтесь поиском после отпускания Alt".
Ещё одной альтернативой штатному быстрому поиску является макрос PanelFilter — фильтр панели (автор Shmuel).
И ещё одна альтернатива, вероятно не последняя, это PanelAutoFilter.lua — Автофильтр вместо быстрого поиска (автор John Doe).
Принципиальное отличие создаваемых макросов от текущего варианта штатного поиска состоит в том, что они, в отличие от него, не занимают сочетания букв с модификаторами Alt и AltShift. Т.е. оставляют пользователю для применения в его макросах 34x2=68 сочетаний ключей.
Вот и уважаемый разработчик системы lua-макросов в Far`е, Shmuel, по этому поводу отмечает: "то, что быстрый поиск отнимает все сочетания с обоими Alt, это непозволительное расточительство".
С учётом того, что, как показывает практика, "быстрый поиск можно было бы активизировать просто по нажатию (точнее, отпусканию) любой из клавиш Alt" предлагаю реализовать это изменение.
Ведь что такого страшного могло бы случится, если бы пользователь, привыкший к вызову быстрого поиска сочетанием Alt+Буква, пусть даже неожиданно, без всякого предупреждения, вдруг обнаружил бы, что панель быстрого поиска появляется по простому нажатию одиночного Alt`а? Полагаю, что он интуитивно быстро приспособится, почти даже не заметив небольшого изменения в интерфейсе. А когда он будет ещё и заранее предупреждён о предстоящем изменении, то и тем более оно для него пройдёт безболезненно. Ну, разве что, на всякий случай, совсем уже для перестраховки, для особо консервативных может быть сделать ещё и опцию для переключения режима вызова быстрого поиска через far:config.
А что? Разве любое привычное поведение не стоит менять?
Ведь если оно заведомо позитивное и эффективное, то, разумеется.
Но в данном то случае суть вопроса состоит именно в том, что предлагается даже не коренным образом поменять, а лишь слегка подкорректировать пусть и привычное, но устаревшее и существенно не эффективное поведение. И то, что оно может быть подкорректировано макросами, т.е. то, что оно фактически требует коррекции макросами, свидетельствует само по себе о его неэффективности. Иначе ни какая коррекция и не была бы нужна.
Tal wrote: ↑Sun 29 Sep, 2019 21:18...то, что оно может быть подкорректировано макросами, т.е. то, что оно фактически требует коррекции макросами, свидетельствует само по себе о его неэффективности. Иначе ни какая коррекция и не была бы нужна.
Если будет выполнена предлагаемая Вами "легкая" коррекция, придется писать макрос, который будет выполнять быстрый поиск по Alt+клавиша. Т.е. предлагаемое Вами поведение "требует коррекции макросами, [что] свидетельствует само по себе о его неэффективности. Иначе ни какая коррекция и не была бы нужна."
zg wrote: ↑Sun 29 Sep, 2019 21:30
как тем людям, которые привыкли к старому, вернуть его обратно?
Tal wrote: ↑Sun 29 Sep, 2019 19:33
на всякий случай, совсем уже для перестраховки, для особо консервативных может быть сделать ещё и опцию для переключения режима вызова быстрого поиска через far:config
Tal wrote: ↑Sun 29 Sep, 2019 19:33
на всякий случай, совсем уже для перестраховки, для особо консервативных может быть сделать ещё и опцию для переключения режима вызова быстрого поиска через far:config
нет. там и так уже очень много опций и их оттуда надо убирать, а не добавлять.
Дайте добавлю 5 копеек...
1. Есть макрос(искаробочный %FARHOME%\Addons\Macros\AltSearch.lua), который по одиночному нажатию Alt включает режим быстрого поиска.
Это действительно часто требуется (особенно, если приходится искать что-то, начинающееся с wildcard-а, типа *Mouse.lua)
Поэтому совершенно необязательно реализовывать эту фичу в ядре.
2. Да, быстрый поиск "занимает" 2*32 (примерно) сочетаний. НО! Это не мешает Вам "вешать" на Alt+буквы макросы. Как показал эксперимент, макросы приоритетнее, чем встроенный быстрый поиск.
Резюмирую. Так как всегда в уже имеющемся ФАРе можно настроить и для любителей старины (нажимать для поиска ALy+букву), и для привычных к DN (ALt, затеи имя), то тема яйца выеденного не стоит. Привет вам от Джонатана Свифта.