Режим табулированных списков — это основной режим для отображения табулированных данных, то есть данных, состоящих из записей, каждая из которых занимает одну строку текста, а её содержимое разделено на столбцы. Режим табулированных списков предоставляет средства для красивой печати строк и столбцов, а также для сортировки строк по значениям в каждом столбце. Он является производным от специального режима (см. Основные основные режимы).
Режим табулированных списков ориентирован на отображение текста с использованием моноширинных шрифтов, с единым шрифтом и размером текста. Если вы хотите отобразить таблицу с использованием переменных шрифтов или изображений, вместо этого можно использовать make-vtable. vtable также поддерживает наличие более чем одной таблицы в буфере или наличие буфера, содержащего как таблицу, так и дополнительный текст. См. (vtable)Введение для получения дополнительной информации.
Режим табулированных списков предназначен для использования в качестве родительского режима более специализированным основным режимом. Примеры включают режим меню процессов (см. Информация о процессах) и режим меню пакетов (см. Меню пакетов в Руководстве по GNU Emacs).
Такой производный режим должен использовать define-derived-mode обычным образом, указывая tabulated-list-mode в качестве второго аргумента (см. Определение производных режимов). Тело формы define-derived-mode должно задавать формат табулированных данных, присваивая значения переменным, описанным ниже; при необходимости оно может затем вызвать функцию tabulated-list-init-header, которая заполнит заголовок именами столбцов.
Производный режим также должен определить команду вывода списка. Именно её, а не команду режима, вызывает пользователь (например, M-x list-processes). Команда вывода списка должна создать или переключиться на буфер, включить производный режим, указать табулированные данные и, наконец, вызвать tabulated-list-print для заполнения буфера.
Эта переменная задаёт символ, используемый на GUI-фреймах для указания того, что столбец отсортирован в порядке возрастания.
При каждом изменении направления сортировки в буферах табулированных списков этот индикатор переключается между возрастанием («asc») и убыванием («desc»).
Аналогично tabulated-list-gui-sort-indicator-asc, но используется, когда столбец отсортирован в порядке убывания.
Аналогично tabulated-list-gui-sort-indicator-asc, но используется для текстовых фреймов.
Аналогично tabulated-list-tty-sort-indicator-asc, но используется, когда столбец отсортирован в порядке убывания.
Эта локальная переменная буфера задаёт формат данных табулированного списка. Её значение должно быть вектором. Каждый элемент вектора представляет столбец данных и должен быть списком (имя ширина сортировка . свойства), где
nil, столбец не может использоваться для сортировки. Если t, столбец сортируется путём сравнения строковых значений. В противном случае это должна быть функция-предикат для sort (см. Функции, переставляющие списки), которая принимает два аргумента в том же виде, что и элементы tabulated-list-entries (см. ниже).
:right-align не равно nil, то столбец должен выравниваться по правому краю. А свойство :pad-right задаёт количество дополнительных пробелов для отступа справа от столбца (по умолчанию 1, если опущено).
Эта локальная переменная буфера задаёт записи, отображаемые в буфере табулированного списка. Её значение должно быть либо списком, либо функцией.
Если значение является списком, каждый элемент списка соответствует одной записи и должен иметь вид (id содержимое), где
nil, либо объект Lisp, идентифицирующий запись. В последнем случае курсор остаётся на той же записи при повторной сортировке записей. Сравнение выполняется с помощью equal.
tabulated-list-format. Каждый элемент вектора является либо строкой, которая вставляется в буфер как есть; дескриптором изображения, который используется для вставки изображения (см. Дескрипторы изображений); либо списком (метка . свойства), что означает вставку текстовой кнопки путём вызова insert-text-button с аргументами метка и свойства (см. Создание кнопок).
В этих строках не должно быть символов новой строки.
В противном случае значением должна быть функция, которая при вызове без аргументов возвращает список указанного выше вида.
Эта локальная переменная буфера задаёт группы записей, отображаемых в буфере табулированного списка. Её значение должно быть либо списком, либо функцией.
Если значение является списком, каждый элемент списка соответствует одной группе и должен иметь вид (имя-группы записи), где имя-группы — это строка, вставляемая перед всеми записями группы, а записи имеют тот же формат, что и tabulated-list-entries (см. выше).
В противном случае значением должна быть функция, которая при вызове без аргументов возвращает список указанного выше вида.
Вы можете использовать seq-group-by для создания tabulated-list-groups из tabulated-list-entries. Например:
(setq tabulated-list-groups
(seq-group-by 'Buffer-menu-group-by-mode
tabulated-list-entries))
где вы можете определить Buffer-menu-group-by-mode следующим образом:
(defun Buffer-menu-group-by-mode (entry) (concat "* " (aref (cadr entry) 5)))
Этот обычный хук выполняется перед восстановлением исходного состояния буфера табулированного списка. Производный режим может добавить функцию в этот хук для пересчёта tabulated-list-entries.
Значение этой переменной — функция, вызываемая для вставки записи в текущую позицию, включая завершающий символ новой строки. Функция должна принимать два аргумента, id и содержимое, имеющие те же значения, что и в tabulated-list-entries. Значение по умолчанию — функция, которая вставляет запись простым способом; режим, использующий режим табулированных списков более сложным образом, может указать другую функцию.
Значение этой переменной задаёт текущий ключ сортировки для буфера табулированного списка. Если это nil, сортировка не выполняется. В противном случае оно должно иметь вид (имя . инвертировать), где имя — это строка, совпадающая с одним из имён столбцов в tabulated-list-format, а инвертировать, если не равно nil, означает инвертирование порядка сортировки.
Эта функция вычисляет и устанавливает header-line-format для буфера табулированного списка (см. Строки заголовка окна) и назначает клавиатурную карту строке заголовка, чтобы разрешить сортировку записей щелчком по заголовкам столбцов.
Режимы, производные от режима табулированных списков, должны вызывать эту функцию после установки вышеуказанных переменных (в частности, только после установки tabulated-list-format).
Эта функция заполняет текущий буфер записями. Она должна вызываться командой вывода списка. Она стирает буфер, сортирует записи, заданные tabulated-list-entries, в соответствии с tabulated-list-sort-key, а затем вызывает функцию, указанную tabulated-list-printer, для вставки каждой записи.
Если необязательный аргумент запомнить-позицию не равен nil, эта функция ищет элемент id в текущей строке, если он есть, и пытается переместиться к этой записи после того, как все записи будут (заново) вставлены.
Если необязательный аргумент обновить не равен nil, эта функция будет только стирать или добавлять записи, которые изменились с момента последней печати. Это в несколько раз быстрее, если большинство записей не изменилось с момента последнего вызова этой функции. Единственное различие в результате заключается в том, что метки, размещённые с помощью tabulated-list-put-tag, не будут удалены из записей, которые не изменились (обычно все метки удаляются).
Эта функция удаляет запись в текущей позиции.
Она возвращает список (id столбцы), где id — это идентификатор удалённой записи, а столбцы — это вектор дескрипторов её столбцов. Она перемещает точку в начало текущей строки. Она возвращает nil, если в текущей позиции нет записи.
Обратите внимание, что эта функция изменяет только содержимое буфера; она не изменяет tabulated-list-entries.
Этот defsubst возвращает объект ID из tabulated-list-entries (если это список) или из списка, возвращаемого tabulated-list-entries (если это функция). Если аргумент опущен или равен nil, позиция по умолчанию равна точке.
Этот defsubst возвращает объект записи из tabulated-list-entries (если это список) или из списка, возвращаемого tabulated-list-entries (если это функция). Это будет вектор для ID в позиции. Если в позиции нет записи, функция возвращает nil.
Этот defsubst возвращает не nil, если в позиции находится фиктивный заголовок. Фиктивный заголовок используется, если tabulated-list-use-header-line равен nil, чтобы разместить имена столбцов в начале буфера. Если аргумент опущен или равен nil, позиция по умолчанию равна point-min.
Эта функция помещает метку в область отступа текущей строки. Область отступа может быть пустым пространством в начале строки, ширина которого определяется tabulated-list-padding. метка должна быть строкой длиной, не превышающей tabulated-list-padding. Если продвинуть не равно nil, эта функция перемещает точку на одну строку вперёд.
Эта функция очищает все метки из области отступа в текущем буфере.
Эта функция изменяет запись табулированного списка в текущей позиции, устанавливая столбец в дескриптор. столбец — это номер столбца для изменения или имя столбца для изменения. дескриптор — это новый дескриптор столбца, который вставляется через tabulated-list-print-col.
Если изменить-данные-записи не равно nil, эта функция изменяет базовые данные (обычно дескриптор столбца в списке tabulated-list-entries), устанавливая дескриптор столбца вектора в дескриптор.