Call

Far Manager Macro System

Call


... = Plugin.Call (PluginId, ...)

Параметры:
  PluginId: string (GUID плагина в текстовом представлении)
  ...     : ноль или более дополнительных параметров

Возвращает:
  ...     : ноль или более возвращаемых значений

Описание:
  1. Функция осуществляет "асинхронный" вызов плагина.
     Если вызов в действительности оказался асинхронным (например, если плагин вывел
     диалог на экран), функция возвращает true, не дожидаясь возврата от плагина,
     и макрос продолжает исполнение.

  2. Если вызов в действительности оказался синхронным, макросу возвращаются величины
     в соответствии с тем, что вернул плагин:
     - Если плагин не найден или вернул 0, макросу возвращается false.
     - Если плагин вернул 1 или INVALID_HANDLE_VALUE, макросу возвращается true.
     - Если плагин вернул указатель на структуру FarMacroCall, см пункт 4.

  3. Параметры передаются плагину в соответствии с их Lua-типами:
       nil      -> FMVT_NIL
       boolean  -> FMVT_BOOLEAN
       number   -> FMVT_DOUBLE
       int64    -> FMVT_INTEGER (int64 - тип userdata, создаваемый библиотекой bit64)
       string   -> FMVT_STRING  (автоматически преобразуется из UTF-8 в UTF-16LE)
       {string} -> FMVT_BINARY  (для того, чтобы передать произвольный стринг без
                                 преобразования UTF-8 -> UTF16LE, его нужно передавать,
                                 помещённым в таблицу как элемент с ключом 1)

  4. Величины, возвращаемые плагином через структуру FarMacroCall, передаются макросу
     следующим образом:
       FMVT_NIL     -> nil
       FMVT_BOOLEAN -> boolean
       FMVT_DOUBLE  -> number
       FMVT_INTEGER -> number, если "укладывается" в 53 бита, иначе int64
       FMVT_STRING  -> string (автоматически преобразуется из UTF-16LE в UTF-8)
       FMVT_BINARY  -> table (в таблице передаётся строка как элемент с ключом 1;
                              передаётся как есть, без преобразования)
       FMVT_POINTER -> light userdata
       FMVT_ARRAY   -> table (массив элементов; в таблице установлено два поля:
                              ["type"] = "array", и
                              ["n"] = количество элементов массива)

См. также:
Ограничения в использовании некоторых функций