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

Programming Far Manager plugins

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

К меню относятся следующие области: прочие меню (Menu), основное меню (MainMenu), меню пользователя (UserMenu), меню выбора диска (Disks).

Под списками понимается: список автодополнения (AutoCompletion), и различные открытые списки в диалогах (Dialog) - List box / Combo box / History.

Далее в тексте "меню" и "списки" не разделяются, и упоминаются под общим названием "меню".

Свойства

Все меню
ОператорТипОписание
Menu.Value String содержимое текущего пункта меню (см. также menu.getvalue())
Menu.Info.Id String строковое представление идентификатора текущего меню
Меню выбора диска
ОператорТипОписание
Drv.ShowPos Number для какой панели вызвано меню выбора диска: 1 - для левой (Alt+F1), 2 - для правой (Alt+F2).
Drv.ShowMode Number информация, отображаемая в меню выбора дисков; набор битовых флагов:
Флаги Описание
0x00000001 тип дисков
0x00000002 сетевые имена (и пути, ассоциированные с SUBST-дисками)
0x00000004 метки дисков
0x00000008 тип файловой системы
0x00000010 общее и свободное место на дисках
0x00000100 общее и свободное место отображается в виде десятичной дроби
0x00000020 параметры сменных носителей
0x00000040 подключаемые модули (плагины)
0x00000080 параметры оптических дисков
0x00000200 параметры сетевых дисков

Функции

Функция Описание
Pos=checkhotkey(S[,StartPos])

Функция позволяет проверить и получить позицию элемента, для которого назначена горячая клавиша S.

Если S - пустая строка, то функция вернёт позицию элемента, для которого горячие клавиши не назначены.

Если не задать StartPos, то поиск осуществляется с начала.

Работает как в меню, так и в диалогах.

Если текущий элемент диалога - открытый список, то функция работает не с диалогом, а с этим списком.

Возвращает позицию найденного элемента. 0 - ничего не найдено, -1 - функция вызвана не из меню/диалога/списка.

Например:

В меню вызова плагинов (F11) плагину S&R назначена горячая клавиша '7'.

Следующая последовательность макрокоманд для редактора вызовет плагин (если хоткей назначен) или стандартный диалог поиска (если хоткей не назначен):

F11 $if (checkhotkey("7")) 7 1 $else Esc AltF7 $end
S=gethotkey([Pos])

Возвращает горячую клавишу S для пункта меню с номером Pos.

Если Pos не указан, или равен 0 - подразумевается текущий пункт.

Если горячая клавиша для пункта меню не задана, то возвращается пустая строка ("").

В случае ошибки (не меню; нет хоткея; Pos больше чем количество пунктов меню) также возвращается пустая строка.

N=menu.filter([Action[,Mode]])

Выполняет операции фильтрации (Ctrl+Alt+F).

ActionОписание
0включение фильтра
ModeОписание
-1(по умолчанию) вернуть 1 если фильтр уже включен, 0 - фильтр выключен
 0выключить фильтр
 1включить фильтр, если фильтр уже включен - ничего не делает
1фиксация текста фильтра (Ctrl+Alt+L)
ModeОписание
-1(по умолчанию) вернуть 1 если текст фильтра зафиксирован, 0 - фильтр можно менять с клавиатуры
 0отменить фиксацию фильтра
 1зафиксировать фильтр
2вернуть 1 если фильтр включен и строка фильтра не пуста
3вернуть количество отфильтрованных (невидимых) строк
4(по умолчанию) подправить высоту списка под количество элементов

Если фильтрация недоступна (не меню; не список) возвращает -1.

Если код возврата специально не оговорен, в случае успеха возвращает 1, в случае ошибки 0.

S=menu.filterstr([Action[,S]])

Выполняет операции со строкой фильтра (Ctrl+Alt+F).

ActionОписание
0(по умолчанию) вернуть текущую строку, если фильтр включен
1

установить (заменить) в фильтре строку S

Если фильтр не был включен - включает его, режим фиксации не трогается, но игнорируется.

Возвращает предыдущее значение строки фильтра

S=menu.getvalue([Pos])

Возвращает текст пункта меню с номером Pos.

Если текущий "объект" не меню или позиция Pos не валидна (меньше 0 или больше количества пунктов в меню), то возвращается пустая строка.

Если Pos не указан или равен 0, то действие аналогично применению Menu.Value.

Позиция меню не меняется.

b=menu.itemstatus([Pos])

Возвращает в младшем слове набор битовых флагов - состояние пункта меню с номером Pos (текущая позиция - Pos=0 или не указан):

ФлагиОписание
0x00000001Признак активности пункта меню. Только один пункт может быть активным.
0x00000002Признак отмеченного пункта меню. Перед текстом будет отображаться метка выбора.
0x00000004Пункт меню отображается как разделитель.
0x00000008Пункт меню недоступен
0x00000010Если флаг установлен, то пункт меню доступен в навигации, но не доступен для выбора.
0x00000020Если флаг установлен, то пункт меню не выводится на экран.

В старшем слове - код символа пометки (U+XXXX).

  • Если выставлен флаг 0x00000002 и старшее слово равно 0, то Far использует символ пометки U+221A.
  • Если выставлен флаг 0x00000002 и старшее слово не равно 0, то Far использует символ пометки из старшего слова.
$If(menu.itemstatus() & 0x00000002)
    msgbox("Selected", chr(menu.itemstatus()>>16))
$Else
    msgbox("Not Selected")
$End

Функция работает со всеми пунктами меню, в том числе с теми, которые в данный момент не отображаются (скрытые пункты учитываются в позиции).

Если текущий "объект" не меню или позиция Pos невалидна (меньше 0 или больше количества пунктов в меню), то функция возвращает значение -1 (все биты установлены).

Pos=menu.select(S[,Mode[,Dir]])

В меню позиционирует курсор на первый пункт, содержащий подстроку S.

Поиск регистронезависим.

Если такого пункта нет, то ничего не делает.

Поиск подстроки ведётся в зависимости от указанного режима Mode:

ModeОписание
0полное совпадение
1совпадение с началом строки
2совпадение с концом строки
3присутствие подстроки S в пункте меню

Если параметр Mode не указан, подразумевается полное совпадение.

Параметр Dir задаёт направление поиска:

DirОписание
0от начала в конец списка пунктов меню
1от текущей позиции в начало
2от текущей позиции в конец списка

Возвращает позицию пункта меню (если найден), 0 - ошибка при позиционировании (нет пункта или пункт задисаблен), -1 - функция вызвана не для меню.

F11 $if(menu.select("Advanced compare",0) > 0) Enter $end

Замечания

Пункты меню нумеруются начиная с 1. В нумерацию также включаются разделители и заблокированые пункты меню.
Смотрите также: