Словарь

Programming Far Manager plugins

Словарь

Часть материалов, описывающих свойства файловой системы взяты с сайта http://www.windowsfaq.ru/. Все ссылки на MSDN, упомянутые в Словаре, открываются в отдельном окне в виде результатов поиска по сайту msdn.microsoft.com (см. также MSDN по русски).
Программный компонент-добавка к Far Manager, позволяющая реализовать дополнительные функции. Плагин фактически - обычная библиотека, которая выполняется в контексте консольного процесса - так что ваш плагин может делать всё (ну или почти всё), что может делать обычное консольное Windows приложение. Сама идея плагинов позволяет настраивать оболочку под себя, добавляя нужное и выкидывая лишнее.

Большая часть нововведений в файловой системе Windows 2000 стала возможной благодаря введению концепции Reparse Points, специальных "крючков" в файловой системе, позволяющих подключать дополнительные подсистемы хранения данных без использования дополнительных программ.

Reparse Points в действительности являются специальными объектами файловой системы, обладающими специальными атрибутами, которые позволяют использовать дополнительную функциональность подсистемы хранения данных. Любой файл или папка может иметь Reparse Point, что означает, что по одному и тому же пути при обращении к ресурсу могут быть доступны сразу несколько видов расширенной функциональности.
См. также: MSDN: Reparse Points

Directory Junctions (слияния папок) позволяют соединять папки вместе таким образом, что вы можете привязать любую имеющуюся папку к любой другой локальной папке. Например, если имеются три папки, c:\folder1, c:\folder2 и c:\documents, то можно создать точки перехода к папке c:\documents таким образом, что она будет казаться подпапкой других двух папок, т.е. на диске будут существовать папки c:\folder1\documents и c:\folder2\documents.

Изначально предполагалось, что в поставку будет входить специальная утилита linkd.exe, предназначенная для создания Directory Junctions, однако сейчас эта программа не включена в Win2000 и поставляется в составе Resource Kit. Также Directory Junctions могут быть созданы при помощи API, однако это потребует написания собственной программы.

На первый взгляд, Directory Junctions и Distributed File System выполняют одни и те же задачи, так как оба этих сервиса создают видимость единого дерева папок, в действительности состоящих из множества распределённых папок. Однако между ними есть несколько существенных различий:

  • Система DFS использует службу Active Directory для хранения своей информации
  • Благодаря использованию Active Directory система DFS может обеспечивать защиту от сбоев и выравнивание нагрузки на систему, в то время как Directory Junctions не обеспечивают ни того, ни другого, хотя это и не является необходимым в контексте локального компьютера
  • Система DFS в основном нацелена на объединение сетевых ресурсов в единое пространство имён, в то время как Directory Junctions связывают только локальные ресурсы
  • DFS может работать с использованием нескольких файловых систем, а Directory Junctions основаны только на NTFS 5.0
  • Система DFS требует программы-клиента, а Directory Junctions - нет.

См. также: MSDN: Directory Junctions, MSDN: Inside Win2K NTFS, Part 1.

Mount Points (точки подключения) по сути являются тем же самым, что и Directory Junctions, однако позволяют лишь подключать корневую папку одного раздела к папке на другом разделе диска. Mount Points создаются с использованием Reparse Points, и, следовательно, нуждаются в NTFS 5.0.

Mount Points полезны для увеличения размеров раздела без фактического изменения структуры разделов на диске. Например, можно создать точку подключения диска D: в качестве папки C:\Documents, что приведёт в итоге к видимости увеличения доступного на диске C: пространства.
См. также: MSDN: Volume Mount Points

Hard Link - это когда один и тот же файл имеет два имени. Допустим, один и тот же файл имеет имена 1.txt и 2.txt: если пользователь сотрёт файл 1, останется файл 2. Если сотрёт 2 - останется файл 1, то есть оба имени, с момента создания, совершенно равноправны. Файл физически стирается лишь тогда, когда будет удалено его последнее имя. Жёсткая ссылка может быть создана только в пределах одного раздела диска (естественно, файловая система должна поддерживать жёсткие ссылки).
См. также: MSDN: Hard Links, Q106166 - Windows NT Backup and Hard Links.

Гораздо более практичная возможность, позволяющая делать виртуальные каталоги - ровно так же, как и виртуальные диски командой subst в DOSе. Применения достаточно разнообразны: во-первых, упрощение системы каталогов. Если вам не нравится каталог "Documents and settings\Administrator\Documents", вы можете прилинковать его в корневой каталог - система будет по прежнему общаться с каталогом с дремучим путём, а вы - с гораздо более коротким именем, полностью ему эквивалентным.

Символические ссылки (SymLink) на NTFS поддерживаются, начиная с Windows Vista (NT 6.0). Они представляют собой улучшеный вариант связей каталогов - символические ссылки могут указывать как на папки, так и на файлы, как на локальные, так и на сетевые, при этом поддерживаются относительные пути.


См. также: MSDN: Symbolic Links, Windows 2000 Magazine: Inside Win2K NTFS, Part 1.

NTFS5 поддерживает разрежённые файлы, которые состоят из больших областей последовательных нулевых разрядов. Такой файл можно пометить как разрежённый и дать файловой системе возможность выделять место для хранения только значимых разрядов данного файла. NTFS хранит информацию только о том, где размещены значимые данные. Подобный способ позволяет оптимально распределять дисковую память на томах NTFS при хранении разрежённых файлов и обработке этих файлов приложениями.
См. также: MSDN: Sparse Files, Возможности NTFS.

Маски файлов часто используются в командах Far Manager для выбора отдельных файлов и папок или их групп. Маски могут включать обычные допустимые в именах файлов символы, '*' и '?', а также специальные выражения:
МетасимволОписание
* Любое количество символов
? Любой символ
[c,x-z] Любой символ из находящихся в квадратных скобках. Допускаются и отдельные символы, и их диапазоны.
Например, файлы ftp.exe, fc.exe и f.ext могут быть выбраны с помощью маски f*.ex?, маска *co* выберет и color.ini, и edit.com, маска [c-f,t]*.txt может выбрать config.txt, demo.txt, faq.txt и tips.txt.

Во многих командах Far Manager можно задать несколько разделённых запятыми или точкой с запятой масок. Например, чтобы выбрать все документы, вы можете ввести *.doc,*.txt,*.wri в команде "Пометить группу".

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

В некоторых ситуациях (поиск файлов, пометка файлов, ассоциации файлов, группы сортировки и раскраска файлов) можно использовать маски исключения. Маска исключения есть одна или несколько масок файлов, которой не должны соответствовать имена требуемых файлов, она отделяется от основной маски символом '|'.

Примеры использования масок исключения:
  1. *.cpp
    Все файлы с расширением cpp.
  2. *.*|*.bak,*.tmp
    Все файлы, кроме файлов с расширением bak и tmp.
  3. *.*|
    Ошибка - введён спецсимвол '|', но сама маска исключения не указана.
  4. *.*|*.bak|*.tmp
    Ошибка - спецсимвол '|' не может встречаться более одного раза.
  5. |*.bak
    Обрабатывается как '*|*.bak'
Допускаются следующие типы колонок:
N - имя файла, допускаются модификаторы (например "MOR"):
M - показывать символы пометки;
O - показывать имена без путей (предназначено в основном для подключаемых модулей);
R - выравнивать не умещающиеся имена по правому краю (дополнительно F - выравнивать все имена по правому краю),
N - не отображать расширения файлов.
X - расширение файла, допускаются модификаторы:
R - выравнивать расширение по правому краю.
S - размер файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в виде десятичной дроби, используя наиболее подходящую единицу измерения, например 0,97 К, 1,44 М, 53,2 Г;
E - экономичный режим, между размером и суффиксом пробел не ставится
P - выделенный размер файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в виде десятичной дроби, используя наиболее подходящую единицу измерения, например 0,97 К, 1,44 М, 53,2 Г;
E - экономичный режим, между размером и суффиксом пробел не ставится
G - размер потоков файла.
Для размеров допускаются модификаторы:
C - форматировать размер файла запятыми;
T - использовать 1000 вместо 1024 как делитель, если ширины колонки не хватает для показа полного размера файла.
F - размер файла выводится в виде десятичной дроби, используя наиболее подходящую единицу измерения, например 0,97 К, 1,44 М, 53,2 Г;
E - экономичный режим, между размером и суффиксом пробел не ставится
D - дата модификации файла
T - время модификации файла
DM - дата и время модификации файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DC - дата и время создания файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DA - дата и время последнего доступа к файлу
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
DE - дата и время изменения файла
Допускаются модификаторы:
B - краткий (в стиле Unix) формат времени файла;
M - использование текстовых имён месяцев;
A - атрибуты файла
Z - описание файла
O - владелец файла
Допускаются модификаторы:
L - отображать также имя домена
LN - количество жёстких ссылок
F - количество потоков
C0..C99 - пользовательские типы колонок.
Если описание типов колонок содержит более одной колонки имени файла, панель файлов будет отображаться в многоколоночной форме.

Строка ColumnWidths в структуре PanelMode описывает ширину колонок панели (например, "0,8,0,5").

Формат строки простой - числа (представляющие ширину колонки) разделённые запятой.

Если ширина равна 0, то используется значение по умолчанию. Если ширина колонки с именем, описанием или владельцем равна 0, она будет подсчитана автоматически, в зависимости от ширины панели. Для правильной работы с различной шириной экрана настоятельно рекомендуется, чтобы в каждом режиме просмотра была хотя бы одна колонка с автоматически вычисляемой шириной.

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

Для показа года в 4-хсимвольном формате нужно увеличить ширину колонки даты на 2.


Для распределения сообщений от клавиатуры используется концепция так называемого клавиатурного фокуса ввода. Фокус ввода - это атрибут, который присваивается элементу диалога. Если элемент имеет фокус ввода, то он получает все клавиатурные сообщения (в основном :-) из системной очереди Far Manager.

Менеджер диалогов Far Manager может передавать фокус ввода от одного элемента другому. Когда вы нажимаете клавиши Tab, Shift+Tab или Alt+Символ, фокус ввода передаётся следующему/предыдущему элементу диалога (или элементу диалога, имеющему соответствующую горячую клавишу).

Функция обработки диалога может проследить за получением и потерей фокуса ввода. Когда элемент получает фокус ввода, функции-обработчику передаётся сообщение DN_GOTFOCUS. Когда элемент теряет фокус ввода, функции-обработчику передаётся сообщение DN_KILLFOCUS. В ответ на сообщение DN_KILLFOCUS функция обработки диалога может запретить потерю фокуса ввода, вернув значение -1. Сообщение DN_GOTFOCUS носит чисто информативный характер, т.е. вы не можете отменить данное событие, как таковое.

Программный интерфейс Dialog API Far Manager содержит два сообщения, позволяющие узнать или изменить элемент, владеющий фокусом ввода. Эти сообщения имеют соответственно имена DM_GETFOCUS и DM_SETFOCUS.

Ниже перечислены элементы диалога, которые могут иметь клавиатурный фокус ввода (при условии, что для этих элементов не выставлены флаги DIF_NOFOCUS и/или DIF_DISABLE):

ЭлементОписание
DI_BUTTON Кнопка (Push Button).
DI_CHECKBOX Контрольный переключатель (Check Box).
DI_COMBOBOX Комбинированный список.
DI_EDIT Поле ввода.
DI_FIXEDIT Поле ввода фиксированного размера.
DI_LISTBOX Окно списка.
DI_PSWEDIT Поле ввода пароля.
DI_RADIOBUTTON Селекторная кнопка (Radio Button).
DI_USERCONTROL Элемент управления, определяемый программистом.