Начальное позиционирование списка в far.Menu

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
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:

Начальное позиционирование списка в far.Menu

Post by buniak_a_h »

Здравствуйте, уважаемые знатоки! У меня вопрос по far.Menu
В первом параметре (Properties) есть возможность указать начальную позицию, но я не нашёл способа указать позицию первого видимого элемента. Я опять что-то не дочитал, или такого действительно нету?
Пояснение.
Есть BreakKeys, при нажатии на которые хочется проделать некую работу, после которой вернуть "всё как было". Есть ли возможность:
(а) Определить первый видимый элемент не по Position и позиции курсора, а прямее?
(б) По окончании обработки вывести список в той же позиции, не применяя последовательности Keys?
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Начальное позиционирование списка в far.Menu

Post by John Doe »

buniak_a_h wrote: Sat 03 Jun, 2023 16:35 но я не нашёл способа указать позицию первого видимого элемента. Я опять что-то не дочитал, или такого действительно нету?
Нету.

Можно запоминать верхний элемент при закрытии, а при повторном открытии восстанавливать макросом. Но без Keys.

Всё это конечно не очень прямо. Альтернатива - полноценный диалог с листбоксом. Но придётся самостоятельно повторять всю логику меню.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Начальное позиционирование списка в far.Menu

Post by buniak_a_h »

John Doe, спасибо. Жаль. Если б был Shuel - попросил бы добавить параметр. Эх!
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Начальное позиционирование списка в far.Menu

Post by John Doe »

far.Menu это не только макросы, но и апи плагинов
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Начальное позиционирование списка в far.Menu

Post by Shmuel »

API-функция Menu, на мой взгляд, имеет существенный дефект, состоящий в том, что любая клавиша, на которую она реагирует (не считаю клавиш навигации), завершает функцию. Правильнее было бы предусмотреть параметр-callback.
Last edited by Shmuel on Sat 03 Jun, 2023 19:18, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Начальное позиционирование списка в far.Menu

Post by John Doe »

Это было бы полезно, но тем не менее не полностью закрыло бы потребность в позиционировании верхнего элемента.
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Начальное позиционирование списка в far.Menu

Post by John Doe »

@buniak_a_h
Вот такой код нашёл в своём макробраузере

Code: Select all

local Pos --todo Работать не с позицией, а с id макроса
Event { description="MBA internal (preserve list position between launches)";
  group="DialogEvent";
  uid="C21BDB94-01DB-4624-8BE3-CA9F897E3261";
  condition=function(Event,param)
    if Event==F.DE_DLGPROCEND and (param.Msg==F.DN_INITDIALOG or param.Msg==F.DN_CLOSE) then
      local info = param.hDlg:send(F.DM_GETDIALOGINFO)
      return info and info.Id==MBid
    end
  end;
  action=function(Event,param)
    if Pos and param.Msg==F.DN_INITDIALOG then
      local item = param.hDlg:send(F.DM_LISTGETITEM,1,Pos.SelectPos)
      if item and band(item.Flags,F.LIF_HIDDEN)==0 then
        param.hDlg:send(F.DM_LISTSETCURPOS,1,Pos)
      end
    elseif param.Msg==F.DN_CLOSE then
      Pos = param.hDlg:send(F.DM_LISTGETCURPOS)
    end
  end;
}
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 13855
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 428 times
Contact:

Начальное позиционирование списка в far.Menu

Post by John Doe »

John Doe wrote: Sat 03 Jun, 2023 18:38 Альтернатива - полноценный диалог с листбоксом. Но придётся самостоятельно повторять всю логику меню.
Лет 10 назад я это уже пробовал сделать. Модуль MenuEx, дающий все возможности полноценного диалога, при сохранении простоты использования обычного меню.
Планировал перевести на него свои утилиты.
Не выложил, поскольку не всё было доделано.
Shmuel wrote: Sat 03 Jun, 2023 19:17 Правильнее было бы предусмотреть параметр-callback.
И такое тоже было предусмотрено.
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4262
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 644 times
Contact:

Начальное позиционирование списка в far.Menu

Post by buniak_a_h »

John Doe wrote: Sat 03 Jun, 2023 22:41
John Doe wrote: Sat 03 Jun, 2023 18:38 Альтернатива - полноценный диалог с листбоксом. Но придётся самостоятельно повторять всю логику меню.
Лет 10 назад я это уже пробовал сделать.
<…>
John Doe wrote: Sat 03 Jun, 2023 22:41
Shmuel wrote: Sat 03 Jun, 2023 19:17 Правильнее было бы предусмотреть параметр-callback.
И такое тоже было предусмотрено.
У меня тоже такой модуль есть (в сообщении по ссылке, возможно, устаревшая версия). Просто надеялся "малой кровью" решить, думал, может прозевал.
Last edited by buniak_a_h on Sun 04 Jun, 2023 00:25, edited 1 time in total.
Post Reply

Return to “Нужна помощь”