m8, P/S.
Получилось, но (а) пер-анально и (б) привязано к языку.
Идея в следующем: анализируется заголовок меню, и если это -
Local menu
или
Main menu…
, то делать. Иначе - нет.
Ну и (в) представьте, что какой-то идиот сделал диалог, состоящий из одного МЕНЮ с таким заголовком, но не имеющий никакого отношения к пользовательскому МЕНЮ. Футер всё равно будет подменяться
Итак, такой скрипт:
local F = far.Flags
----------------
local NewFooter = 'Новый футер'
local NewWidth = 30
Event {
id = "76149F72-5200-4219-BD91-2E8EB32497B9";
group = "DialogEvent";
description = "Замена футера меню";
action = function(Event, Param)
local Item = Param.hDlg:send(F.DM_GETDLGITEM, 1)
if type(Item) == 'table' and (Item[1]==F.DI_LISTBOX) and
(Item[12] or 0) == 0 then -- UserData
Item[12] = 1
Param.hDlg:send(F.DM_SETDLGITEM,1, Item)
local hDlg = Param.hDlg
local ListRect = hDlg:send(F.DM_GETDLGRECT)
local Titles = hDlg:send(F.DM_LISTGETTITLES, 1)
if Titles and Titles.Title and (Titles.Title == "Local menu" or Titles.Title:sub(1,9) == "Main menu") then
Titles.Bottom = NewFooter
hDlg:send(F.DM_LISTSETTITLES, 1, Titles) -- Новые Title и Footer
hDlg:send(F.DM_RESIZEDIALOG, 0, {X=NewWidth, Y=ListRect.Bottom-ListRect.Top+1}) -- Изменение размеров
hDlg:send(F.DM_MOVEDIALOG, 1, {X=-1, Y=-1}) -- Позиционирование по центру
end
end
end;
}