Давно хотел выразиться по следующим вопросам :
Текущий интерфейс плагинов для Far позволяет им вести себя как броузеры FS, вместо того, чтобы дать им возможность представлять FS непосредственно, с произвольным доступом.
Нет единого формата для путей. CurDir в структуре OpenPluginInfo служит скорее для красоты командной строки, чем для какого-то полезного применения. Ну разве что в Folder Shortcuts его занести. Все равно строки путей крутятся внутри каждого плагина по отдельности. Нужно составить соглашение об именовании.
Моё дело только предложить, я надеюсь, что общими усилиями можно довести это до ума :
Обычные диски и SMB ресурсы пишутся как обычно :
C:\Program Files\
\\SERVER\SHARE\Path\
Также они могут быть записаны в виде URL :
file:/C:/Program Files/
file://SERVER/SHARE/Path/
Это используемые в Windows правила именования.
У FTP и WebDAV ресурсов путь совпадает с URL.
-----------------------------------------------------------
Теперь ближе к Far'у :
Как известно, Windows диски именуются только одной буквой.
Значит, можно использовать многобуквенные комбинации для
обращения к глобальным плагинам :
reg:\HKLM\SOFTWARE\
Далее, альтернативные потоки NTFS именуются как file:stream:streamtype, при этом значения streamtype ограничены файловой системой, т. е. не произвольны. Так что к внутрифайловым плагинам можно обращаться так :
C:\Work\Arch.zip::Zip\Folder\File.txt
А если вдруг у Arch.zip есть альтернативный поток Backup, то к нему
можно обратиться через
C:\Work\Arch.zip:Backup:Zip\Folder\File.txt
В итоге получаем :
Есть два формата файловых путей - Windows-style и URL-style, и они не смешиваются.
Остаётся только дополнить картину недостающими фрагментами :
Следующие примеры путей также должны быть правильными, хотя точное написание ещё подлежит уточнению :
reg:/HKLM/SOFTWARE/
reg://computer/HKLM/SOFTWARE/
file:\C:\Program Files\
file:\\SERVER\SHARE\Path\
ftp:\\SERVER\Path\
reg:\\SERVER\HKLM\Path\
Также стоит поменять способ доступа к содержимому виртуальных FS.
Чтобы, например, можно было зайти на медленный FTP с поддержкой докачки, зайти в архив и не ждать, пока он перекачается полностью.
FTP позволяет произвольный доступ к файлу, этого достаточно, чтобы найти начало списка файлов, скачать его, а дальше скачивать только образы нужных файлов, чтобы распаковать.
Апгрейд Plugin API
- Centaur
- Posts: 1083
- Joined: Tue 05 Apr, 2005 20:09
- Location: Novosibirsk, Russia
- Been thanked: 2 times
А что, могла бы получиться довольно красивая система.
Для этого нужно:
1. Дать плагинам возможность предоставлять произвольный доступ к файлам.
1a. Непосредственно: экспортируемые функции OpenPluginFile/ClosePluginFile, SeekPluginFile, ReadPluginFile/WritePluginFile. (Считаем, что API для перечисления файлов в подкаталоге у нас уже есть.)
1b. Через семантику символической связи: плагин говорит, что «вот этот файл foo.txt — на самом деле является объектом ftp://somewhere/else/foo.zip::zip/dir/foo.txt».
2. Дать плагинам средства для работы с произвольными объектами FAR namespace — сервисные функции типа OpenFile/CloseFile, SeekFile, ReadFile/WriteFile, FindFirstFile/FindNextFile/FindClose, которые бы перенаправлялись в зависимости от имени файла в соответствующие плагины.
3. Написать кучу плагинов поддержки, чтобы всё это работало. Или для начала обернуть текущее API (GetFiles/PutFiles), чтобы поддержать произвольный доступ через распаковку/скачивание во временный каталог.
Однако, «меня терзают смутные сомнения»…
Для этого нужно:
1. Дать плагинам возможность предоставлять произвольный доступ к файлам.
1a. Непосредственно: экспортируемые функции OpenPluginFile/ClosePluginFile, SeekPluginFile, ReadPluginFile/WritePluginFile. (Считаем, что API для перечисления файлов в подкаталоге у нас уже есть.)
1b. Через семантику символической связи: плагин говорит, что «вот этот файл foo.txt — на самом деле является объектом ftp://somewhere/else/foo.zip::zip/dir/foo.txt».
2. Дать плагинам средства для работы с произвольными объектами FAR namespace — сервисные функции типа OpenFile/CloseFile, SeekFile, ReadFile/WriteFile, FindFirstFile/FindNextFile/FindClose, которые бы перенаправлялись в зависимости от имени файла в соответствующие плагины.
3. Написать кучу плагинов поддержки, чтобы всё это работало. Или для начала обернуть текущее API (GetFiles/PutFiles), чтобы поддержать произвольный доступ через распаковку/скачивание во временный каталог.
Однако, «меня терзают смутные сомнения»…
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
t-rex
Архивы архивами, но история папок нормально работает в единичных панельных плагинах (FarReg входит в их число, а вот MultiArc и FTP — уже нет), а история просмотра/редактирования работает только для панельных плагинов, отображающих реальные файлы. Предлагаемая унификация как раз и открыла бы дорогу для решения этих проблем взаимодействия с плагинами.
Разумеется, я понимаю, что во многих случаях решить проблемы такого рода можно и без изменений в API. Разумеется, я понимаю, что предлагаемые изменения весьма трудоёмки. Однако, на мой взгляд, их следует расценивать как перспективное направления развития Фара.
А что касается нормального интернета, так ведь и размеры выкладываемых архивов тоже уже не те, что десять лет назад. У меня на работе интернет что надо, однако качать десятки мегабайт, чтобы потом вытащить 1-2 небольших файла, всё-таки не хочется.
Архивы архивами, но история папок нормально работает в единичных панельных плагинах (FarReg входит в их число, а вот MultiArc и FTP — уже нет), а история просмотра/редактирования работает только для панельных плагинов, отображающих реальные файлы. Предлагаемая унификация как раз и открыла бы дорогу для решения этих проблем взаимодействия с плагинами.
Разумеется, я понимаю, что во многих случаях решить проблемы такого рода можно и без изменений в API. Разумеется, я понимаю, что предлагаемые изменения весьма трудоёмки. Однако, на мой взгляд, их следует расценивать как перспективное направления развития Фара.
А что касается нормального интернета, так ведь и размеры выкладываемых архивов тоже уже не те, что десять лет назад. У меня на работе интернет что надо, однако качать десятки мегабайт, чтобы потом вытащить 1-2 небольших файла, всё-таки не хочется.
- HaRT
- Moderator
- Posts: 10863
- Joined: Tue 30 Aug, 2005 17:21
- Has thanked: 221 times
- Been thanked: 358 times
Апгрейд Plugin API
Да, притом не требуется изобретать велосипед — предлагаемая архитектура была реализована ещё в COM'овских интерфейсах.
Фар есть инструмент, а не нянька. © 2009 DrKnS
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Апгрейд Plugin API
Связанное обсуждение: http://forum.farmanager.com/viewtopic.php?f=6&t=6339, и ещё тут: http://forum.farmanager.com/viewtopic.p ... 082#p59082