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

Здесь можно обсудить ваш любимый плагин.
Post Reply
mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 05:57

Latest post of the previous page:

Идея была в следующем:
1. Есть модель файловой системы (IFile + IFolder)
2. Есть объект, отображающий файловую систему (IPanel)

- в фаре они слеплены воедино. Таким образом ими нельзя воспользоваться отдельно (например, я не могу воспользоваться ProxyFTP из своего плагина чтобы скачать какое-нибудь поддерево FTP сервера)

Для дотнет плагинов это хотелось бы сделать более правильным. (Чтоб ProxyFTP.NET предоставлял файловую систему, которая могла бы быть использована отдельно от плагина)

К тому же, утверждения типа "в папке есть файлы" лучше отображаются на объектную модель вещами типа "у объекта "папка" есть свойство "Список файлов"".

Панельные плагины планировалось реализовать так:
плагин присваивает свойство текущей панели Folder, после возврата из плагина фар насинает ходить по файловой системе.

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 05:58

Что мне еще не нравится в исторической реализации: самая частая операция с панелью (у меня) это получение текущего элемента (чаще всего в ком строках явно или в юзер меню командах). Нелепо, что эта операция всегда обязана конвертнуть в дот нет содержимое *всей* панели только потому, что элемент имеет св-во Parent и оно должно быть либо валидно (то есть содержать все элементы),
Есть какие-нибудь препятствие к тому, чтобы реализовать это лениво? То есть чтобы Parent инициалихировался при первом к нему обращении?

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 30 Mar, 2007 07:33

Такой подход IFolder+IFile (назовем его провайдером "файловой системы") мне очень близок, и то, что так было задумано, вызывает только уважение. Но это задумывалось "вчера". "Сегодня" есть и другие соображения, причем именно с прицелом на провайдеров.

*) Для простых панельных плагинов (типа тупого списка, где и древовидной структуры то нет) подход с имплементацией провайдера только усложняет дело. Таких микро-плагинов-чисто-списков планирую для себя не один. И будут они элементарно из нескольких строчек на PowerShell, не преувеличиваю.

*) Не скрываю, что при имплементации Far.NET для меня приоритет номер 1 - это применимость к PowerShell (кстати, статистика скачиваний Far.NET и PowerShellFar и говорит, что они вместе и используются в основном). Собственно "плагинирование" Фар для себя я только на PowerShell и планирую. А вот тут и загвоздка с IFolder+IFile имплементацией - в этой версии PowerShell эту модель легко не реализовать. Нельзя создать класс и имплементировать нужные интерфейсы. В следующих версиях вроде планируют, но когда они еще будут? Да и сомнения у меня - если задачка пахнет созданием классов я лучше ее на нормальном языке буду решать, чем на скриптовом. А вот событийная модель имплементации панели (какой она и является по сути в Фар) - в PowerShell реализуется без проблем уже сейчас.

*) Я уже упомянул, что мой прицел тоже на провайдеров данных - только провайдеров PowerShell - пусть дяди их пишут (может и я буду этим дядей тоже), а мы просто это будем использовать. Причем, именно, как и хотелось - такие провайдеры даже вообще не для Фара, просто в Фаре они будут автоматически доступны. Нехитрый демо скрипт у меня уже позволяет ходить в Фаре по:

1) самой файловой системе (провайдер FileSystem), хотя это масло масляное, конечно, но по сетке, например, уже без дополнительного плагина ходим;
2) реестру Windows - опять не нужны плагины на эту тему (провайдер Registry)
3) переменным окружения Windows (провайдер Environment)
4) переменным самой PowerShell (провайдер Variable)
5) функциям PowerShell (провайдер Function)
6) алиасам PowerShell (провайдер Alias)

Это все дяди написали, спасибо им. И еще напишут. И все это будет автоматически работать у нас или с некоторыми косметическими доработками (когда, например, специфика провайдера не совсем 1-1 как файловая система и у него есть что-то, что явно надо использовать, а не автоматом).

И еще плюс подхода без IFolder+IFile - он уже работает :), но версия будет не завтра (хотя скоро), панельки для меня дело новое, так что еще буду разбираться и затачивать все по уму.

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 07:45

нельзя ли сделать класс на C# - переходник между IFoldr+IFile и моделью PSh?

Есть кстати, интересный механизм adaptation для подключения сторонних переходников
http://www.python.org/dev/peps/pep-0246/

Вобщем, я бы сделал чтобы FAR.NET был сосредоточен на меппинге FARAPI в обзектную модель. а PSFAR уже предоставлял удобства для PowerSHell

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 30 Mar, 2007 07:57

mugz wrote:нельзя ли сделать класс на C# - переходник между IFoldr+IFile и моделью PSh?
Можно, но ведь надо СДЕЛАТЬ, а я стараюсь заюзать то, что уже сделано.
Вобщем, я бы сделал чтобы FAR.NET был сосредоточен на меппинге FARAPI в обзектную модель. а PSFAR уже предоставлял удобства для PowerSHell
Ну вообще так оно и будет, просто та *объектная* модель, которая планируется *для начала* будет не IFoldr+IFile, что, кстати, на руку для простых плагинов.

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 08:01

ок.

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 30 Mar, 2007 08:16

И еще чисто интуиция говорит мне, что сначала надо пойти по пути "событийной реализации". Логика работы Фар под это годами заточена, и значит, такой вход будет вероятно более гладким.

У событийной модели заодно автоматически будет и такая перспективная фича: возможность подписаться на события "чужих" Far.NET панелей, которые, кстати, даже могут разрабатываться с учетом такой возможности.

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 08:20

Я просто предлагаю разделить панель и файловую систему

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 30 Mar, 2007 08:20

в-общем, релизь код - обсудит народ

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Hello, IronPython

Post by mugz » Fri 13 Apr, 2007 08:40

Code: Select all

def hello(sender, e):
	far.Msg("Hello, IronPython");

far.RegisterPluginsMenuItem("Hello, IronPython", hello);
Attachments
ipy.7z
(789 Bytes) Downloaded 223 times

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 13 Apr, 2007 10:56

mugz
А что для этого нужно (кроме IronPython, конечно)? Сам я не его не пользую, но для кругозора по Far.NET интересно (и пока не понятно).

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 13 Apr, 2007 11:00

Не понял. Что значит кроме IronPython. Это просто плагин, который запускает скрипты на IronPython'е

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 13 Apr, 2007 11:22

Кроме домашней страницы про железного питона можно почитать еще здесь

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 13 Apr, 2007 12:17

так в аттачменте вроде ничего кроме скрипта я не нашел.

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 13 Apr, 2007 12:24

А в папке bin? приложил zip на всякий случай
Attachments
ipy.zip
(1.08 KiB) Downloaded 202 times

User avatar
NightRoman
Posts: 5911
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 10 times
Been thanked: 14 times
Contact:

Post by NightRoman » Fri 13 Apr, 2007 12:45

Ага, теперь нашел (может, с утра спросонья дома проглядел, а на работе 7z нет у меня). Приложить это все к примерам в сборку Far.NET?

mugz
Posts: 175
Joined: Thu 02 Jun, 2005 13:36
Contact:

Post by mugz » Fri 13 Apr, 2007 12:49

потом, я щас допиливаю

Post Reply

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