Как подавить отображение панели на экране Topic is solved

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

Здравствуйте, уважаемые Знатоки!
Как вы, наверно, знаете, у меня есть скрипт, рисующий на панели дерево папок. Для отображения содержимого контейнеров сейчас используется утилита 7z.exe. Увы, есть контейнеры, содержимое которых не выводится этой утилитой (msi-файлы, например). Но имеется плагин (например, Observer), показывающий содержимое таких контейнеров. Родилась идея для составления дерева для этого случая «пробегать» по всем папкам, «заходя» во вложенные, и составлять список папок. Увы, есть неприятный эффект: все эти «заходы» отображаются на экране (и в заголовке панели и окна).
Внимание, вопрос!.
Есть ли возможность «подавить» вывод панели на экран, при этом получать итемы панели как если бы они были видны на экране?
──────
P/S. Если дерево вызывается из макроса (а не из командной строки или меню дисков/плагинов), то если не указывать в макросе флаг EnableOutput, то эффект приблизительно такой, как требуется, за исключением заголовка панели/окна. Увы, при этом подавляется также информационное сообщение о ходе построения дерева (выводящееся функцией far.Message без кнопок). К тому же для вызова дерева из комстроки или меню дисков/плагинов этого флага не предусмотрено.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

Один (кривущий!!!) способ я нашёл: перед обходом дерева погасить панель, а после - вернуть состояние. Есть две неприятности:
(а) есть ли возможность погасить панели кроме как через keystroke
(б) на самом деле неприятный какой-то способ. Может, кто-то придумает-присоветует более прямой путь?
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

На самом деле в описанном способе есть три неприятности (следствие первой): чтобы погасить панель (панели) надо послать keystroke, а это вызывает эксепшн:

Code: Select all

C:\Program Files\Far Manager\Plugins\LuaMacro\LuaMacro.lua:74: attempt to yield across C-call boundary
Как с этим бороться, я не знаю. Жаль, что есть какие-то функции ФАРа, не имеющие АПИ (а доступные только посылкой клавиатурных последовательностей)… :cry:
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Как подавить отображение панели на экране

Post by citRiks »

buniak_a_h, а эта вещь горю не помогает?
far.Host API
viewtopic.php?f=15&t=12220
там вроде можно лазить по панельным плагином через АПИ.
чего-то может не хватать, но если точно понять чего там не хватает,
то могу патч в С++ прописать такой, если реально нужно.
Правда тогда это получится форк или ЛуаФара как минимум, также еще самого Фара может быть.
Но тогда назревает предложение сделать форк обсервера (вместо форканья ФАРа/ЛуаФара)
Last edited by citRiks on Thu 12 Nov, 2020 23:43, edited 1 time in total.
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

citRiks wrote: Thu 12 Nov, 2020 23:41 buniak_a_h, а эта вещь горю не помогает?
far.Host API
Спасибочки! Наверно, это - то, что надо. Вместо SetPanelDirectory - похоже, как раз то, что надо. Проверю…
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

citRiks, у этого АПИ есть большой минус - практически полное отсутствие документации (кроме перечисления функций).
Вот, например, FreeUserData что делает? Вроде, ей должен передаваться некий массив (список папок? Непонятно…)
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Как подавить отображение панели на экране

Post by buniak_a_h »

citRiks, а ещё, как выяснилось, far.Host не работает с multiarc
Post Reply

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