Page 1 of 1

Вывод на консоль при вызове из ком-строки и меню плагинов

Posted: Fri 09 Sep, 2016 06:35
by NightRoman
UPDATE: см. далее мой вариант макроса, любезно предложенного @Shmuel, так гораздо проще

Более-менее приспособил FarNet и PowerShellFar к изменениям в Far по выводу на
консоль из плагинов. Однако, есть отличия в поведении Far при вызове плагина из
ком-строки от вызова из меню.

В обоих случаях плагин пишет строки так:
- FCTL_GETUSERSCREEN
- написать строку
- FCTL_SETUSERSCREEN

При вызове из ком-строки между строками нет пустых строк.
При вызове из меню плагинов есть пустые строки.

Почему это отличие? Может, это не задумано так? Ошибка, иначе говоря?

Поведение при вызове из ком-строки кажется более удобным.
Хотелось бы чтобы Far работал так же и из меню плагинов.

Скрипт (нужны последние версии FarNet и PowerShellFar, 5.2.0), вызывается командой

Code: Select all

ps: .\Test_160909_053052-.ps1
Скрипт Test_160909_053052-.ps1:

Code: Select all

# эти две строки выводятся без пустой строки между ними:
Write-Host Line1
Write-Host Line2

# добавляем пункт в меню плагинов, если он еще не там
$id = '841203c8-4348-4e35-bfd7-c83db2603157'
if (!$Far.GetModuleAction($id)) {
	$null = $Psf.Manager.RegisterModuleTool(
		$id,
		(New-Object FarNet.ModuleToolAttribute -Property @{ Name = "Test_160909_053052"; Options = "Panels" }), {
			# а эти две строки выводятся с пустой строкой между ними:
			Write-Host Line3
			Write-Host Line4
		}
	)
}

# вызываем добавленный пункт меню
$Far.PostMacro("Keys('F11') Menu.Select('Test_160909_053052', 2) Keys('Enter')")

Вывод на консоль при вызове из ком-строки и меню плагинов

Posted: Fri 09 Sep, 2016 06:46
by NightRoman
После того, как скрипт запущен один раз, можно и вручную выбирать пункт меню Test_160909_053052. При этом будут печататься строки 3 и 4 с пустой строкой между.

Вот упрощенный скрипт, который показывает то же самое отличие (но тут механизм вызова через меню спрятан в Фарнет):

Code: Select all

Write-Host Line1
Write-Host Line2

$Far.PostStep({
	Write-Host Line3
	Write-Host Line4
})
Вывод на консоль выглядит так:

Code: Select all

Line1
Line2

Line3

Line4
Наличие пустой строки перед Line3 "нормально", плагин вызывается "заново", начинает что-то печатать, Фар приготовил экран для начала печати, перевел строку. Но перед Line4 пустая строка нежелательна.

Вывод на консоль при вызове из ком-строки и меню плагинов

Posted: Fri 09 Sep, 2016 10:29
by Shmuel
NightRoman wrote: При вызове из ком-строки между строками нет пустых строк.
При вызове из меню плагинов есть пустые строки.
У меня в обоих случаях нет пустых строк (Far 3.0.4784).

Вывод на консоль при вызове из ком-строки и меню плагинов

Posted: Fri 09 Sep, 2016 10:56
by NightRoman
Спасибо за макрос. Это другой сценарий. Проверять надо так:

https://bugs.farmanager.com/view.php?id=3297