Улучшение меню с дублирующимися хоткеями

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

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

Latest post of the previous page:

Code: Select all

local F = far.Flags
local hDlg,ID
Macro { description="Reset filters";
  area="Dialog Menu MainMenu UserMenu Disks"; key="Esc F10";
  uid="3DE219F0-7B83-453B-A1FA-E780640F7093";
  condition=function()
    hDlg = far.AdvControl"ACTL_GETWINDOWINFO".Id
    ID = Area.Dialog and Dlg.CurPos or 1
    if Area.Dialog and Dlg.ItemType~=F.DI_LISTBOX then return end
    return hDlg:send(F.DM_LISTINFO,ID).ItemsNumber~=Object.ItemCount
  end;
  action=function()
    if Menu.Filter(0)==1 then Menu.Filter(0,0); return end
    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)
  end;
}
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

Наблюдаю отрисовку отфильтрованных меню на фоне друг друга.

User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp, скачайте из шапки и проверьте ещё раз.
Если будет повторяться, то попробуйте заменить DM_SHOWDIALOG на DM_ENABLEREDRAW
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

Скачал. Повторилось. Заменил. Перестало повторяться. Спасибо!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

Похоже DM_SHOWDIALOG и Menu.Filter(4) как-то конфликтуют: http://bugs.farmanager.com/view.php?id=2879
А жаль, при замене на DM_ENABLEREDRAW видно мелькание...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

Исправил позиционирование.
Теперь при наличии одинаковых хоткеев повторные нажатия приводят к циклическому перемещению.
siberia-man
Posts: 131
Joined: Sat 28 Jun, 2014 23:07
Has thanked: 2 times
Been thanked: 9 times

Улучшение меню с дублирующимися хоткеями

Post by siberia-man »

Здорово! Спасибо!
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

Погонял с пристрастием сабжевые макросы с разными меню. В нативных меню вроде бы всё работает как заявлено. В том числе в нативном меню плагинов.

Большое спасибо за очень полезные макросы! Они просто чудесны!

Лично мне недостаёт для полного комфорта работы с ними только возможности выбора пунктов по Ctrl-хоткей.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp wrote: Лично мне недостаёт для полного комфорта работы с ними только возможности выбора пунктов по Ctrl-хоткей.
Кроме MBA, для чего ещё?
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

John Doe wrote:Кроме MBA, для чего ещё?
Почему же, во всех фаровских меню, а не только в МВА (хотя там особенно). Я пытался обосновать это уже выше и Вы возражали (выделено мною):
John Doe wrote:
sToLp wrote: Пользователь нацелен на хоткей, держит его под пальцем. Только что нажимал Alt-хоткей. И ему сподручнее в этот момент нажать Ctrl-хоткей, нежели переключится на Enter.
А при чём тут Enter? Достаточно нажать тот же хоткей без Alt.
Но ведь сейчас уже в нашей ситуации нажать на хоткей без Alt в большинстве случаев означает вызвать фильтр и далее в отфильтрованном меню по кругу перемещать курсор. Поэтому — Enter, а было бы предпочтительнее иметь и альтернативу — Ctrl-хоткей.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

В своих упражнениях с сабжевыми макросами забрёл я вчера ненароком в том числе в меню выбора плагинов не нативное, а создаваемое плагином 'Расширенное меню плагинов (PlugMenu)' Максима Русова. И это напомнило мне о применяемом в этом плагине особом способе фильтрации меню.
По хоткеям там меню не фильтруются, они обрабатываются плагином в расчёте на то, что не будут дублироваться. И это не очень-то удобно. Но зато в PlugMenu по Alt-знак (с любым Alt: и L, и R) включается фильтрация меню по первым буквам каждого слова в столбце меню 'команда'.

А вот это весьма удобно. Ведь иногда непомеченных хоткеями пунктов в меню может быть даже больше, чем помеченных.

Резюме:
Идеальной была бы совмещённая фильтрация позиций/строк меню одновременно и по хоткеям (там, где они расставлены пользователем), и по первым буквам слов в строках, не помеченных хоткеями.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp wrote: По хоткеям там меню не фильтруются, они обрабатываются плагином в расчёте на то, что не будут дублироваться. И это не очень-то удобно. Но зато в PlugMenu по Alt-знак (с любым Alt: и L, и R) включается фильтрация меню по первым буквам каждого слова в столбце меню 'команда'.
См. немодальный фильтр меню (3).
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

Да! Очень полезный макрос! Даже странно, что я его раньше не приметил. Благодарю Вас за подсказку!

И чтобы он не противоречил сабжевым, а удачно расширял их функциональность, я перевесил его с Alt на AltShift и дополнил возможностью при фильтрации использовать пробелы (Space). Для этого я внёс следующие немудрёные дополнения в 2 его строки:
key="/^[RL]Alt[b]Shift[/b](BS|Add|Subtract|Multiply|Divide|BackSlash|ShiftBackSlash|.|Shift.[b]|Space[/b])$/";
и
local key = akey(1):match("R?Alt[b]Shift[/b](.+)").

И теперь отсутствие в сабже [b]Ctrl-хоткей[/b] ощущается мною ещё больше. :oops:
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

В работе с сабжем всплыл загадочный нюанс, заключающийся в следующем.

В меню 'Ассоциации для файлов' есть несколько позиций с хоткеем "К" (русская К) и одна позиция "r" (это одна и та же клавиша).

В английской раскладке при нажатии на эту клавишу с LAlt курсор сразу прыгает на строку с хоткеем "r", перепрыгивая через все "К". И далее останавливается.

При последовательных нажатиях в русской раскладке на эту клавишу с LAlt сначала производятся переходы от "К" к "К". Потом, при очередном нажатии, курсор прыгает на "r" и останавливается, и дальше по кругу не идёт.

Если ниже 'по пути следования' добавить ещё "К", то последующие после "r" прыжки курсора будут производиться между этой "r" и добавленным "К".

Если ещё добавить "r", то переходы будут между этим трио. К самому верхнему "К" курсор всё равно не возвращается.

Этот фокус-покус повторяется стабильно. Случилось проверить даже на разных модификациях Win7 на разных компах.

С другими пАрными хоткеями такого пока не наблюдал. В частности, например переходы между множественными русскими "Т" и английскими "n" происходят нормально по кругу между ними в каждой из раскладок одинаково.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Улучшение меню с дублирующимися хоткеями

Post by John Doe »

sToLp wrote: С другими пАрными хоткеями такого пока не наблюдал.
Вообще-то проявляется с любыми парами.
Проблема связана с тем, что Object.CheckHotkey не всегда учитывает, что хоткеи зависят от раскладки: http://bugs.farmanager.com/view.php?id=2881

Поэтому место, куда переходим с помощью по Alt-хоткей не всегда будет соответствовать команде, которая реально выполнится при простом нажатии хоткея. Исправлять это нужно в Object.CheckHotkey.

А цикличность восстановить проще: найдите строку local Pos = Object.CheckHotkey(hk,InitPos+1) и добавьте после неё

Code: Select all

if Pos==0 then Pos = Object.CheckHotkey(hk) end
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

Улучшение меню с дублирующимися хоткеями

Post by sToLp »

John Doe wrote:цикличность восстановить проще: ...
Точно! Сделал по данной Вами инструкции и цикличность заработала нормально. Спасибо!
John Doe wrote:Object.CheckHotkey не учитывает, что хоткеи зависят от раскладки.

Поэтому место, куда переходим с помощью Alt-хоткей не всегда будет соответствовать команде, которая реально выполнится при простом нажатии хоткея. Исправлять это нужно в Object.CheckHotkey.
А после того, как компетентные товарищи поправят то, что нужно, какие то изменения в сабж необходимо будет вносить?
Post Reply

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