суббота, 22 января 2011 г.

Named Folders 3.0. Релиз, итоги.

Выложил релиз Named Folders 3.0 - плагина для Far Manager, позволяющего быстро перемещаться между директориями в Far (версия x86, версия x64). С момента начала работы над третьей версией плагина прошло уже четыре месяца.. и 14 билдов.

Детально об изменениях написано в whatsnew. Основные изменения следующие:
  • Плагин стал юникодным, работает теперь только в Far 2 и использует FAR API 2.0.
  • У плагина появилась 64-битная версия.
  • Код плагина приведен более менее в нормальное состояние, пригодное для дальнейшей работы (ох, не весь еще приведен..)
  • Оптимизированы размеры итоговых dll.
  • Исправлено множество багов и добавлен ряд полезных мелочей в функциональность плагина.
  • Полностью переделана технология разбора относительных путей и изменен синтаксис команд для ограничения глубины поиска.
О последнем пункте хочу сказать чуть подробнее. Ведь именно из-за него релиз плагина был отложен более чем на полтора месяца.

Named Folders 2.5 позволял не только переходить в директорию, на которую непосредственно указывал псевдоним, но и указывать дальнейший путь. Например:
  • команда cd:pf переходит в c:\program files;
  • команда cD:pf\* находит все поддиректории c:\program files
  • cD:pf\\* находит как директории, непосредственно вложенные в c:\program files, так и все их поддиректории
  • cD:pf\\\a позволяет искать вглубь на три уровня
Другими словами, слеши позволяли ограничивать глубину поиска. Поставил 5 слешей - ищешь не более чем на 5 уровней вглубь. 10 слешей - на 10 уровней. И т.д.

Для чего это нужно? Для скорости поиска. Чтобы перебрать все файлы в c:\program files, может потребоваться несколько минут. Если же вы знаете, что файл лежит не глубоко, в двух-трех уровнях от поверхности, то почему бы не использовать эту информацию для ускорения поиска? Это как раз в духе плагина - использовать для поиска любую информацию, которая есть у пользователя.

К сожалению, в NF2.5 синтаксис команд поиска с ограничением глубины был не слишком интуитивен. И, что печально, реализация хромала на обе ноги. Работали лишь самые простейшие команды, а чуть более сложные уже работали не так как ожидается или вообще не работали.

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

Детали приведены в вики. Здесь же я приведу просто несколько примеров, как теперь можно использовать поиск с ограничением уровня вложенности.
  • cd:sh\** - неограниченный поиск всех директорий вглубь.
  • cd:sh\**:2 - поиск вглубь на два уровня вниз.
  • cd:sh\*\* - поиск вглубь на два уровня вниз. Эта команда похожа на cd:sh\**:2, но есть важное отличие. Команда cd:sh\*\* включит в результаты только директории второго уровня, а команда cd:sh\:2 - как второго, так и первого уровня.
  • cd:sh\*\*\a - найти директории, расположенные на третьем уровне вложенности, удовлетворяющие маске "a".
  • cd:sh\**:3a - найти все директории, расположенные на первом, втором и третьем уровнях вложенности, и удовлетворяющие маске "a".
  • cd:sh\**:3\a - найти все директории, расположенные на первом, втором и третьем уровнях вложенности, а затем в каждой из них провести поиск директории, удовлетворяющей маске "a".
  • cd:sh\.. - перейти в родительскую директорию.
  • cd:sh\..\* - найти все директории, вложенные в родительскую директорию.
  • cd:sh\..*:2 - вернуть две директорию: родительскую и ту, в которую родительская вложена.
  • cd:sh\..* - вернуть все родительские директории. Если наша директория находится на N-ном уровне в файловой системе, то команда вернет N - 1 директорию.
  • cd:sh\..*\**:2a" - найти все родительские директории и в каждой из них провести поиск директорий, удовлетворяющих маске "a", причем поиск ограничить двумя уровнями.
В NF3 функциональность для ограничения глубины поиска можно использовать не только в командах перехода по псевдониму cd:sh, но и еще в паре мест:
  • В командах прямого перехода в директорию: cd:path
  • В путях, на которые ссылаются псевдонимы. Т.е. для псевдонима pf можно указать не просто директорию c:\program files, но, например, c:\program files\**:3. В результате, команда cd:pf будет всегда показывать полный список всех директорий, вложенных в c:\program files на 1-3 уровня
Из других изменений в функциональности в NF 3.0 отмечу:
  • Реализована возможность запуска 64-битных приложений из 32-битного FAR
  • Команда прямого перехода в директорию cd:path позволяет указывать path в кавычках; кроме того path может быть сетевой директорией.
  • Реализованы команды неявного создания шоткатов, ссылающихся на две панели сразу.
  • Макрос FastPrefix стал гораздо более удобным: нажатие ":" не только приводит к вводу "cd:" в командной строке, но и меняет раскладку клавиатуры на английскую. Нажал ":" и печатай команду NF.
В следующей версии плагина (3.1) планируется следующее:
  • Поддержка win7-libraries (#10)
  • Поддержка атрибутов для каталогов и шоткатов (#8). Например, для каталогов нужен атрибут "показывать в меню дисков" и "синхронизировать с библиотекой win7"
  • "НЕ" в фильтре и в масках пути (#46, #47)
  • Интеграция с doskey (#36).
  • Визуализация длительных операций (#44).
Новую версию постараюсь выложить на PlugRing. Обо всех замеченных багах можно писать сюда, на email или в issue tracker.

Комментариев нет:

Отправить комментарий