FarNet — плагин для написания плагинов на .NET языках

Здесь можно обсудить ваш любимый плагин.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Latest post of the previous page:

AGu
Фарнет и его мои модули поспевают за Far3 оперативно. Все, что для Far2, давно законсервировано и не развивается.

Раз зашел разговор. В принципе, в недалеком будущем я может кое-что сломаю в Фарнет АПИ немного (выровнять как бы с потоком многих последних изменений в Фар3). Но не думаю, что это будут болезненные изменения. Что-то типа переименований и перетусовки методов, никаких революций.
Разумно ли сейчас начать адаптировать модули и скрипты или стоит пока повременить?
Думаю, вполне можно.
2useven10
Posts: 5192
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 309 times

Re: FarNet — плагин для написания плагинов на .NET языках

Post by 2useven10 »

AGu
зайдите на страницу загрузки - всё станет ясно
AGu
Posts: 111
Joined: Wed 16 Mar, 2005 13:17
Location: Novosibirsk
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by AGu »

NightRoman wrote:Фарнет и его мои модули поспевают за Far3 оперативно.
Спасибо.
2useven10 wrote:зайдите на страницу загрузки - всё станет ясно
:-) Да, намеки вполне прозрачные.

Ну что ж, славно, бум переползать...

Кстати, тут, я погляжу, наблюдается мощное наступление Lua... Вот уже и макросы на нем пишутся... Поизучал. Пока непривычно, но уже симпатично. Я, собсно, что хотел-то... это, того... Простенькие телодвижения можно реализовывать как посредством PSF, так и через LuaMacro/FML. Я, конечно, понимаю, PSF -- детище родное, крутое и все такое, но... Если, скажем, помимо инсталляции, навороченной кучей FarNet-PSF-прибамбасов, я хочу забабахать еще и lightweight-инсталляцию, которой в принципе хватит мощности FML, имеет ли смысл попытаться перевести простенькие PSF-скрипты на Lua? Точнее, вопрос такой: не будут ли FarNet+PSF неадекватно тормозить загрузку и т.п., будучи использованными в качестве пушки для стрельбы по воробьям?

P.S. Я понимаю, что вопрос дурацкий, и четко ответить на него, скорее всего, нельзя. Поэтому к отсутствию ответа я отнесусь совершенно спокойно.
Спасибо за внимание. :-)
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Вопрос не дурацкий, но ответить на него однозначно сложно. Я очень приветствую "наступление Lua". Очевидно, что на нем многие вещи будет проще реализовать, чем на PowerShell, и работать они будут быстрее. Кроме того, Lua идет прямо из коробки с Фаром. При создании новых скриптов буду учитывать это и взвешивать, какой инструмент лучше подходит. Но ничего не переписываю из PSF скриптов. Смысла нет, PSF продолжаю использовать. PSF надо устанавливать, конечно, но хотя бы сам PowerShell идет из коробки с Windows теперь. Учить и пользовать PowerShell выгодно и удобно, наработки часто полезны и вне Фара. Ну в общем это обычная тема "какой язык лучше". Все хороши, но иногда некоторые лучше для определенных задач.
LWhisper
Posts: 7
Joined: Sat 03 Aug, 2013 18:11

Re: FarNet — плагин для написания плагинов на .NET языках

Post by LWhisper »

Подскажите, пожалуйста - как, используя FarNet, можно отловить событие копирования\перемещения файла?
Всё что мне нужно: узнать, что копирование началось, каких файлов и куда. Это возможно?
В хэлпе я нашёл CopyFilesEventArgs. Гугл вывел на исходники FarNet, где его ловит кастомная Panel.UI. Но как обноружить запущенный пользователем диалог копирования, я так и не нашёл. =\
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

LWhisper, вопрос прояснился в другой ветке, правильно понимаю?
LWhisper
Posts: 7
Joined: Sat 03 Aug, 2013 18:11

Re: FarNet — плагин для написания плагинов на .NET языках

Post by LWhisper »

И да и нет. Я нарисовал свой менеджер, задачу решил. Но поскольку плагины писать, возможно, ещё придётся, то хотелось бы разобраться и в FarNet. Как я понял - он заменяет интерфейс и реализует собственные версии диалогов. В связи с чем вопрос - для решения данной задачи есть какие-нибудь стандартные средства, или нужно переписать и перекомпилировать под себя FatNet?
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

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

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Если имеются в виду события, привязанные к любому диалогу, а не созданному "самим", например, запуску любого диалога, то они в Фарнет не реализованы, просто потому что до сих пор нужны не были. Уже нужны стали? Могу добавить, как время будет. Но если все еще не нужны, а бы лучше пока не добавлял.
LWhisper
Posts: 7
Joined: Sat 03 Aug, 2013 18:11

Re: FarNet — плагин для написания плагинов на .NET языках

Post by LWhisper »

Хм. Я имею ввиду диалог копирования файлов (F5/F6). Собственно мне нужно узнать, что файлы: C:\tmp\1.txt, C:\tmp\2.txt, C:\tmp\3.txt едут в папку D:\new\ под старыми именами с перезаписью существующих в режиме перемещения. (Как вариант). Тоесть что-нибудь вроде:

Code: Select all

Far.Dialogs.Copy.ItemsCopy += OnItemsTransfer;
Far.Dialogs.Move.ItemsMove += OnItemsTransfer;

void OnItemsTransfer(object sender, CopyFileEventArgs e)
{
  Debug.WriteLine("{0} -> {1} [IsMove: {2}, IsOverrideAll {3}]", String.Join(", ", e.FilePaths), e.TargetPath, e.IsMove, e.IsOverrideAll);
}
К примеру, конечно. Я ещё абсолютно незнаком со архитектурой FarNet и взаимодействием с его компонентами.

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

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Такое, как в примере, в Фарнет не появится. С одной стороны, слишком специфическая задача, а с другой - такого и в Фаре нет. В Фаре есть довольно общие диалоговые события, которые плагин может обрабатывать, а именно, сам должен проверить, что это за диалог по его гуиду и там уже решать, что делать дальше и как выковыривать данные из диалога. На что можно расчитывать со временем, это то, что в Фарнет будут добавлены аналогичные события и доступ к диалогу и его контролам. То есть просто АПИ, аналогичный тому, что в Фаре.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Добавлю, что все это уже сделано для диалогов, которые сам модуль создает, там можно подписаться на все события, что есть в диалогах Фара. А вот для чужих диалогов (Фара, плагинов или других модулей) пока такого нет, ибо просто никому не было нужно. Я и сейчас не до конца уверен, что это нужно, но для полноты картины могу и добавить, если действительно кто-то будет использовать.
LWhisper
Posts: 7
Joined: Sat 03 Aug, 2013 18:11

Re: FarNet — плагин для написания плагинов на .NET языках

Post by LWhisper »

Ну, насчёт выковыривания по гуидам - это естественно. С другой стороны, если будет какая-то сущность, инкапсулирующая в себе события и свойства какого-либо диалога, то вполне логично было бы закинуть набор таких сущностей в синглтон с отложенной инициализацией, для дефолтных диалогов (как в .NET делают классы Encoding, Color).

А что касается задачи - если есть какая-то часть Far'а, которая может кому-то быть интересна - то почему бы и нет? :) Вот, мне понадобилось. Возможно, понадобится и ещё кому-нибудь. :)

Правда, как я понимаю, задачу можно решить и с текущим набором функционала - написав собственный диалог и заменив им стандартный.
Но тут опять же нехватает знаний. Ведь для этого нужно: написать диалог, заменить им вызов старого, отловить текущую панель, отловить список выделенных файлов. Последнее, вроде бы, можно найти в Demo-примере для просмотра файла ресурсов. Как делать остальное - не представляю. Очень не хватает мануала или какого-нибудь обзора базовых компонентов. Хелп, как я понял, состоит только из автоматически сгенерированных описаний сборки. А вот как её использовать - приходится разбираться на примерах, которых мало. =\
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Как перехватить и заменить стандартный диалог копирования, я, честно говоря, не знаю. Ни в Фарнет, ни в Фаре. Но, может, я не совсем понимаю, о чем идет речь. Если это возможно, хотелось бы подробнее.

Что касается изучения Фарнет по хелпу, примерам простым (типа Demo), и примерам сложным (имеющимся модулям, а также и скриптам PowerShellFar), то это вполне возможно, было бы желание. Почти все из Фарнет где-нибудь да задействовано, так как в основном фичи добавлялись по мере востребованности. Хелп содержит необходимый минимум того, как и что делать, а не только сухое описание параметров из комментариев кода. Не всегда очевидно, где это там находится? - да, может быть. Мануал отдельный от хелпа писать не планируется. Конкретные вопросы можно задавать здесь, если в хелпе или модулях чего-то не хватает. Нередко как раз после таких вопросов я и добавляю в хелп дополнительные пояснения.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

LWhisper wrote:А что касается задачи - если есть какая-то часть Far'а, которая может кому-то быть интересна - то почему бы и нет? :) Вот, мне понадобилось. Возможно, понадобится и ещё кому-нибудь. :)
С этим понятно. Я подумаю о добавлении этих событий. Но вот только не совсем понимаю, как они помогут в твоем случае. Момент запуска диалога отследить получится, модуль поймет по гуиду, что запущен диалог копирования/перемещения, это хорошо. А вот, что дальше с этим модуль будет делать, непонятно пока.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Re: FarNet — плагин для написания плагинов на .NET языках

Post by NightRoman »

Посмотрел, что понадобится, чтобы добавить эти события. Работы много, даже если делать, тупо в лоб продублировав Фар АПИ, а не в .NET стиле, как это сделано в полном объеме для диалогов, создаваемых модулями Фарнет. Так что не буду торопиться с этой задачей, она слишком узко специализированная, нужна только для перехватов чужих диалогов. Для таких задач можно и обычный нативный плагин написать или воспользоваться Луа макросами. Причем, в них можно реализовать именно перехват события в чужом диалоге и сделать первичные проверки на гуиды и т.п., а потом уже перевызвать модуль Фарнета и реально обработку сделать там, написав на .NET и с использованием инструментов Фарнет для диалогов (в отличие от событий, они есть для любых Фар диалогов, а не только созданных в Фарнет).

Наверное, в идеале в самом Фарнет события для чужих диалогов не помешали бы, раз в Фар они есть. Но сложность (скорей, объем) реализации не оправдывает пока юз-кейсы, по-моему. Тем более, способы решения есть другие, перевызов через макрос Луа, например. Такого рода перевызовы, кстати, сплошь и рядом используются, особенно в модуле PowerShellFar для вызова PowerShell скриптов через Луа. Так что это нормальная рабочая практика.
Post Reply

Return to “Обсуждение плагинов”