Особенность работы MenuItem

Здесь можно сообщить о найденных багах в Far.
Post Reply
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Особенность работы MenuItem

Post by buniak_a_h »

Обнаружена особенность добавления пункта МЕНЮ функцией MenuItem (в скрипте), очень похожая на баг.
Имеется такой маленький скрипт:

Code: Select all

MenuItem {
  description = "qqq.lua";
  menu   = "Plugins";
  area   = "Shell";
  guid   = "A3398CC5-9CB9-4897-B278-809FEF442B5E";
  text   = function(menu,area)
    -- Это выполняется как при вызове МЕНЮ плагинов, так и при вызове МЕНЮ дисков
    -- (если в этом меню включены [x] Show plugins)
    --[[*D*]]win.OutputDebugString('BAX.qqq.7: menu='..menu)
    return "BAX -- Hello!"
  end;
  action = function(OpenFrom,Item)
  end;
}
Почему-то функция text = вызывается не только при вызове МЕНЮ плагинов (по F11), но и при вызове МЕНЮ дисков (по Alt+F1 / Alt+F2), если в этом МЕНЮ включен показ плагиновых панелей. Мне кажется это неправильным. Такое ощущение, что переставлен порядок проверки условий: сначала вычисляется text, а затем проверяется тип МЕНЮ. Ну или при добавлении плагиновых панелей в список доступных дисков подменяется тип МЕНЮ (хотя при этом значение, возвращаемое функцией text, игнорируется.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Особенность работы MenuItem

Post by Shmuel »

  • Фар, чтобы узнать, что показывать в меню, вызывает функцию плагина GetPluginInfoW.
  • При этом плагин не знает, какое меню Фар будет выводить: меню плагинов или меню дисков.
  • Плагин LuaMacro при вызове GetPluginInfoW видит макрообласть Shell, и он должен дать Фару готовую строку, а получить эту строку он может, только вызвав функцию text().
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Особенность работы MenuItem

Post by buniak_a_h »

Shmuel, я примерно так и думал. Заковыка в том, что плагин «не знает, какое меню Фар будет выводить». Это, видимо, и есть "странность". Ведь от этого может зависеть и текст пункта меню.
Впрочем, теперь уже это не имеет значения. Исправлять (улучшать) всё равно некому :cry:
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Особенность работы MenuItem

Post by Shmuel »

buniak_a_h wrote: Wed 31 Aug, 2022 04:45 Ведь от этого может зависеть и текст пункта меню.
Это не так, плагин заполняет структуру PluginInfo, а в ней предусмотрены отдельные строки для меню плагинов, дисков и конфигурации.
Короче, вся "проблема" заключается в небольшой неоптимальности - лишний вызов функции text().
На корректность показа строк меню это не влияет.
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Особенность работы MenuItem

Post by buniak_a_h »

Shmuel wrote: Wed 31 Aug, 2022 06:02 вся "проблема" заключается в небольшой неоптимальности - лишний вызов функции text().
На корректность показа строк меню это не влияет.
Это как-нить отразить бы в документации. А то ведь при плохом стиле в функции text могут производиться такие действия, которые могут привести к ошибке. В частности, у меня в скрипте вылезла ошибка времени выполнения при открытии панели, не содержащей ни одного элемента. И ошибка вылезает в совершенно неожиданные моменты (при переключении диска, например). Короче, просто надо знать. Я не знал.
Shmuel
Posts: 6834
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Особенность работы MenuItem

Post by Shmuel »

buniak_a_h wrote: Wed 31 Aug, 2022 06:12 Это как-нить отразить бы в документации.
Отразите, пришлите в Far Group ваши изменения.
Но вот сам Фар в его документации не даёт никаких гарантий когда и как часто будет вызываться функция GetPluginInfoW.
Post Reply

Return to “Глюки и баги”