sToLp wrote: А после того, как компетентные товарищи поправят то, что нужно, какие то изменения в сабж необходимо будет вносить?
Не факт, что внесут.
А если внесут, то разберёмся.
Имхо, если в меню, например есть и "r" и "к", то они не должны попадать в общий цикл.
Улучшение меню с дублирующимися хоткеями
Posted: Mon 08 Dec, 2014 17:05
by sToLp
John Doe wrote:Имхо, если в меню, например есть и "r" и "к", то они не должны попадать в общий цикл.
Любопытно! В особенности с учётом того, что после внесения рекомендованного дополнения эту пару я перепроверил несколько раз, и всякий раз цикличность была в полном порядке. Чем же таким необычным наделена эта пара, и с чем это может быть связано?
Или речь идёт о подобных парах вообще? Мне же как пользователю весьма удобно применение таких пар. Прежде всего потому, что это расширяет диапазон вариантов наборов команд, при хорошем различении хоткеев. Издавна русские буквы в хоткеях я проставляю БОЛЬШИМИ, а английские — small.
Улучшение меню с дублирующимися хоткеями
Posted: Mon 08 Dec, 2014 17:42
by John Doe
sToLp wrote: Или речь идёт о подобных парах вообще?
Да.
sToLp wrote: это расширяет диапазон вариантов наборов команд
Ничего не имею против.
sToLp wrote: и всякий раз цикличность была в полном порядке
Вот об этом я и говорю: по-хорошему должны быть независисые циклы: отдельно для "r", отдельно для "К".
Улучшение меню с дублирующимися хоткеями
Posted: Mon 08 Dec, 2014 18:09
by sToLp
John Doe wrote:должны быть независимые циклы: отдельно для "r", отдельно для "К".
Для данного сабжа мне точно удобнее крутить их в одном цикле (кстати, хорошо бы и в обратную сторону тоже). Но мне надо подумать над тем, что Вы изложили. Возможно, иногда нужно так как сейчас, иногда — по другому, раздельно крутить.
Спасибо за развитие очень полезного и перспективного, как я вижу, сабжа и за консультацию!
Улучшение меню с дублирующимися хоткеями
Posted: Wed 10 Dec, 2014 16:08
by John Doe
sToLp wrote: Лично мне недостаёт для полного комфорта работы с ними только возможности выбора пунктов по Ctrl-хоткей.
В шапке.
Улучшение меню с дублирующимися хоткеями
Posted: Wed 10 Dec, 2014 17:04
by siberia-man
В случае меню выбора синтаксиса FarColorer
ctrl+letter - выбирает первую назначенную букву (например P) из списка больше одного пункта (например, P Perl, P PowerShell)
ctrl+W - вызывает фаровский список задач поверх меню колорера (W wsf, W MediaWiki)
Улучшение меню с дублирующимися хоткеями
Posted: Wed 10 Dec, 2014 17:55
by John Doe
siberia-man wrote:ctrl+letter - выбирает первую назначенную букву (например P) из списка больше одного пункта (например, P Perl, P PowerShell)
А что не так?
siberia-man wrote:ctrl+W - вызывает фаровский список задач поверх меню колорера (W wsf, W MediaWiki)
Думаю мой скрипт не при чём.
Улучшение меню с дублирующимися хоткеями
Posted: Wed 10 Dec, 2014 17:57
by sToLp
John Doe wrote: В шапке.
Большое спасибо! И особое спасибо за полезное органичное дополнение — выбор пункта меню по Ctrl-<хоткей>!
Для того, чтобы основательно протестировать данный комбайн макросов нужно определённое время. По моим прикидкам, даже если не брать в расчёт Главное меню, листбоксы диалогов, tmp-меню и некоторые другие, в Фаре насчитается ещё около двух десятков видов меню. И применение сабжевых макросов во многих из них существенно ускоряет работу с ними, делает её более комфортной, более приятной.
Это, прежде всего, множественные меню пользователя (в локальных папках, в папке Фара, в профиле несколько контекстных меню), нативное меню плагинов (F11), меню дисков (Alt-F1-F2), Emenu, экраны [F12], три вида историй: команд (Alt-F8), папок (Alt-F12) и редактирования/просмотра (Alt-F10), far:config, меню настройки параметров плагинов, несчётное количество меню выбора на исполнение макросов, объёмное меню ассоциаций файлов, огромные меню "Macro Browser Alt." и нативного "Macro Browser". И это наверняка ещё не всё.
Улучшение меню с дублирующимися хоткеями
Posted: Wed 10 Dec, 2014 18:35
by John Doe
sToLp wrote: применение сабжевых макросов во многих из них существенно ускоряет работу с ними, делает её более комфортной, более приятной.
Лично я предпочитаю использовать другой набор: SmartMenuFilter.
Улучшение меню с дублирующимися хоткеями
Posted: Thu 11 Dec, 2014 10:39
by John Doe
В функцию condition обработчика Ctrl-<hotkey> to run hotkey необходимо добавить условие and param.Param2.UnicodeChar~="\0".
Улучшение меню с дублирующимися хоткеями
Posted: Thu 11 Dec, 2014 15:45
by John Doe
Исправлен баг, проявлявшийся если кликнуть правой кнопкой мыши вне диалога. Edit: пардон, не то. Перевыложил.
Улучшение меню с дублирующимися хоткеями
Posted: Thu 11 Dec, 2014 16:29
by sToLp
John Doe
Большое спасибо за совершенствование полезнейшего набора макросов ConcurrentHotkeys!
Не могли бы Вы кратко откомментировать последние изменения/дополнения? Чтобы хотя бы понемножку приближаться к пониманию обработчиков событий.
До публикации Вами Ctrl-hotkey — макроса я пробовал применять
Macro
{
description="LCtrl-hotkey выбор позиции в меню по хоткею в строке (sToLp)";
area="Dialog Menu MainMenu UserMenu Disks";
key="/LCtrl\\w$/";
action=function()
hk = mf.ucase(Object.GetHotkey(0)); -- какой хоткей установлен в строке (возвращается в ВЕРХНЕМ регистре, а если не установлен - nil)
tk=mf.xlat(hk) -- тот же хоткей в другой раскладке
sk = akey(1); -- каким шорткатом запущен макрос
ck = mf.ucase(mf.substr(sk, -1)); -- какой кей стоит в конце шортката с контрол (возвращается в ВЕРХНЕМ регистре)
if (mf.string(ck) == mf.string(hk)) or (mf.string(ck) == mf.string(tk))
then
Keys("Enter")
else
Keys("Akey")
end;
end;
}
. И из любопытства попробовал сегодня запустить его параллельно с Вашим. И с удивлением обнаружил, что они не конфликтуют. Как же тогда определить который из них срабатывает?
Улучшение меню с дублирующимися хоткеями
Posted: Thu 11 Dec, 2014 17:30
by John Doe
В большинстве случаев срабатывает ваш, т.к. макросы выполняются до событий.
Кое-что ваш не отлавливает, тогда выполняется мой.
Улучшение меню с дублирующимися хоткеями
Posted: Thu 11 Dec, 2014 18:19
by sToLp
Благодарю Вас за разъяснение! Если я правильно понял, то при возможности выгоднее применять макрос по событиям. Во-первых, потому, что обычный не всегда всё отлавливает. Во-вторых, в случае, если потребуются другие макросы в том же диапазоне ключей, то макрос по событиям заведомо не будет им препятствовать.
Posted: Thu 11 Dec, 2014 18:22
by John Doe
Можно написать ваш макрос и так, чтобы отлавливал всё (громоздко правда может получиться).
А понизив приоритет, в любом случае несложно избежать конфликтов с другими макросами.
Улучшение меню с дублирующимися хоткеями
Posted: Fri 12 Dec, 2014 19:05
by John Doe
All, из макроса "Reset filters" необходимо убрать область MainMenu (перевыкладывать пока не буду).
sToLp, если интересно, то этот же макрос можно переписать и в виде события, как-то так
local Esc = 27
Event { group="DialogEvent"; description="Reset filters";
uid="B42F7915-CE61-4138-BAB3-92B961EEB4A8";
condition=function(Event,param)
local hDlg,ID,Input = param.hDlg,param.Param1,param.Param2
return param.Msg==F.DN_CONTROLINPUT and Event==F.DE_DLGPROCINIT
and Input.VirtualKeyCode==Esc and far.InputRecordToName(Input)=="Esc"
and far.GetDlgItem(hDlg,ID)[1]==F.DI_LISTBOX
and hDlg:send(F.DM_LISTINFO,ID).ItemsNumber~=Object.ItemCount
end;
action=function(Event,param)
if Menu.Filter(0)==1 then Menu.Filter(0,0); return 1 end
local hDlg,ID = param.hDlg,param.Param1
hDlg:send(F.DM_ENABLEREDRAW,0)
for i,item in ipairs(far.GetDlgItem(hDlg,ID)[6]) do--[6] Selected/ListItems: integer/table
if band(item.Flags,F.LIF_HIDDEN)~=0 then
hDlg:send(F.DM_LISTUPDATE,ID,{Index=i,Text=item.Text,Flags=band(item.Flags,bnot(F.LIF_HIDDEN))})
end
end
Menu.Filter(4) --подправить высоту списка под количество элементов
hDlg:send(F.DM_ENABLEREDRAW,1)
return 1
end;
}