15.4.4 Ключевые слова типов

В типе настройки после символа имени типа можно указать пары «ключевое слово — аргумент». Вот ключевые слова, которые можно использовать, и их значения:

:value значение-по-умолчанию

Задаёт значение по умолчанию.

Если nil не является допустимым значением для альтернативы, то необходимо указать допустимое значение по умолчанию с помощью :value.

Если вы используете это для типа, который фигурирует как альтернатива внутри choice, это задаёт значение по умолчанию, которое будет использоваться изначально, если и когда пользователь выберет эту альтернативу через меню в буфере настройки.

Разумеется, если фактическое значение параметра соответствует этой альтернативе, будет отображаться фактическое значение, а не значение-по-умолчанию.

:format строка-формата

Эта строка будет вставлена в буфер для представления значения, соответствующего типу. В строке-формата доступны следующие управляющие последовательности с ‘%’:

‘%[кнопка%]’

Отображает текст кнопка как кнопку. Атрибут :action задаёт, что будет делать кнопка при активации пользователем; его значение — функция, принимающая два аргумента: виджет, в котором находится кнопка, и событие.

Невозможно задать две разные кнопки с разными действиями.

‘%{образец%}’

Показывает образец специальным лицом, заданным :sample-face.

‘%v’

Подставляет значение элемента. Способ представления значения зависит от вида элемента и (для переменных) от типа настройки.

‘%d’

Подставляет строку документации элемента.

‘%h’

Как ‘%d’, но если строка документации длиннее одной строки, добавляет кнопку для переключения между показом всего текста и только первой строки.

‘%t’

Подставляет метку. Метка задаётся ключевым словом :tag.

‘%%’

Отображает буквальный символ ‘%’.

:action действие

Выполняет действие, если пользователь щёлкает по кнопке.

:button-face лицо

Использует лицо (имя лица или список имён лиц) для текста кнопки, отображаемого с помощью ‘%[…%]’.

:button-prefix префикс
:button-suffix суффикс

Задают текст, отображаемый до и после кнопки. Каждый может быть:

nil

Текст не вставляется.

строка

Строка вставляется буквально.

символ

Используется значение символа.

:tag метка

Использует метку (строку) как метку для значения (или части значения), соответствующего этому типу. Важно указывать информативную метку для интерфейса настройки, особенно если вы используете тип restricted-sexp или определяете новый тип. См. Определение новых типов.

:doc документация

Использует документацию как строку документации для этого значения (или части значения), соответствующего типу. Чтобы это работало, необходимо задать значение для :format и использовать в нём ‘%d’ или ‘%h’.

Обычная причина указания строки документации для типа — предоставить дополнительную информацию о значениях альтернатив внутри типа choice или о частях другого составного типа.

:help-echo текст-подсказки

При переходе к этому элементу с помощью widget-forward или widget-backward в области эха будет отображаться строка текст-подсказки. Кроме того, текст-подсказки используется как строка help-echo для мыши и может быть функцией или формой, вычисляемой для получения строки подсказки. Если это функция, она вызывается с одним аргументом — виджетом.

:match функция

Задаёт способ определения того, соответствует ли значение типу. Соответствующее значение функция должно быть функцией, принимающей два аргумента (виджет и значение) и возвращающей не nil, если значение приемлемо.

:match-inline функция

Задаёт способ определения того, соответствует ли встроенное значение типу. Соответствующее значение функция должно быть функцией, принимающей два аргумента (виджет и встроенное значение) и возвращающей не nil, если значение приемлемо. См. Вставка в списки для получения дополнительной информации о встроенных значениях.

:validate функция

Задаёт функцию проверки вводимых данных. функция принимает виджет в качестве аргумента и должна возвращать nil, если текущее значение виджета допустимо. В противном случае она должна вернуть виджет, содержащий недопустимые данные, и установить свойство :error этого виджета в строку с объяснением ошибки.

:type-error строка

строка должна описывать, почему значение не соответствует типу, согласно функции :match. Когда функция :match возвращает nil, свойство :error виджета будет установлено в строку.