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

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

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

Postby John Doe » Sat 06 Dec, 2014 16:08

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: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sat 06 Dec, 2014 18:21

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


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

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

Postby John Doe » Sat 06 Dec, 2014 18:36

sToLp, скачайте из шапки и проверьте ещё раз.
Если будет повторяться, то попробуйте заменить DM_SHOWDIALOG на DM_ENABLEREDRAW

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sat 06 Dec, 2014 18:59

Скачал. Повторилось. Заменил. Перестало повторяться. Спасибо!

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

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

Postby John Doe » Sat 06 Dec, 2014 19:11

Похоже DM_SHOWDIALOG и Menu.Filter(4) как-то конфликтуют: http://bugs.farmanager.com/view.php?id=2879
А жаль, при замене на DM_ENABLEREDRAW видно мелькание...

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

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

Postby John Doe » Sat 06 Dec, 2014 21:48

Исправил позиционирование.
Теперь при наличии одинаковых хоткеев повторные нажатия приводят к циклическому перемещению.

siberia-man
Posts: 68
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

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

Postby siberia-man » Sat 06 Dec, 2014 22:39

Здорово! Спасибо!

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sat 06 Dec, 2014 23:26

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

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

Лично мне недостаёт для полного комфорта работы с ними только возможности выбора пунктов по Ctrl-хоткей.

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

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

Postby John Doe » Sat 06 Dec, 2014 23:36

sToLp wrote:Source of the post Лично мне недостаёт для полного комфорта работы с ними только возможности выбора пунктов по Ctrl-хоткей.
Кроме MBA, для чего ещё?

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sun 07 Dec, 2014 06:07

John Doe wrote:Кроме MBA, для чего ещё?
Почему же, во всех фаровских меню, а не только в МВА (хотя там особенно). Я пытался обосновать это уже выше и Вы возражали (выделено мною):
John Doe wrote:
sToLp wrote:Source of the post Пользователь нацелен на хоткей, держит его под пальцем. Только что нажимал Alt-хоткей. И ему сподручнее в этот момент нажать Ctrl-хоткей, нежели переключится на Enter.
А при чём тут Enter? Достаточно нажать тот же хоткей без Alt.
Но ведь сейчас уже в нашей ситуации нажать на хоткей без Alt в большинстве случаев означает вызвать фильтр и далее в отфильтрованном меню по кругу перемещать курсор. Поэтому — Enter, а было бы предпочтительнее иметь и альтернативу — Ctrl-хоткей.

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sun 07 Dec, 2014 08:46

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

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

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

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

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

Postby John Doe » Sun 07 Dec, 2014 10:25

sToLp wrote:Source of the post По хоткеям там меню не фильтруются, они обрабатываются плагином в расчёте на то, что не будут дублироваться. И это не очень-то удобно. Но зато в PlugMenu по Alt-знак (с любым Alt: и L, и R) включается фильтрация меню по первым буквам каждого слова в столбце меню 'команда'.
См. немодальный фильтр меню (3).

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Sun 07 Dec, 2014 15:56


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

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

И теперь отсутствие в сабже Ctrl-хоткей ощущается мною ещё больше. :oops:

User avatar
sToLp
Posts: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Mon 08 Dec, 2014 14:50

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

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

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

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

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

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

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

С другими пАрными хоткеями такого пока не наблюдал. В частности, например переходы между множественными русскими "Т" и английскими "n" происходят нормально по кругу между ними в каждой из раскладок одинаково.

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

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

Postby John Doe » Mon 08 Dec, 2014 15:53

sToLp wrote:Source of the post С другими пАрными хоткеями такого пока не наблюдал.
Вообще-то проявляется с любыми парами.
Проблема связана с тем, что 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: 691
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 31 times
Been thanked: 5 times

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

Postby sToLp » Mon 08 Dec, 2014 16:32

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

John Doe wrote:Object.CheckHotkey не учитывает, что хоткеи зависят от раскладки.

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

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

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

Postby John Doe » Mon 08 Dec, 2014 16:42

sToLp wrote:Source of the post А после того, как компетентные товарищи поправят то, что нужно, какие то изменения в сабж необходимо будет вносить?
Не факт, что внесут.
А если внесут, то разберёмся.

Имхо, если в меню, например есть и "r" и "к", то они не должны попадать в общий цикл.


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

Who is online

Users browsing this forum: No registered users and 2 guests