My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
WIkiRelatedPathsRu  

commands
Updated Jan 10, 2011 by dvpubl...@gmail.com

Поддержка относительных путей в Named Folders 3.0

Основное назначение NF - обеспечить возможность переходить в директории, помеченные ярлыками. Пример: создаем ярлык pf для C:\Program Files, переходим в C:\Program files командой cd:pf

Но плагин позволяет перейти не только в базовую директорию, на которую непосредственно указывает ярлык, но и в директорию, заданную относительно базовой.

Пример: Команда cd:pf\a задает путь "a" относительно базовой директории C:\Program files. Плагин автоматически найдет и покажет все подходящие пути c:\Program files\a* в виде меню - пользователю останется выбрать нужный.

Общий принцип задания "относительных" путей прост - "все так же как в FAR". Можно указать путь явно, можно использовать в нем стандартные метасимволы *, ? и [a-z], задавать переход в вышерасположенную директорию через ".." и т.д. Но есть и ряд отличительных особенностей. В частности, с помощью специальных метасимволов \**:N и \..*:N, можно задавать глубину поиска.

Поддержка относительных путей существовала начиная с NF2. В NF3 она была существенно переработана, а ее синтаксис был изменен. Естественно, в лучшую сторону. Обсуждение всех внесенных изменений можно посмотреть в  issue #7 .

Ниже приведены детали реализации, актуальные для NF3.0.

Автоматическое расширение имен

Если вы подаете команду cd:abc\a\b\*c, то NF выполняет команду cd:abc\*a*\*b*\*c. Звездочки до и после "a" и "b" подставляются автоматически. После "c" звездочка не подставляется, т.к. *c уже содержит один из метасимволов. Правило простое: если в имени используется хотя бы один метасимвол, то имя звездочками не дополняется; если метасимволов нет, то дополняется.

Как именно дополнять имя метасимволами задает настройка "Режим расширения команд". Варианта три:

  • 0 - *a*
  • 1 - a*
  • 2 - a
Последний вариант, по сути, отключает автоматическое дополнение имен звездочками. Звездочки всегда придется прописывать вручную.

Где используются относительные пути

В трех местах:

  1. В команде запуска ярлыка: cd:a\path
  2. В названии директории, на которую ссылается ярлык. Т.е. ярлык может, например, указывать не просто на c:\program files, но и на c:\program files* или на c:\program files\**:4
  3. В командах прямого поиска, когда вместо ярлыка указывается путь к директории cd:c:\path"

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

Метасимволы

В относительных путях можно использовать метасимволы. Их поддерживается несколько штук. Во-первых, метасимволы используемые в FAR:

  1. * - 0 или больше символов.
  2. ? - любой символ
  3. [a-z] - любой символ из перечисленных
Во-вторых, специфичные метасимволы NF, позволяющие регулировать глубину поиска:
  1. \** - искать вглубь без ограничений уровня поиска.
  2. \..* - искать вверх без ограничения уровня поиска.
  3. \**:N - искать вглубь не более чем на N уровней. У команды есть "короткий" вариант, оставшийся от NF2.5. Вместо cd:pf\**:3 можно написать cd:pf\\\, т.е. N слешей заменяет \**:N. Короткий синтаксис включается в настройках. Если он отключен, то N повторяющихся слешей интерпретируется как один слеш.
  4. \..*:N - искать вверх не более чем на N уровней. Короткий вариант команды \.... (N + 1 точек). Если короткий синтаксис отключен, то N точек интерпретируется как 2 точки (при N > 2; одна точка интерпретируется как одна точка).
  5. .. - артефакт, оставшийся от NF 2.5, работает только при включенном в настройках коротком синтаксисе команд. Команда cd:pf.. интерпретируется как cd:pf\..

Возможность регулировки глубины поиска нужна, чтобы ускорить поиск. Например команда cd:pf\**\a - поиск в Program Files всех директорий, начинающихся на a, - может занять несколько минут. Если же вы точно знаете, что директория находится на первом-втором уровне вложенности, то можете подать команду cd:pf\**:2a и найти нужную директорию менее чем за секунду.

Если же вы все-таки запустили поиск без ограничения уровня вложенности, то помните о возможности нажать Esc в процессе поиска. Поиск не будет отменен. Вместо этого NF покажет меню вариантов, содержащее уже найденные результаты. Правда, продолжить остановленный поиск нельзя - придется запускать его по новой.

Отличия NF 2.5 и NF 3.0

Есть ряд особенностей, которые коренным образом отличают поведение NF 3.0 от NF 2.5.

  1. Последний слеш всегда отбрасывается. Т.е. если вы даете команду cd:abc\, то будет отработана команда cd:abc.
  2. В NF 2.X последовательные команды \* и \.. вычитали друг друга. В NF 3.X они выполняются последовательно. Т.е. команда cD:abc\..\* сделает следующее:
    • найдет директорию, на которую ссылается алиас abc;
    • перейдет в родительскую директорию, т.е. на один уровень вверх от найденной;
    • вернет все директории, непосредственно вложенные в родительскую директорию.
  3. В NF 3.0 введены новые метасимволы \**, \..* для поиска без ограничения уровня вложенности. В NF 2.5 вместо с этой целью использовались метасимволы \*\ и \.\, которые более не поддерживаются.
  4. В NF 3.0 введены новые метасимволы \**:N, \..*:N для поиска с ограничнием уровня вложенности. В NF 2.5 вместо этих команд нужно было использовать последовательности из N-слешей или N-точек.

Примеры использования

Примеры команды для поиска относительно директории, заданной алиасом sh:

  1. cd:sh\ - то же самое, что сd:sh (последний слеш всегда игнорируется).
  2. cd:sh\** - неограниченный поиск вглубь.
  3. cd:sh\**:2 - поиск вглубь на два уровня вниз.
  4. cd:sh\\ - если в настройках разрешен короткий синтаксис команд, то такая команда означает поиск вглубь на два уровня вниз; если короткий синтаксис запрещен, то команда работает как cd:sh
  5. cd:sh\*\* - поиск вглубь на два уровня вниз. Эта команда похожа на cd:sh\**:2, но есть важное отличие. Команда cd:sh\*\* включит в результаты только директории второго уровня, а команда {{{cd:sh\:2}} - как второго, так и первого уровня.
  6. cd:sh\*\*\a - найти директории, расположенные на третьем уровне вложенности, удовлетворяющие маске "a".
  7. cd:sh\**:3a - найти все директории, расположенные на первом, втором и третьем уровнях вложенности, и удовлетворяющие маске "a".
  8. cd:sh\**:3\a - найти все директории, расположенные на первом, втором и третьем уровнях вложенности, а затем в каждой из них провести поиск директории, удовлетворяющей маске "a".
  9. cd:sh\.. - директория на 1 уровень выше, чем alias
  10. cd:sh\..\* - найти все директории, вложенные в родительскую директорию.
  11. cd:sh\..*:2 - вернуть две директорию: родительскую и ту, в которую родительская вложена.
  12. cd:sh\..* - вернуть все родительские директории. Если наша директория находится на N-ном уровне в файловой системе, то команда вернет N - 1 директорию.
  13. cd:sh\..* - вернуть все родительские директории, удовлетворяющие маске "a".
  14. cd:sh\..*\a - найти все родительские директории и в каждой из них провести поиск поддиректорий, удовлетворяющих маске "a".
  15. cd:sh.. - если в настройках разрешен короткий синтаксис команд, то такая команда означает переход в родительскую директорию относительно sh; если короткий синтаксис запрещен, то команда работает как cd:sh.

Короткий синтаксис в путях

Если включить флаг "Короткий синтаксис в путях" то можно будет использовать укороченный синтаксис команд поиска, практически идентичный тому, что использовался в NF 2.5. А именно:

  1. \\\ вместо \**:3 - N слешей вместо \**:N;
  2. .... вместо \..*:3 - N + 1 двоеточие вместо \..:N
  3. cd:abc.. вместо cd:abc\..

Дальнейшие направления развития

  1. Возможность использование средств индексации. Прежде всего, службы Win7, а возможно и другие средства (например, google, www.voidtools.com, www.locate32.net). Если возможность окажется полезной, можно будет сделать субплагины и переключатель средств поиска в меню вариантов.
  2. Фоновый поиск. Не ждать завершения поиска, а выводить результаты прямо в процессе поиска.
Comment by anton.si...@gmail.com, Nov 19, 2010

> Использовать средства индексированного поиска Win7 для быстрого перебора директорий. Есть такая очень полезная штука www.voidtools.com (и аналогичная www.locate32.net). К ним есть API

>Переделать диалог поиска так, чтобы результаты поиска начинали выводиться прямо в процессе поиска, т.е. ДО полного его завершения. Это было бы здорово.

Comment by project member Joye.Ram...@gmail.com, Nov 20, 2010

NF это не средство поиска каталогов по всему диску. идея тут в создании алиасов к конкретным основным важным точкам в ФС, и потом переходить по ним или около них. для того и ведется работа с относительными путями. мне так кажется

Comment by anton.si...@gmail.com, Nov 20, 2010

Не вижу противоречия между вашим и моим тезисами. Использование готовой базы данных РАЗИТЕЛЬНО ускорит поиск в конкретных основных важных точках в ФС, и соответственно переходы вокруг да около.

Comment by project member Joye.Ram...@gmail.com, Nov 22, 2010

> abc - любой символ из перечисленных вот этого как то недопонял) это про abc? - любой символ из множества или о то что любой символ просто воспринимается как символ ?


Sign in to add a comment
Powered by Google Project Hosting