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

Здесь можно обсудить ваш любимый плагин.
MaximKat
Posts: 18
Joined: Tue 22 Nov, 2011 06:10

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

Post by MaximKat »

Latest post of the previous page:

NightRoman wrote:
В диалоге копирования пишет сразу полный путь, куда копировать.
Ну какой, конкретно? Ты со стандартной панелью не путаешь, случайно?
Активная панель - стандартная, пассивная - Network. Нажимаем F5, открывается диалог копирования, в нем сразу введен полный путь назначения: \\MAKC-PC\Users\ например.
User avatar
zg
zero-gravity
Posts: 6015
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

MaximKat wrote:Активная панель - стандартная, пассивная - Network. Нажимаем F5, открывается диалог копирования, в нем сразу введен полный путь назначения: \\MAKC-PC\Users\ например.
это уже не панель нетворк плагина, а стандартная файловая.
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 »

zg
Вот и я подозревал. Почему-то это многих сбивает с толку, типа начали с Network и ходим же по сетке, а деле-то Network панель только вначале работала.

MaximKat
Но в любом случае посмотрю еще раз на предмет чего я там мог недоделать.
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 »

По поводу цифирок вместо имен при копировании. Доработаю. Давно напрашивалось, но как бы никому не надо было. Вот теперь надо - сделаю, но может не так, как предлагается.

Почему так было? В общем случае операция копирования с плаг-панели на файловую - некорректная, так как:
1) имена файлов плагина могут совпадать (редко, но не настолько, чтобы забить на это)
2) могут содержать символы, непригодные для имен файлов файловой системы

Потому и не было внятного решения. А какое может быть внятное вообще, в принципе? Думаю реализовать так - если имена нормальные, то копируем, как есть. Если имена ненормальные, то для дубликатов генерим суффиксы(префиксы?), а для плохих имен заменяем плохие символы на коды типа {0x1234} (то есть коверкаем так, что все-таки можно расковеркать при желании и в большинстве случаев).

Но это пока план. Если есть другие идеи по проблеме, велкам. (Проблема и нативных плагинов касается, в принципе).
MaximKat
Posts: 18
Joined: Tue 22 Nov, 2011 06:10

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

Post by MaximKat »

NightRoman wrote: Потому и не было внятного решения. А какое может быть внятное вообще, в принципе? Думаю реализовать так - если имена нормальные, то копируем, как есть. Если имена ненормальные, то для дубликатов генерим суффиксы(префиксы?), а для плохих имен заменяем плохие символы на коды типа {0x1234} (то есть коверкаем так, что все-таки можно расковеркать при желании и в большинстве случаев).
Для моих целей, в принципе, так подойдет. Но теоретически, мне больше нравятся идеи из комментария в AsGetFiles: либо спрашивать модуль о "красивых" именах всегда, либо ввести флаг "эти имена подходят для файловой системы", а если окажется что это неправда, то это уже проблема модуля. Переименовывать файлы без спросу, причем по каким-то своим внутренним правилам - не очень хорошая идея, мне кажется.
Но в любом случае посмотрю еще раз на предмет чего я там мог недоделать.
Я вчера потратил час на изучение исходников Фара, похоже тебе делать ничего не надо. Плагины могут только до двоеточия менять текст, для этого есть у панели (кажется) свойство Format. У тебя оно уже реализовано, как оказалось.
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 »

MaximKat wrote:Я вчера потратил час на изучение исходников Фара, похоже тебе делать ничего не надо. Плагины могут только до двоеточия менять текст, для этого есть у панели (кажется) свойство Format. У тебя оно уже реализовано, как оказалось.
lol, а я-то все думал - зачем это свойство Format нужно?

Про имена, наверное, ты прав. Чем больше думаю, тем AI по переименованию меньше нравится. Наверное, стоит начать с флага. А метод добавим, когда этого будет недостаточно.
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 »

По большому счету и спец. метод не нужен будет. Точнее, нужен, но он уже суть реализован, раз имена плохие, то тогда и надо имплементировать ExportFiles на свой лад.

А с флагом (SystemNames, такое имя флага внятное?) и F5 можно не перехватывать. Если есть GetContent и стоит SystemNames, то этого достаточно для копирования обычным способом даже если нет ExportFiles. (Кроме того, у флага есть и другие плюсы для внутренней кухни). В общем, вроде вырисовывается. Скоро сделаю, но вряд ли "прям завтра".
MaximKat
Posts: 18
Joined: Tue 22 Nov, 2011 06:10

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

Post by MaximKat »

NightRoman wrote:А с флагом (SystemNames, такое имя флага внятное?) и F5 можно не перехватывать. Если есть GetContent и стоит SystemNames, то этого достаточно для копирования обычным способом даже если нет ExportFiles.
Ну да. Я потому и поднял эту тему. Подозреваю что и ImportFiles через CreateFile/SetText/SetContent можно сделать.

Можешь немного уточнить насчет "не завтра"? Чтоб я знал, мне пока пользоваться тем что есть или проще подождать новой версии. Неделя, месяц, год?
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 »

CreateFile в общем случае нестандартая операция и требует интеракции.
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 »

Мне и решение с SystemNames не вполне нравится после дополнительного обдумывания. Плохих имен больше, чем кажется тому, кто будет этот SystemNames ставить у себя:

- IO.Path.GetInvalidFileNameChars() (это понятно, но не все о всех 41 символах помнят)
- Точки и пробелы в конце (Фар, может, справится, но это засада все равно: .NET, наверное, нет)
- CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9 (про эти подлянки вообще вряд ли кто помнит)

В итоге склоняюсь к такому решению. Флага не надо. Если проводник панели не имеет ExportFiles, но имеет GetContent, и при этом противоположная панель - не панель FarNet (а иначе именно она отвечает за прием файлов, а не исходная за отправку), то F5 и F6 не перехватываются, а отдаются в обработку по умолчанию (AsGetFiles). В AsGetFiles хорошие имена пропускаются, как есть. Плохие имена предлагается заменить *интерактивно* в строке ввода, если интеракция разрешена, иначе просто игнорируются (жаль, но а что еще иначе делать?). Проблему повторяющихся имен вообще игнорируем, это на пользователе.

А внутреннюю генерацию алиасов (тех цифр, с которых началась тема) оставлю, хотя бы чтобы CtrlQ работал всегда (сначала думалось, что SystemNames может избавить от этого). Более того, я не генерил алиасы в случае ExploreLocation (проводник работает только с путями), а теперь решил генерить и в этом случае, чтобы CtrlQ работал при любых именах, даже по ошибке допущенных проблемных.
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 »

Дорабатываю move (F6) и еще кой-какие мелочи.

Про move (F6) возник такой вопрос. Все под контролем, если таргет - файловая система, если что-то не сработало (и это спрограммировано правильно), то оно и не будет удалено. А вот что если это плагиновая панель нативного плагина? (типа arclite, но это просто пример, далее не зацикливаемся на нем) Делаем перенос, а таргет плагин не может обработать некоторые из переносимых файлов. Фарнет об этом узнать, кажется, ничего не может (или я не знаю, как это сделать), поэтому он послушно удаляет все, что *с его точки зрения* было успешно обработано. Получается, что пользователь потерял некоторые свои данные (удалены в исходной панели, но не получены в таргет).

Как быть?
1. Не позволять делать перенос на нативную плагиновую панель (вообще запретить Ф6 или пусть работает как Ф5?). Пользователь может Ф5, а потом уже удалить ручками, если видит, что все ОК.
2. Забить на этот нюанс и работать наудачу. Считаем, что пользователь жмет Ф6 если доверяет принимающему плагину, делает бекапы и т.п.
3. Что-то продвинутое. Но как узнать что такие-то и такие-то файлы не были приняты таргет панелью, чтобы их не удалять?

Соображения?
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 »

Раз соображений нет, иду по пути 2, наименьшего ограничения свободы. Будут проблемы (они возможны и описаны), будем смотреть дальше. Вообще, это все экзотика - *перенос* данных из Фарнет панели в панель нативного плагина. Возможно, никто и не будет никогда этим пользоваться. Копирование/перенос на диск - это да, надо, но с этим все должно быть ОК (или если баги, то будет ОК после исправлений).
MaximKat
Posts: 18
Joined: Tue 22 Nov, 2011 06:10

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

Post by MaximKat »

А с чего вообще началось разделение на GetContent и ExportFiles?
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 »

MaximKat wrote:А с чего вообще началось разделение на GetContent и ExportFiles?
GetContent слишком примитивный подход, по-одиночный (и рекурсивно тоже ничего не будет работать, для папок не предназначен). ExportFiles задуман как пакетный, ориентированный на сложные операции с учетом специфики модуля (модуль и учитывает).
MaximKat
Posts: 18
Joined: Tue 22 Nov, 2011 06:10

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

Post by MaximKat »

Разве стандартный подход Фара не к ExportFiles ближе?
Post Reply

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