42.20.3 Создание кнопок

Кнопки ассоциируются с областью текста, используя оверлей или свойства текста для хранения информации, специфичной для кнопки, причем вся эта информация инициализируется из типа кнопки (который по умолчанию устанавливается в встроенный тип кнопки button). Как и весь текст Emacs, внешний вид кнопки определяется свойством face; по умолчанию (через свойство face, унаследованное от типа кнопки button) это простая подчеркивание, как у типичной ссылки на веб-странице.

Для удобства существуют два вида функций создания кнопок: те, которые добавляют свойства кнопки к существующей области буфера, называемые make-...button, и те, которые также вставляют текст кнопки, называемые insert-...button.

Все функции создания кнопок принимают аргумент &rest properties, который должен быть последовательностью пар свойство значение, указывающих свойства, которые следует добавить к кнопке; см. Свойства кнопок. Кроме того, может использоваться ключевой аргумент :type, чтобы указать тип кнопки, от которого следует наследовать другие свойства; см. Типы кнопок. Любые свойства, не указанные явно во время создания, будут унаследованы от типа кнопки (если тип определяет такое свойство).

Следующие функции добавляют кнопку с использованием оверлея (см. Оверлеи) для хранения свойств кнопки:

Функция: make-button beg end &rest properties

Эта функция создает кнопку из beg до end в текущем буфере и возвращает ее.

Функция: insert-button label &rest properties

Эта функция вставляет кнопку с меткой label в текущую позицию и возвращает ее.

Следующие функции аналогичны, но используют свойства текста (см. Свойства текста) для хранения свойств кнопки. Такие кнопки не добавляют маркеров в буфер, поэтому редактирование в буфере не замедляется, даже если существует чрезвычайно большое количество кнопок. Однако, если на тексте есть существующее свойство текста, связанное с цветовой схемой (например, свойство, назначенное режимом Font Lock), свойство кнопки может быть невидимым. Обе эти функции возвращают начальную позицию новой кнопки.

Функция: make-text-button beg end &rest properties

Эта функция создает кнопку из beg до end в текущем буфере, используя свойства текста.

Функция: insert-text-button label &rest properties

Эта функция вставляет кнопку с меткой label в текущую позицию, используя свойства текста.

Функция: buttonize string callback &optional data

Иногда удобнее преобразовать строку в кнопку, не вставляя ее сразу в буфер, например, при создании структур данных, которые могут позже быть вставлены в буфер. Эта функция преобразует string в такую строку, и callback будет вызвана, когда пользователь нажмет на кнопку. Необязательный параметр data будет использоваться в качестве параметра, когда вызывается callback. Если nil, в качестве параметра используется сама кнопка.

Функция: buttonize-region start end callback &optional data help-echo

Иногда удобнее преобразовать существующий текст в буфере в кнопку, а не вставлять новый текст. Эта функция преобразует область между start и end в кнопку. Аргументы callback и data имеют то же значения, что и для buttonize. Необязательный аргумент help-echo используется как свойство help-echo кнопки.