Нежелательный GetFindDataW при вызове плагина из юзер меню

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

Имеется панель плагина. Замечено, что GetFindDataW неожиданно и нежелательно
вызывается при вызове команд плагинов из юзер меню (любых плагинов, не
обязательно того, чья панель).

Пример, скрипт FarNet.PowerShellFar приведен ниже.
Панель при каждом GetFindDataW дает 1 файл, имя содержит счетчик вызовов.
  • запускаем панель, типа -- ps: .\Test-Panel.far.ps1
  • на ней один файл "file #1"
  • вызываем из юзер меню такой пункт -- lua: far.Message('test')
  • вызывается GetFindDataW, мы видим "file #2" на панели
Если же вызывать ту же самую команду луа из комстроки, GetFindDataW не вызывается (хорошо).

Вопрос - это баг, недоработка, фича?
Если фича, то можно ли как-то распознать в GetFindDataW этот особенный вызов? Хотя бы хаком каким.

Code: Select all

$global:EventCount = 0

$Explorer = [PowerShellFar.PowerExplorer]::new("9e5c334d-b73e-4069-b3ec-2777a7c188d8")
$Explorer.AsGetFiles = {
	++$global:EventCount
	New-FarFile -Name "file #$($global:EventCount)"
}

$Panel = [FarNet.Panel]::new($Explorer)
$Panel.Open()
P.S. Небольшой плач еще на эту тему.
Активно использую вложенные меню, причем не только нативные, но и искусственные
(lua: mf.usermenu), ибо вторые имеют некоторые полезные качества в отличие от
нативных (чтобы файл меню не рос слишком, чтобы разбить меню по темам, чтобы
меню можно было вызывать из разных мест). Так вот на каждый вызов таких меню
обновляются панели плагинов. Иногда это дорого/неэффективно, а иногда плохо
и по другим причинам.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

Баг, фича? Поместить на багтрекер?
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by zg »

вроде фича. добавлена тут. сейчас — тут.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

Понятно... А в чем смысл фичи, зачем она нужна? При вызове плагинов из комстроки панели не обновляются, а из меню обновляются - нелогично, на первый взгляд.
Если фича действительно нужна, можно ли панелям как-то узнать, что обновление вызвано именно таким способом? Специальный флаг или что-то подобное?
Yegor
Posts: 1326
Joined: Mon 04 Apr, 2005 13:41
Location: San Ramon, CA / Kharkov, UA
Has thanked: 32 times
Been thanked: 61 times

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by Yegor »

NightRoman wrote: Mon 24 Apr, 2023 13:04 Если же вызывать ту же самую команду луа из комстроки, GetFindDataW не вызывается (хорошо).
Спорить не буду, т.к. не проводил исследований, но как раз тот факт, что GetFindDataW не вызывается из комстроки, является недоработкой.

Например, я вызвал lua:Plugin.Command(), который удалил файл на плагиновой панели (или поменял директорию, хотя это может другое), разве не надо перечитать файлы?
Мы не можем ждать милостей от Фара, взять их у него — наша задача! (C) Мичурин
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

Yegor, обновление панели вызывается ДО вызова плагина, а не ПОСЛЕ.

Это легко видеть с таким модифицированным скриптом

Code: Select all

$global:EventCount = 0

$Explorer = [PowerShellFar.PowerExplorer]::new("9e5c334d-b73e-4069-b3ec-2777a7c188d8")
$Explorer.AsGetFiles = {
	++$global:EventCount
	$name = "file #$global:EventCount"
	Show-FarMessage $name
	New-FarFile -Name $name
}

$Panel = [FarNet.Panel]::new($Explorer)
$Panel.Open()
Диалог lua: far.Message('test') показывается после диалога обновления панели, который показывает "file #2", то есть обновление вызвано до вызова луа.
Last edited by NightRoman on Sun 14 May, 2023 14:29, edited 2 times in total.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

Хмм... Описанные выше наблюдаемые факты верны. Но тут что-то странное тоже
происходит. Если команду меню lua: far.Message('test') заменить на "подобную"
ps: Show-FarMessage 'test', то сначала показывается диалог test, потом "file #2".
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by John Doe »

Замените префикс на luas:
https://t.me/FarManager — Telegram чат
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Нежелательный GetFindDataW при вызове плагина из юзер меню

Post by NightRoman »

John Doe, спасибо, ясно теперь, команда плагина вызывается до обновления панели.

Тогда возвращаясь к теме. На то, что панели не обновляются при вызове из комстроки вроде никто не жалуется. Или жалуются (?), но, вероятно, есть способы с этим жить, что-то делать.
А на то, что панели обновляются с тем же сценарием из меню, жалуюсь хотя бы я :). И как с этим что-то делать непонятно.
Last edited by NightRoman on Sun 14 May, 2023 17:07, edited 1 time in total.
Post Reply

Return to “Разработка плагинов”