Свойства и функции для работы с панелями - Макросы

Programming Far Manager plugins

Свойства и функции для работы с панелями

Под "панелями" понимаются следующие области: файловые панели (Shell), информационная панель (Info), панель быстрого просмотра (QView), панель дерева папок (Tree).

Все плагиновые панели относятся к файловым (Shell).

Логические свойства (тип: Boolean)

Файловые панели
Свойство Описание
APanel.Root PPanel.Root на панели корневая папка?
APanel.Bof
PPanel.Bof
текущий элемент панели в начале списка?
APanel.Eof
PPanel.Eof
текущий элемент панели в конце списка?
APanel.Empty
PPanel.Empty
панель пуста?
APanel.Selected
PPanel.Selected
на панели есть отмеченные файлы/папки?
APanel.Folder
PPanel.Folder
текущий элемент панели - папка?
APanel.LFN
PPanel.LFN
на панели "длинные имена файлов"?
APanel.Filter
PPanel.Filter
на панели включён фильтр?
APanel.Plugin
PPanel.Plugin
плагиновая панель?
Все панели
Свойство Описание
APanel.FilePanel
PPanel.FilePanel
файловая панель?
APanel.Left
PPanel.Left
панель слева?
APanel.Visible
PPanel.Visible
панель видима?

Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

Свойства

Файловые панели
ОператорТипОписание
APanel.ColumnCount
PPanel.ColumnCount
Number количество колонок на панели
APanel.ItemCount
PPanel.ItemCount
Number содержит количество файловых объектов на панели
APanel.CurPos
PPanel.CurPos
Number содержит порядковый номер файлового объекта на панели
APanel.SelCount
PPanel.SelCount
Number содержит количество выделенных файлов на панели
APanel.Current
PPanel.Current
String содержит имя файла под курсором
APanel.Path
PPanel.Path
String содержит путь панели (без заключительного '\')
APanel.UNCPath
PPanel.UNCPath
String содержит UNC-путь панели (без заключительного '\'); для плагиновой панели - prefix:[hostfile/]path
APanel.DriveType
PPanel.DriveType
Number содержит тип привода на панели:
Значение Описание
-1 Плагиновая панель
0 Не удалось определить тип привода
2 Сменный привод
3 Жёсткий диск
4 Сетевой подмапленный диск
5 CDROM
6 Виртуальный диск
15 SUBST-диск
Файловые панели плагинов
ОператорТипОписание
APanel.Path0
PPanel.Path0
String содержит путь на реальной файловой системе, до вызова плагинов, создающих свою панель (без заключительного '\')
APanel.HostFile
PPanel.HostFile
String содержит имя хост-файла панели плагина (или пусто)
APanel.Prefix
PPanel.Prefix
String содержит префикс плагина или пусто (или несколько префиксов, разделённых символом ':')
APanel.Format
PPanel.Format
String содержит имя формата панели плагина
APanel.OPIFlags
PPanel.OPIFlags
Number набор битовых флагов, характеризующих свойства плагиновой панели:
ФлагиОписание
0x00000001 используется фильтр на панели
0x00000002 используются группы сортировки на панели
0x00000004 используется раскраска файлов на панели
0x00000010 папки на панели плагина выбираются независимо от настроек FAR
0x00000020 используется стандартная обработка файла FAR'ом, если запрошенная операция не поддерживается плагином; если этот флаг указан, элементы на панели плагина являются именами реальных файлов
0x00000040 показаны имена без путей
0x00000080 имена файлов выровнены по правому краю
0x00000100 имена файлов показаны в оригинальном регистре (независимо от настроек FAR)
Если панель не плагиновая, то значение будет = 0
Все панели
ОператорТипОписание
APanel.Height
PPanel.Height
Number содержит высоту панели
APanel.Width
PPanel.Width
Number содержит ширину панели
APanel.Type
PPanel.Type
Number содержит тип панели:
Значение Описание
0 Файловая панель
1 Дерево папок
2 Панель быстрого просмотра
3 Информационная панель

Замечания

Префикс APanel. относится к активной панели, PPanel. - к пассивной.

Функции

Функция Описание
itemIdx=panel.fexist(panelType,S)

Проверяет существование файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели.

В параметре S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/папки.

Функция возвращает 0, если такого объекта на панели нет, или индекс элемента.

В отличие от fexist(), функция работает только с панелями.

b=panel.fattr(panelType,S) Возвращает файловые атрибуты файла/папки S из активной (panelType=0) или пассивной (panelType=1) панели.
АтрибутОписание
0x00000001FILE_ATTRIBUTE_READONLY. Файл только для чтения. Приложения могут читать такой файл, но не могут записывать или удалять его.
0x00000002FILE_ATTRIBUTE_HIDDEN. Файл скрыт. Такой файл не включается в обычный листинг папки.
0x00000004FILE_ATTRIBUTE_SYSTEM. Этот файл - часть операционной системы.
0x00000010FILE_ATTRIBUTE_DIRECTORY. Это папка.
0x00000020FILE_ATTRIBUTE_ARCHIVE. Это архивный файл. Приложения должны использовать этот флаг для копирования, архивирования или удаления.
0x00000080FILE_ATTRIBUTE_NORMAL. У этого файла не установлены другие атрибуты. Это значение корректно только при использовании без остальных флагов.
0x00000100FILE_ATTRIBUTE_TEMPORARY. Это временный файл. Приложения должны записывать в такой файл только в крайней необходимости. Большая часть данных файла находится в памяти и не сбрасывается на диск, так как файл будет удалён.
0x00000200FILE_ATTRIBUTE_SPARSE_FILE. Файл является разрежённым.
0x00000400FILE_ATTRIBUTE_REPARSE_POINT. Папка является точкой повторной обработки.
0x00000800FILE_ATTRIBUTE_COMPRESSED. Файл или папка сжаты. Для файла это означает, что все данные его сжаты, для папки - что компрессия по умолчанию применяется ко всем её файлам и подпапкам.
0x00001000FILE_ATTRIBUTE_OFFLINE. Данные файла не доступны непосредственно. Означает, что реальные данные файла были физически перемещены на устройства хранения.
0x00002000FILE_ATTRIBUTE_NOT_CONTENT_INDEXED. Этот файл или папки не будут индексироваться службой индексирования.
0x00004000FILE_ATTRIBUTE_ENCRYPTED. Файл или папка зашифрованы. Для файла это означает, что все данные в файле зашифрованы. Для папки это означает, что шифрование является умолчанием для вновь созданных файлов и подпапок.
0x00010000FILE_ATTRIBUTE_VIRTUAL. Этот файл - виртуальный файл.

Если файловый объект не существует, функция возвращает -1.

В параметре S допускается использование символов масок '*' и '?'. В этом случае функция возвращает атрибуты для первого найденного файла/папки.

В отличие от fattr(), функция работает только с панелями.

V=panel.item(panelType,itemIdx,Property)

Возвращает различную информацию для элемента панели itemIdx из активной (panelType=0) или пассивной (panelType=1) панели.

В зависимости от запрашиваемого Property функция возвращает следующие свойства элемента:

PropertyТипОписание свойства
0StringИмя файла/папки
1StringКороткое имя
2NumberФайловые атрибуты
3StringДата/время создания
15NumberДата/время создания
4StringДата/время последнего доступа
16NumberДата/время последнего доступа
5StringДата/время модификации
17NumberДата/время модификации
20StringДата/время последнего изменения
21NumberДата/время последнего изменения
6NumberРазмер
7NumberВыделенный размер
8Number"Выделен?"
9NumberКоличество линков
10NumberSortGroup
11StringDiz-текст
12StringВладелец
13NumberCRC32
14NumberПозиция элемента в процессе чтения файловой системы
18NumberКоличество потоков
19NumberРазмер потоков
22VarЗначение Custom-колонки
23NumberЗначение ReparseTag (актуально только для ссылок)

Для панели "Дерево папок" возвращается только имя файла (Property=0), остальные значения Property игнорируются.

Для получения данных о текущем элементе (под курсором) itemIdx должен быть равен 0.

Дата/время могут возвращаться в форматах:

  1. как строка вида DD.MM.YYYY HH:MM:SS. Разделители и порядок в дате зависят от региональных настроек.
  2. как 64-разрядное число. В старших 32-х битах - дата, в младших - время.

Пример - выделить все файлы/папки новее текущего:

%d=Panel.Item(0,0,16);
%i=1;
$while (%i<=APanel.ItemCount)
  $If (panel.item(0,%i,16) > %d)
    panel.select(0,1,1,%i)
  $End
  %i=%i+1;
$End
E=panel.setpath(panelType,path[,filename])

На активной (panelType=0) или пассивной (panelType=1) панели выставляет путь path и позиционирует курсор на элемент с именем filename (если указан).

Возвращает 1 в случае успешной установки пути, и 0, если папка не существует.

Например, на активной панели выставить папку "C:\WINDOWS", на пассивной - "C:\Program Files", активную панель сделать слева и установить курсор на папку "FAR":

$if(APanel.Left) CtrlU $End
panel.setpath(1,"C:\\WINDOWS")
panel.setpath(0,"C:\\Program Files","FAR")
itemIdx=panel.setpos(panelType,filename)

Позиционирует курсор на элемент с именем filename на активной (panelType=0) или пассивной (panelType=1) панели.

Возвращает позицию (индекс) элемента или 0, если такого элемента на панели нет.

Например, создать папку с именем, соответствующим текущей дате в формате YYYYMMDD, если папка существует - позиционировать на неё курсор:

%dt=date("%Y%m0%d");
$If (fexist(%dt))
  panel.setpos(0,%dt)
$Else
  F7 print(%dt) Enter
$End
itemIdx=panel.setposidx(panelType,PosIdx[,InSelection])

Позиционирует курсор на элемент с индексом itemIdx на активной (panelType=0) или пассивной (panelType=1) панели.

Параметр PosIdx может принимать отрицательные значения, в этом случае элементы панели нумеруются от конца к началу.

Если задать itemIdx=0, то перехода не происходит, просто возвращается текущая позиция.

С помощью необязательного параметр InSelection можно осуществить позиционирование среди отмеченных элементов (для этого нужно указать InSelection=1).

Функция возвращает позицию элемента или 0, если такого элемента на панели нет.

N=panel.select(panelType,Action[,Mode[,Items]])

Операции с выделением элементов на активной (panelType=0) или пассивной (panelType=1) панели.

Action может быть одним из следующих значений:

ActionОписание
0снять выделение
1выделить
2инвертировать выделение
3восстановить выделение (аналог Ctrl+M). Возвращает количество восстановленных элементов.

Необязательный параметр Mode может принимать следующие значения:

ModeТип ItemsОписание
0 / или не указан - выполнить действие Action для всех элементов, параметр Items игнорируется
1 Number

Выполнить действие Action для элемента с индексом Items.

Items является числом - индексом элемента панели.

Если Items = 0 (или отсутствует) - выполнить действие Action для текущего элемента.

2 String

Выполнить действие Action для элементов, указанных в Items.

Items является строкой - списком имён файловых объектов (возможно с полными путями).

3 String

Выполнить действие Action для элементов, подходящих под маски, указанные в Items.

Items является строкой - списком файловых масок.

Для строковых значений Items:

  • Элементы должны быть разделены с помощью Lf ("\n") или CrLf ("\r\n").

    Имена должны быть в двойных кавычках.

  • В случае если Items равно "" (или отсутствует) - действие не выполняется.

Функция возвращает количество элементов, над которыми производилось Action.

Примеры:

Panel.Select(0,0)
полное снятие выделения
Panel.Select(0,1)
выделить все элементы
Panel.Select(0,2)
инверсия всего
Panel.Select(0,2,1)
инверсия того, что под курсором
Panel.Select(0,1,1,10)
"вдогонку" выделить 10-й элемент панели
Panel.Select(0,0,3)
ничего не делать
Panel.Select(0,1,2,clip(0))
выделить элементы, имена которых содержатся в буфере обмена

Замечания

  1. Панельные функции работают только с видимыми файловыми элементами, с учётом применённых фильтров на панели.
  2. Нумерация элементов начинается с 1.
  3. Во время вызова макрофункций panel.setpos(), panel.setpath() и panel.setposidx() макросы замораживаются до момента выполнения этих функций.

    На "больших" папках (например, сетевые, с большим количеством файловых объектов и/или медленных каналах) эти функции могут выводить сообщения о процессе сбора данных о файлах/папках, с возможностью отменить процесс по Esc.

Смотрите также: