Spec-Zone.ru › Elisp

Панели инструментов

Панель инструментов — это строка значков, которые можно нажать, расположенная в верхней части фрейма, сразу под строкой меню. См. Панели инструментов в Руководстве по GNU Emacs. Emacs обычно отображает панель инструментов на графических дисплеях.

В каждом фрейме параметр фрейма tool-bar-lines определяет, сколько строк высоты зарезервировать для панели инструментов. Значение нуль подавляет отображение панели инструментов. Если значение отлично от нуля и auto-resize-tool-bars не nil, панель инструментов автоматически расширяется и сжимается по мере необходимости, чтобы вместить указанное содержимое. Если значение равно grow-only, панель инструментов автоматически расширяется, но не сжимается автоматически.

Содержимое панели инструментов контролируется картой меню, привязанной к псевдофункциональной клавише под названием TOOL-BAR (точно так же, как контролируется строка меню). Таким образом, вы определяете элемент панели инструментов, используя define-key, например так:

(define-key global-map [tool-bar key] item)

где key — это псевдофункциональная клавиша для различения этого элемента от других элементов, а item — это привязка элемента меню (см. Расширенные элементы меню), которая определяет, как отображать этот элемент и как он ведет себя.

Обычные свойства элемента карты меню, :visible, :enable, :button, и :filter, полезны при привязке к панели инструментов и имеют обычное значение. real-binding в элементе должен быть командой, а не картой меню; другими словами, не получится определить значок панели инструментов как клавишу-префикс.

Свойство :help задаёт строку подсказки, отображаемую, когда курсор мыши находится над этим элементом. Она отображается так же, как и текст свойств help-echo (см. Отображение справки).

Кроме того, вы должны использовать свойство :image; таким образом вы задаёте изображение, которое должно отображаться на панели инструментов:

:image image

image — это либо одно изображение (см. Изображения), либо вектор из четырёх изображений. Если вы используете вектор из четырёх, то одно из них используется в зависимости от обстоятельств:

элемент 0

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

элемент 1

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

элемент 2

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

элемент 3

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

GTK+ и NS версии Emacs игнорируют элементы от 1 до 3, потому что отключённые и/или невыбранные изображения автоматически вычисляются из элемента 0.

Если image — это одно изображение, Emacs рисует кнопку панели инструментов в отключённом состоянии, применяя алгоритм обнаружения границ к изображению.

Свойство :rtl определяет альтернативное изображение для языков, читаемых справа налево. В настоящее время только GTK+ версия Emacs поддерживает это.

Как и строка меню, панель инструментов может отображать разделители (см. Разделители меню). Однако разделители панели инструментов вертикальные, а не горизонтальные, и поддерживается только один стиль. Они представлены в карте панели инструментов записями (menu-item "--"); свойства, такие как :visible, не поддерживаются для разделителей панели инструментов. Разделители отображаются в GTK+ и Nextstep панелях инструментов; в других случаях они отображаются с помощью изображения вертикальной линии.

По умолчанию панель инструментов определяется таким образом, чтобы элементы, специфичные для редактирования, не отображались для основных режимов, символ команды которых имеет свойство mode-class со значением special (см. Конвенции основных режимов). Основные режимы могут добавлять элементы к глобальной панели, привязывая [tool-bar foo] в своей локальной карте. Некоторые основные режимы могут заменить элементы стандартной панели инструментов полностью, так как вместить много не удастся, а стандартные привязки упрощают это, используя косвенное обращение через tool-bar-map.

Переменная: tool-bar-map

По умолчанию, глобальная карта привязывает [tool-bar] следующим образом:

(global-set-key [tool-bar]
                `(menu-item ,(purecopy "tool bar") ignore
                            :filter tool-bar-make-keymap))

Функция tool-bar-make-keymap, в свою очередь, динамически выводит фактическую карту панели инструментов из значения переменной tool-bar-map. Таким образом, вы обычно должны изменять стандартную (глобальную) панель инструментов, изменяя эту карту. Некоторые основные режимы, такие как режим Info, полностью заменяют глобальную панель инструментов, делая tool-bar-map буферно-локальной и устанавливая её в другую карту.

Существует две вспомогательные функции для определения элементов панели инструментов, как показано ниже.

Функция: tool-bar-add-item icon def key &rest props

Эта функция добавляет элемент в панель инструментов, изменяя tool-bar-map. Изображение задаётся параметром icon, который является базовым именем файла изображения XPM, XBM или PBM, которое будет найдено с помощью find-image. Например, для значения «"exit"» будут искаться файлы exit.xpm, exit.pbm и exit.xbm в указанном порядке на цветном дисплее. На монохромном дисплее порядок поиска — ‘.pbm’, ‘.xbm’ и ‘.xpm’. Привязка — это команда def, а key — это символ псевдофункциональной клавиши в карте префиксных клавиш. Остальные аргументы props — дополнительные элементы списка свойств для добавления в описание элемента меню.

Чтобы определить элементы в какой-либо локальной карте, привяжите tool-bar-map с let вокруг вызовов этой функции:

(defvar foo-tool-bar-map
  (let ((tool-bar-map (make-sparse-keymap)))
    (tool-bar-add-item …)
    …
    tool-bar-map))
Функция: tool-bar-add-item-from-menu command icon &optional map &rest props

Эта функция служит для определения элементов панели инструментов, согласованных с существующими привязками строки меню. Привязка command ищется в строке меню в map (по умолчанию global-map) и изменяется для добавления спецификации изображения для icon, которая находится так же, как и в tool-bar-add-item. Результирующая привязка затем помещается в tool-bar-map, поэтому используйте эту функцию только для глобальных элементов панели инструментов.

map должен содержать соответствующую карту, привязанную к [menu-bar]. Остальные аргументы props — дополнительные элементы списка свойств для добавления в описание элемента меню.

Функция: tool-bar-local-item-from-menu command icon in-map &optional from-map &rest props

Эта функция используется для создания элементов панели инструментов, не относящихся к глобальным. Используйте её как tool-bar-add-item-from-menu за исключением того, что in-map определяет локальную карту для создания определения в ней. Аргумент from-map подобен аргументу map в tool-bar-add-item-from-menu.

Переменная: auto-resize-tool-bars

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

Если значение равно grow-only, панель инструментов автоматически расширяется, но не сжимается автоматически. Чтобы сжать панель инструментов, пользователь должен перерисовать фрейм, введя C-l.

Если Emacs скомпилирован с GTK+ или Nextstep, панель инструментов может отображать только одну строку, поэтому эта переменная не оказывает влияния.

Переменная: auto-raise-tool-bar-buttons

Если эта переменная отлична от nil, элементы панели инструментов отображаются в поднятой форме, когда курсор мыши перемещается по ним.

Переменная: tool-bar-button-margin

Эта переменная определяет дополнительный отступ вокруг элементов панели инструментов. Значение — целое число, количество пикселей. По умолчанию 4.

Переменная: tool-bar-button-relief

Эта переменная определяет ширину тени для элементов панели инструментов. Значение — целое число, количество пикселей. По умолчанию 1.

Переменная: tool-bar-border

Эта переменная определяет высоту рамки, нарисованной под областью панели инструментов. Целое число задаёт высоту в пикселях. Если значение равно одному из internal-border-width (по умолчанию) или border-width, высота рамки панели инструментов соответствует соответствующему параметру фрейма.

Вы можете определить специальное значение для нажатия элемента панели инструментов с модификаторами Shift, Ctrl, Meta и т. д. Вы делаете это, создавая дополнительные элементы, связанные с исходным элементом через псевдофункциональные клавиши. В частности, дополнительные элементы должны использовать изменённые версии той же псевдофункциональной клавиши, которая используется для именования исходного элемента.

Таким образом, если исходный элемент был определён так:

(define-key global-map [tool-bar shell]
  '(menu-item "Shell" shell
              :image (image :type xpm :file "shell.xpm")))

то вот как вы можете определить нажатие на то же изображение панели инструментов с модификатором Shift:

(define-key global-map [tool-bar S-shell] 'some-command)

См. Функциональные клавиши для получения дополнительной информации о том, как добавлять модификаторы к функциональным клавишам.

Если у вас есть функции, которые изменяют, включён ли элемент панели инструментов или нет, это состояние не обязательно сразу обновляется визуально. Чтобы принудительно пересчитать панель инструментов, вызовите force-mode-line-update (см. Формат строки режима).

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Tool-Bar.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API