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

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

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

Post by NightRoman » Fri 09 Sep, 2016 06:35

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')")
Last edited by NightRoman on Fri 09 Sep, 2016 11:24, edited 2 times in total.

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 09 Sep, 2016 06:46

После того, как скрипт запущен один раз, можно и вручную выбирать пункт меню 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 пустая строка нежелательна.
Last edited by NightRoman on Fri 09 Sep, 2016 06:54, edited 1 time in total.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Fri 09 Sep, 2016 10:29

NightRoman wrote: При вызове из ком-строки между строками нет пустых строк.
При вызове из меню плагинов есть пустые строки.
У меня в обоих случаях нет пустых строк (Far 3.0.4784).

User avatar
NightRoman
Posts: 5872
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 8 times
Been thanked: 9 times
Contact:

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

Post by NightRoman » Fri 09 Sep, 2016 10:56

Спасибо за макрос. Это другой сценарий. Проверять надо так:

Post Reply

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