LoadCustomSortMode

Far Manager Macro System

LoadCustomSortMode


Panel.LoadCustomSortMode (Mode, Settings)

Параметры:
  Mode:         режим сортировки, целое число >=100 и <=0x7FFFFFFF
  Settings:     таблица, содержит следующие поля:
                  Condition:
                     Функция. Если задана, то будет вызвана с одним аргументом - режим сортировки.
                     Если возвращаемое значение ложно, то сортировка отменяется.
                     Следует отметить, что данная функция может перезагрузить все параметры сортировки,
                     снова вызвав Panel.LoadCustomSortMode().
                  Compare:
                     Функция, см. её описание ниже.
                  DirectoriesFirst, SelectedFirst, RevertSorting, SortGroups:
                     Данные опциональные поля задают соответствующие опции сортировки:
                     0 - опция выключена, 1 - опция включена, любое другое значение
                     или отсутствие данного поля означают "использовать текущую
                     установку Far Manager".
                  InvertByDefault:
                     Включать ли по умолчанию обратную сортировку.
                  Indicator:
                     Индикация режима сортировки на панели, строка из двух символов
                     (первый - для прямой, второй - для обратной сортировки).
                  NoSortEqualsByName:
                     По умолчанию, равные с точки зрения алгоритма сортировки элементы
                     сортируются по имени. Если это нежелательно, установите данное поле
                     в true.
                  Description:
                     Текстовое описание режима сортировки. Если данное поле задано,
                     оно используется в меню (см. Panel.CustomSortMenu).
                  SortFunction:
                     Опция выбора функции сортировки из двух встроенных.
                     Задаётся строкой: "shellsort" (значение по умолчанию) или "qsort".
                  InitSort:
                     Функция. Если задана, то вызывается перед началом сортировки.
                     Получает один параметр: таблицу FarOptions (см. ниже одноимённый
                     параметр функции Compare).
                  EndSort:
                     Функция. Если задана, то вызывается после окончания сортировки.

                Если значение Settings равно nil или false, это означает выгрузку
                (удаление) данного режима сортировки.

Возвращает:
  Ничего

Описание:
  Функция загружает (или выгружает) пользовательский режим сортировки для панелей.
  Если режим загружен, он может быть установлен в панели посредством вызова функции
  Panel.SetCustomSortMode.

Функция Compare
  result = Compare (Pi1, Pi2, FarOptions)

  Параметры:
    Pi1 и Pi2  - сравниваемые элементы панели, структуры типа SortingPanelItem.
    FarOptions - таблица, содержащая текущие опции сортировки панели в Far Manager
                 (все значения - булевые): DirectoriesFirst, SelectedFirst,
                 RevertSorting, SortGroups, NumericSort, CaseSensitiveSort.

  Возвращает:
    result     - если 1-й элемент должен оказаться после прямой сортировки выше 2-го,
                 нужно возвратить отрицательное число, если ниже - положительное,
                 а если элементы по критерию сортировки равны - ноль.

Примечание 1:
  Пользовательская сортировка использует библиотеку FFI от LuaJIT 2. Программирование
  с использованием LuaJIT FFI требует предварительного освоения документации.

Примечание 2:
  Пользовательские режимы сортировок панелей восстанавливаются при перезапуске Far,
  если текущая конфигурация была сохранена, при условии, что соответствующие вызовы
  Panel.LoadCustomSortMode() производятся в процессе загрузки макросов.
  Восстановление происходит после окончания загрузки макросов, до начала исполнения
  автостартующих макросов.

Примечание 3:
  Пользовательские режимы сортировки принудительно выгружаются при выгрузке макросов.


Пример:
  -- Загрузить сортировку по длине имени файла.
  local ffi = require "ffi"
  local C = ffi.C
  Panel.LoadCustomSortMode (100,
    { 
      Compare = function(p1, p2, opt)
        local l1, l2 = C.wcslen(p1.FileName), C.wcslen(p2.FileName)
        return l1<l2 and -1 or l1>l2 and 1 or 0
      end;
      Indicator = "bB";
    })