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

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

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

Post by NightRoman »

Плагин вызывается по префиксу из юзер меню. По задумке он должен получить текущее содержимое ком. строки и что-то сделать в связи с этим. А именно хотелось сделать команду "Git help", которая для командной строки вида git <commmand> ... вытащит из нее <commmand> и запустит нужную HTML страницу из помощи Git. Комстрока при этом остается, после просмотра помощи можно продолжить ее с новыми знаниями.

Однако, командная строка оказывает как бы пуста в таком сценарии. Пример на PowerShellFar:

1. если что-то набрать в ком. строке и вызвать F11\PowerShellFar\Invoke commands набрать там

Code: Select all

Show-FarMessage ($Far.CommandLine | Format-List | Out-String) -LeftAligned
то будут показаны адекватные текущие данные из ком. строки с текущим текстом

2. если что-то набрать в ком. строке и вызвать аналогичную команду из юзер меню по префиксу

Code: Select all

ps: Show-FarMessage ($Far.CommandLine | Format-List | Out-String) -LeftAligned
то данные ком. строки будут с пустым текстом

Вопрос: Как получить содержимое ком. строки плагином, вызванным по префиксу из юзер меню?

Пояснение, почему хочется именно из юзер меню. Там уже есть специальное подменю, где собраны полезные команды для работы с Git в одном месте. Было бы логично и эту команду туда поместить, а не куда-то еще.
fps
Posts: 267
Joined: Wed 20 Apr, 2005 06:39
Has thanked: 27 times
Been thanked: 14 times

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

Post by fps »

У меня в юзер меню команда lua:far.Message(CmdLine.Value) показывает содержимое ком.строки корректно.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Спасибо. Значит, это проблема специфична для PowerShellFar. Возможно, из неосновного потока нельзя вызывать АПИ для ком. строки. А PowerShell все делает в неосновном потоке, по дизайну (изменить нельзя).

Хотелось бы мнение разработчиков услышать, так ли это, дело в потоках? Не работает только в этом сценарии. В других - все ОК.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

это что шутка такая, первоапрельская?

ps: официально из неосновного потока можно вызывать только ACTL_GETWINDOWTYPE и ACTL_SYNCHRO. за исключением, когда основной поток специально блокирован для этого.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

> это что шутка такая, первоапрельская?
Извините, не понимаю, как это связано, и почему шутка.

> ps: официально из неосновного потока можно вызывать только ACTL_GETWINDOWTYPE и ACTL_SYNCHRO. за исключением, когда основной поток специально блокирован для этого.
Я знаю эту позицию фартима. Но она не совсем понятная. Речь не про параллельный поток (с таким ограничением не было бы вопросов). Он не параллельный, хотя и не основной. То есть thread safety не нарушается, основной поток ничего в это время не делает, с Фаром работает только один поток.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

NightRoman wrote:> это что шутка такая, первоапрельская?
Извините, не понимаю, как это связано, и почему шутка.
вы что хотите получить? то что реально набрано в реально комстроке или ps: Show-FarMessage ($Far.CommandLine | Format-List | Out-String) -LeftAligned?
NightRoman wrote:> ps: официально из неосновного потока можно вызывать только ACTL_GETWINDOWTYPE и ACTL_SYNCHRO. за исключением, когда основной поток специально блокирован для этого.
Я знаю эту позицию фартима. Но она не совсем понятная. Речь не про параллельный поток (с таким ограничением не было бы вопросов). Он не параллельный, хотя и не основной. То есть thread safety не нарушается, основной поток ничего в это время не делает, с Фаром работает только один поток.
зачем вы повторяете за мной, при этом не соглашаясь?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

> вы что хотите получить? то что реально набрано в реально комстроке или ps: Show-FarMessage ($Far.CommandLine | Format-List | Out-String) -LeftAligned?
То, что набрано в ком. строке, как в UI control, а не то, что записано в команде юзер меню.

> зачем вы повторяете за мной, при этом не соглашаясь?
Иногда трудно понять, что именно вы имели ввиду. Если вызвал раздражение, прошу извинить.

Если я правильно понял, что имеется в виду, то PowerShellFar вроде ничего не нарушает. В чем может быть причина? Может, где-то баг?
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

NightRoman wrote:То, что набрано в ком. строке, как в UI control, а не то, что записано в команде юзер меню.
у меня lua:far.Message(CmdLine.Value) тоже прекрасно работает.
NightRoman wrote:Если я правильно понял, что имеется в виду, то PowerShellFar вроде ничего не нарушает. В чем может быть причина? Может, где-то баг?
возможно.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

NightRoman wrote: > ps: официально из неосновного потока можно вызывать только ACTL_GETWINDOWTYPE и ACTL_SYNCHRO. за исключением, когда основной поток специально блокирован для этого.
Я знаю эту позицию фартима. Но она не совсем понятная. Речь не про параллельный поток (с таким ограничением не было бы вопросов). Он не параллельный, хотя и не основной. То есть thread safety не нарушается, основной поток ничего в это время не делает, с Фаром работает только один поток.
Такой подход тоже рано или поздно доведёт до цугундера.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Это немецкий? Я не силен. Поясните, пожалуйста.
User avatar
HaRT
Moderator
Posts: 10806
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 220 times
Been thanked: 357 times

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

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

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

Post by NightRoman »

Спасибо. Но по теме понятнее не становится. Описанный сценарий должен бы работать, но не работает. Нужен какой-то рефакторинг.
Shmuel
Posts: 6815
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 526 times

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

Post by Shmuel »

Как это ни странно, LuaMacro работает в данном сценарии, но другие мои плагины ведут себя так, как описывает NightRoman.
lua: far.Message(panel.GetCmdLine()) - работает
lfe: -efar.Message(panel.GetCmdLine()) - не работает
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

Можно заметить, что содержимое командной строки на долю секунды действительно пропадает.

Причём для lua: это происходит до показа сообщения, а для lfe: после его закрытия.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

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

Post by John Doe »

А пробую то же самое в своём плагине , и на фоне сообщения видно полностью пустую командную строку.
После закрытия сообщения командная строка восстанавливается.

Воспроизводится одинаково независимо от того, откуда запущена команда: из командной строки, или из меню пользователя, или из Apply command.
Post Reply

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