Функции

В макропоследовательности допускаются следующие функции:
Математические функции
Функция Описание
N=abs(N) Возвращает абсолютную величину числового аргумента N.
N=max(N1,N2) Возвращает максимальное значение между двумя числовыми аргументами N1 и N2.
N=min(N1,N2) Возвращает минимальное значение между двумя числовыми аргументами N1 и N2.
N=mod(N1,N2) Деление N1 по модулю N2.
N=int(V) Приведение значения выражения V к числу.
Строковые функции
Функция Описание
N=index(S1,S2) Если подстрока S2 содержится в строке S1, то возвращается ее позиция, иначе -1.
N=rindex(S1,S2) Если подстрока S2 содержится в строке S1, то возвращается ее позиция, иначе -1. Поиск ведется от конца строки S1.
Result=replace(Str,Find,Replace[,Cnt]) В строке Str заменить подстроку Find на подстроку Replace Cnt раз (укажите Cnt равное 0 или опустите этот параметр для замены всех найденных подстрок).
Возвращается результат замены.
N=asc(S) Возвращает код символа S.
S=chr(N) Возвращает символ, заданный кодом N.
S=itoa(N[,Radix]) Конвертирует целое число N в строку. Значение Radix определяет базу, которая должна использоваться при преобразовании числа N. Допустимые значения Radix от 2 до 36.
Если параметр Radix не указан, то подразумевается база 10.
N=atoi(S[,Radix]) Конвертирует строковое представление строки N в число. Значение Radix определяет базу, которая будет использоваться при преобразовании строки S. Допустимые значения Radix от 2 до 36.
Если параметр Radix не указан, то функция попытается сама определить в каком виде представлено строковое представление числа.
N=len(V) Возвращает длину выражения V. Числовое значение выражения V приводится к строке, после чего вычисляется длина строки).
S=string(V) Перевод значения выражения V в строку.
S=substr(V,N1[,N2]) Возвращает подстроку из выражения V начиная с позиции N1 длинной N2.
Если параметр N2 не указан или равен -1, то вернется подстрока от позиции N1 до конца строки.
Если параметр N2 равен 0, то вернется пустая строка.
S=trim(V[,N]) Удаляет все пробельные символы (пробелы, табуляции, переводы строк и возвраты каретки) из строки V снаружи (N=0 или не указан), слева (N=1) или справа (N=2).
S=xlat(S) Возвращает транслитерируемую строку
Функция аналогична макрокоманде $XLat, но используется в выражениях. Строковый аргумент S обязателен.
S=lcase(S) Преобразует строку S в нижний регистр.
S=ucase(S) Преобразует строку S в верхний регистр.
S=date(format) Возвращает текущую дату/время по формату format (описание format см. в $Date).
Функция аналогична макрокоманде $Date, но используется в выражениях. Строковый аргумент format в отличии от макрокоманды $Date обязателен.
Файловые функции
Функция Описание
S=fsplit(path,N) Разбивает путь path на компоненты и возвращает их комбинацию, в зависимости от набора флагов N:
ФлагиОписание
0x00000001Текущий диск в формате "C:".
Для сетевых каталогов - "\\server\share"
0x00000002Путь в формате "\Program Files\Far\"
0x00000004Имя
0x00000008Расширение в формате ".EXT" или пусто, если расширения нет.
N=fexist(S) Проверяет существование файла/каталога S (возвращает 0 или 1).
В параметр S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/каталога.
Функция не работает с панелями.
N=fattr(S) Возвращает файловые атрибуты файла/каталога S
АтрибутОписание
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. Файл является т.н. "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 допускается использование символов '*' и '?'. В этом случае функция возвращает атрибуты только для первого найденного файла/каталога.
Функция не работает с панелями.
Панель
Функция Описание
N=panel.fexist(panelType,S) Проверяет существование файла/каталога S из активной (panelType=0) или пассивной (panelType=1) панели (возвращает 0 или 1).
В параметр S допускается использование символов '*' и '?'. В этом случае функция проверяет только первое вхождение файла/каталога.
Функция работает только с панелями.
N=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. Файл является т.н. "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 допускается использование символов '*' и '?'. В этом случае функция возвращает атрибуты только для первого найденного файла/каталога.
Функция работает только с панелями.
V=panelitem(panelType,itemIndex,propIndex) Возвращает различную информацию для элемента панели itemIndex (начиная с 1) из активной (panelType=0) или пассивной (panelType=1) панели. propIndex может быть одним из следующих значений:
ЗначениеТипОписание
0StringИмя файла/каталога
1StringКороткое имя
2NumberФайловые атрибуты
3StringДата/время создания
4StringДата/время последнего доступа
5StringДата/время модификации
6NumberРазмер
7NumberУпакованный размер
8Number"Выделен?"
9NumberКоличество линков
10NumberSortGroup
11StringDiz-текст
12StringВладелец
13NumberCRC32
14NumberПозиция элемента в процессе чтения файловой системы
Для панели "Дерево папок" возвращается только имя файла (propIndex=0), остальные значения propIndex игнорируются.
Дата/время возвращается в формате DD.MM.YYYY HH:MM:SS. Разделители и порядок в дате зависят от региональных настроек.
Для получения данных о текущем файле (под курсором) itemIndex должен быть равен 0.
N=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 $Text %dt Enter
$End
N=panel.setpath(panelType,pathName[,fileName]) На активной (panelType=0) или пассивной (panelType=1) панели выставляет каталог pathName и позиционирует курсор на элемент с именем fileName (если указан параметр 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")
N=panel.setposidx(panelType,indexItem) Позиционирует курсор на элемент с индексом indexItem на активной (panelType=0) или пассивной (panelType=1) панели.
Возвращает позицию элемента или 0, если такого элемента на панели нет.
Управляющие функции
Функция Описание
V=iif(Cond,True,False) Условный оператор. Если условие Cond верно, то возвращается True-выражение, иначе False-выражение.
Среда исполнения
Функция Описание
S=env(V) Возвращает значение переменной среды V, например,
$if (Env("FARLANG") == "English") что-то делаем $end
B=msave(S) Сохраняет значение глобальной переменной с именем S в область Vars. В случае неудачи возвращает 0.
Например,
%%GlobalVars="Foo Bar"; %a=msave("%%GlobalVars");
V=akey(N) Возвращает название или код клавиши, вызвавшей макропоследовательность. N = 0 - возвращается код клавиши, N = 1 - возвращается наименование клавиши.
Пример см. в описании $AKey
V=clip(Cmd[,S]) Позволяет производить разнообразные манипуляции с Clipboard в зависимости от команды Cmd:
CmdОписание
0Возвращает данные из Clipboard; параметр S игнорируется; в случае ошибки возвращает 0
1Поместить строку S в Clipboard; в случае ошибки возвращает 0
2Добавить строку S к Clipboard; в случае ошибки возвращает 0
3Копировать Windows Clipboard во внутренний буфер обмена; параметр S игнорируется; в случае ошибки возвращает 0
4Копировать внутренний буфер обмена в Windows Clipboard; параметр S игнорируется; в случае ошибки возвращает 0
Например, поместить в Clipboard список отмеченных файлов в формате CSV (имя и размер):
Clip(1,"Name;Size\r\n")
Home
$While(!APanel.Eof)
  $If(!APanel.Folder && PanelItem(0,0,8))
     Clip(2,PanelItem(0,0,0)+";"+PanelItem(0,0,6)+"\r\n")
  $End
  Down
$End
См. так же $IClip, IClip.
V=flock(Nkey,NState) Позволяет переключить состояние Lock-клавиш (NumLock, CapsLock и ScrollLock).
Клавиша Nkey:
NkeyОписание
0NumLock
1CapsLock
2ScrollLock
Состояние NState:
NStateОписание
-1получить состояние клавиши
0погасить индикатор
1включить индикатор
2переключить индикатор в противоположное состояние
В Windows 95/98/Me функция может изменять только состояние клавиш CapsLock и ScrollLock. Для линейки NT (NT/2000/XP/...) этого ограничения нет.
Функция капризная (возможно зависание компьютера), поэтому пользоваться ей надо осторожно. Например, макрос, повешенный на CtrlCapsLock (переключение между окнами) должен иметь некую обвязку:
CtrlShiftTab
%a=flock(1,-1)&1;
$while((flock(1,-1)&1)==%a)
  sleep(50)
  flock(1,2)
$end
N=sleep(N) Организация задержки в макросе на N миллисекунд. Отрицательное значение задержки считается ошибкой и функция возвращает 0.
V=waitkey([N, [T]]) Ожидает любую клавишу и возвращает ее название (T=0) или значение (T=1). Если время ожидания N (миллисекунды) истекло, функция возвращает пустую строку (T=0) или 0 (T=1). Если параметр N не указан или равен 0, то функция будет бесконечно ждать нажатия клавиши.
S=key(V) Преобразует параметр V в строковый эквивалент названия клавиши.
Если V строка, то проверяется правильность написания клавиши и она же возвращается, если V число, то происходит попытка преобразовать значение в текстовый эквивалент названия клавиши.
В случае ошибок - возвращается пустая строка.
N=eval(S[,T]) "Проиграть" (T=0) или проверить (T=1) макропоследовательность заданную строкой S. Если S содержит синтаксические ошибки, то макропоследовательность исполняться не будет.
FAR компилирует последовательность S.
Для режима исполнения (T=0): если нет ошибок, то состояние текущего макроса сохраняется и начинает выполняться последовательность S. После исполнения S прерванный макрос продолжает работать.

Функция возвращает 0 в случае успешной компиляции последовательности S или код ошибки:
ErrorОписание
1Неизвестное ключевое слово 'ключевое слово'
2Неизвестная функция 'функция'
3Неверное количество параметров у функции 'функция'
4Неожиданное появление $Else
5Неожиданное появление $End
6Неожиданный конец строки
7Ожидается 'ключевое слово'
8Неизвестный шестнадцатеричный управляющий символ
9Неправильный управляющий символ
10Переменная 'переменная' не найдена
11Ошибка синтаксиса
12Пустая макропоследовательность

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

Например, необходимо по F10 запускать окно проводника для каталога на активной панели, содержимое командной строки должно сохраняться.
В области Vars задаем 2 строковых переменных макропроцедуры, описывающие сохранение и восстановление содержимое командной строки:

%%CmdSave=$If (!CmdLine.Empty) %Flg_Cmd=1;
          %CmdCurPos=CmdLine.ItemCount-CmdLine.CurPos+1;
          %CmdVal=CmdLine.Value; Esc $End

%%CmdRestore=$If (%Flg_Cmd==1) $Text %CmdVal
          %Flg_Cmd=0; %Num=%CmdCurPos;
          $While (%Num!=0) %Num=%Num-1; CtrlS $End $End
далее на F10 вешаем макрос:
$If (APanel.Visible && (!APanel.Plugin || (!APanel.Bof &&(APanel.OPIFlags & 0x20))))
  Eval(%%CmdSave)
  $If (APanel.Current == "..")
    .
    ShiftEnter
  $Else
    "%SystemRoot%\\explorer.exe /select,"
    $If (Apanel.LFN)
      CtrlN
    $End
    CtrlEnter
    $If (!Apanel.LFN)
      CtrlN
    $End
    Enter
  $End
  Eval(%%CmdRestore)
$End
Взаимодействие с пользователем
Функция Описание
N=msgbox([Title[,Text[,Flags]]]) Показывает сообщение Text с заголовком Title. В параметре Text строки разбиваются символом '\n'.
Flags может быть набором следующих значений:
FlagsОписание
0x00000001Используются цвета "Предупреждения" (обычно белые буквы на красном фоне).
0x00000008Показать сообщение двумя строками ниже.
0x00000010Использовать для строк сообщения выравнивание влево (по умолчанию строки выводятся по центру).
0x00010000Выводится кнопка <Ok>
0x00020000Выводятся кнопки <Ok> и <Cancel>
0x00030000Выводятся кнопки <Abort>, <Retry> и <Ignore>
0x00040000Выводятся кнопки <Yes> и <No>
0x00050000Выводятся кнопки <Yes>, <No> и <Cancel>
0x00060000Выводятся кнопки <Retry> и <Cancel>
Если параметр Flags равен 0 (или не указан), то выводится стандартный диалог с кнопкой <Ok>
Функция возвращает 0, если пользователь отменил сообщение или выбранный номер кнопки (для первой кнопки - 1, для второй - 2 и так далее).
S=prompt("Title"[,"Prompt"[,flags[, "Src"[, "History"]]]]) Функция позволяет ввести одну строку текста.
Параметры: Title - заголовок диалога, Prompt - приглашения для ввода, Src - начальное значение строки ввода, History - имя истории ввода
Flags может быть набором следующих значений (аналогичным константам FIB_*):
FlagsОписание
0x00000001даже если строка ввода пуста функция вернет значение пустое значение.
0x00000002используется для ввода пароля - вводимый текст на экране отрисовывается символами '*'.
0x00000004после успешного ввода, в результирующем значении S идентификаторы переменных окружения заменяются на их значения, например, если пользователь ввел '%TEMP%', то DestText будет содержать 'C:\TEMP'.
0x00000008не использовать предыдущее значение из истории, оставить строку ввода пустой; актуален, если указан непустой параметр History.
0x00000010показать разделительную линию и кнопки [Ok] и [Cancel]. Диалог увеличится на 2 строки.
0x00000020не показывать в приглашении ввода амперсанд, использовать его для определения горячей клавиши.
Функция возвращает строку - введенное пользователем значение.
Например, запросить пароль и вывести его
%s=prompt("Password","Input password:",0x02); $Text %s
Элементы управления
Функция Описание
N=checkhotkey(S[,Pos]) Функция позволяет проверить и получить позицию элемента (начиная с Pos), который содержит горячую клавишу S. Если S - пустая строка, то функция вернет позицию элемента, который не содержит ни одной горячей клавиши.
Возвращает: -1 - если функция вызывана не из своей области (MainMenu, Menu, Disks, UserMenu и Dialog), 0 - ничего не найдено, > 0 - если в меню/диалоге/списке присутствует горячая клавиша S.

Например, в меню вызова плагинов (F11) плагину S&R назначена горячая клавиша '7'. Последовательность макрокоманды для редактора:

F11 $if (checkhotkey("7")) 7 1 $else Esc AltF7 $end
вызовет плагин, если хоткей назначен или стандартный диалог поиска, если хоткей не назначен.
S=gethotkey(N) Возвращает хоткей S для пункта N, если в меню присутствует горячая клавиша и текущий "объект" - меню. В противном случае (не меню; нет хоткея; N больше чем количество пунктов меню) возвращает 0.
Здесь N - позиция в списке от 1 (0 - текущая).
N=Menu.Select(S[,N]) В меню позиционирует курсор на первый пункт, содержащий подстроку S. Поиск подстроки ведется в зависимости от указанного режима N:
РежимОписание
0полное совпадение
1совпадение с началом строки
2совпадение с концом строки
3присутствие подстроки S в пункте меню
Поиск регистронезависим. Если такого пункта нет, то ничего не делает.
Возвращает: -1=ошибка - функция вызвана не для меню, 0=ошибка при позиционировании (нет пункта или пункт задисаблен), иначе - позицию пункта меню.
F11 $if(Menu.Select("Advanced compare",0) > 0) Enter $end
Если параметр N не указан, подразумевается полное совпадение.
V=Dlg.GetValue(ID,Type) Получить различные значения текущего диалога.
ID - номер элемента диалога (элементы нумеруются с 1; 0 - само диалоговое окно).
Type - тип получаемой информации, зависит от типа элемента. Для самого диалога (ID=0) допустимы следующие значения:
TypeТип VarОписание
0NumberКоличество элементов диалога
2NumberX1
3NumberY1
4NumberX2
5NumberY2
6NumberID текущего элемента, имеющего клавиатурный фокус ввода
Для элементов диалога допустимы:
TypeТип VarЭлементОписание
0NumberCheckBoxСостояние переключателя
0NumberRadioButtonsСостояние переключателя
0StringListBoxЗначение текущего элемента списка
0StringComboBoxЗначение текущего элемента списка
0StringОстальныеТекстовое значение (поле FarDialogItem.Data)
1NumberВсеТип элемента
2NumberВсеX1 относительно диалога
3NumberВсеY1 относительно диалога
4NumberВсеX2 относительно диалога
5NumberВсеY2 относительно диалога
6NumberВсеэлемент в фокусе?
7NumberCheckBoxСостояние переключателя
7NumberRadioButtonsСостояние переключателя
7StringListBoxТекущая позиция в списке (первый пункт списка = 1)
7StringComboBoxТекущая позиция в списке (первый пункт списка = 1)
7NumberОстальные0
8NumberВсеФлаги элемента
9NumberВсеФлаг, означающий, что данный элемент диалога является "элементом по умолчанию".
10StringОстальныеТекстовое значение (поле FarDialogItem.Data)
Возвращает -1, если ID больше количества элементов диалога или значение Type не поддерживается.
V=Editor.Set(Idx,Var) Для текущей копии редактора изменить настройки.
IndexТип VarОписание
0NumberРазмер табуляции
1NumberПреобразование табуляции
2NumberПостоянные блоки
3NumberDel удаляет блоки
4NumberАвтоотступ
5NumberАвтоопределение таблицы символов
6NumberAnsiTableForNewFile
7NumberКурсор за пределами строки
8Numberповедением клавиши BackSpace (TechInfo #13)
9NumberПредставление кода символа под курсором в статусной строке (TechInfo #32)
10NumberСохранять позицию файла
11NumberСохранять закладки
12StringСимволы разделители слов (TechInfo #1)
13NumberEditorF7Rules (TechInfo #18)
14NumberAllowEmptySpaceAfterEof (TechInfo #67)
Значение Var может быть равно -1, в этом случае функция ничего не изменит, а вернет текущее значение настройки.
Возвращает предыдущее значение опций или -1, если данные указаны некорректно.
Например, макрос, перемещающий выделенный фрагмент на одну строку вниз:
$IClip CtrlX %a=Editor.Set(2,1); Down CtrlV %a=Editor.Set(2,%a);
V=Editor.Sel(Action[,Opt]) Функция позволяет производить некоторые операции с блоками в тексте (в редакторе, в строках ввода в диалогах, в командной строке).
ActionОписание
0получить параметры текущего блока
OptОписание
0вернуть номер строки начала блока
1вернуть номер позиции в строке начала блока
2вернуть номер строки конца блока
3вернуть номер позиции в строке конца блока
4вернуть тип выделенного блока: 0 - блок не выделен, 1 - обычный блок, 2 - вертикальный блок (альтернативный вариант - Editor.State)
1позиционировать курсор внутри текущего блока (при позиционировании курсора состояние блока не изменяется)
OptОписание
0установить курсор в начало отмеченного блока
1установить курсор в конец отмеченного блока
2установка позиций блока
OptОписание
0отметить позицию начала блока
1отметить позицию конца блока
Позицией начала/конца блока считается текущая позиция курсора. Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается. Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.
3установка позиций вертикального блока
OptОписание
0отметить позицию начала вертикального блока
1отметить позицию конца вертикального блока
Позицией начала/конца блока считается текущая позиция курсора. Блок помечается только после указания конечной позиции (Opt=1), с ранее выделенного блока пометка снимается. Если позиция начала и конца блока совпадают, то эта операция равносильна снятию пометки блока.
4снять выделение с блока
Параметр Opt игнорируется.
Всегда возвращается 1
В случае ошибки (в т.ч. функция вызвана не из "редактора") возвращаемое значение равно 0, иначе 1. Для Action=0 возвращается запрошенное значение.
Например, повторим некоторые сочетания клавиш из Turbo-сред (макрос на сочетание Ctrl-K):
%k=waitkey(0,1);
$if(%k==B || %k==b || %k==CtrlB)
  editor.sel(2,0)
$else
  $if(%k==K || %k==k || %k==CtrlK)
    editor.sel(2,1)
  $else
    $if((%k==C || %k==c || %k==CtrlC) && Selected)
      CtrlC
    $else
      $if((%k==Y || %k==y || %k==CtrlY) && Selected)
        CtrlD
      $else
        eval("F1")
      $end
    $end
  $end
$end
Работа с закладками
Функция Описание
N=BM.Add() Добавить текущие параметры закладки и обрезать хвост
N=BM.Clear() Очистить все закладки
N=BM.Del([Idx]) Удалить закладку с указанным индексом Idx (нумерация начинается с 1). Если параметр Idx не указан или равен 0 - удаляется текущая закладка.
N=BM.Get(Idx,M) Получить параметры закладки с индексом Idx (нумерация начинается с 1), Idx=0 - текущая закладка.
Параметр M может быть одним из следующих:
ТипОписание
0координаты строки (начиная с 1)
1координаты колонки (начиная с 1)
2позиция, соответствующая первому видимому символу текста на экране слева
3номер строки, соответствующей первой видимой строке текста на экране
N=BM.Next() Перейти на следующую закладку
N=BM.Prev() Перейти на предыдущую закладку
N=BM.Stat([M]) Получить информацию о закладках.
Параметр M может быть одним из следующих:
ТипОписание
0текущее количество закладок
Пример работы с закладками:

  

Замечания

  1. Функции работы с закладками BM.XXX() доступны только в редакторе.
  2. Параметры функций, обозначенные в квадратных скобках можно не указывать. Значение по умолчанию см. в описаниях функций.
  3. Элементы макроязыка невозможно использовать во время записи макроса стандартным образом. Добавить элементы языка в макрос можно только путем ручной правки реестра или путем применения специальных программ/плагинов.