Панели инструментов
Панель инструментов — это ряд значков, по которым можно щёлкать, в верхней части рамки, сразу под строкой меню. См. Панели инструментов в Руководстве 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, отображаемую, когда указатель мыши находится над элементом. Она отображается так же, как текстовые свойства help-echo (см. Отображение справки).
Кроме того, следует использовать свойство :image; с его помощью указывается изображение для панели инструментов:
:image image-
image — это либо одна спецификация изображения (см. Изображения), либо вектор из четырёх спецификаций изображений. Если используется вектор из четырёх спецификаций, выбирается одна из них в зависимости от обстоятельств:
- элемент 0
Используется, когда элемент доступен и выбран.
- элемент 1
Используется, когда элемент доступен и не выбран.
- элемент 2
Используется, когда элемент недоступен и выбран.
- элемент 3
Используется, когда элемент недоступен и не выбран.
Версии Emacs для GTK+ и NS игнорируют элементы с 1 по 3, поскольку изображения для недоступных и/или невыбранных элементов автоматически вычисляются на основе элемента 0.
Если image — это одна спецификация изображения, Emacs отображает кнопку панели инструментов в недоступном состоянии, применяя к изображению алгоритм обнаружения границ.
Свойство :rtl задаёт альтернативное изображение для языков с письмом справа налево. В настоящее время эту возможность поддерживает только версия Emacs для GTK+.
Некоторые инструментарии отображают на панели инструментов и изображение, и текст. Если нужно принудительно использовать только изображение, задайте свойство :vert-only, не равное nil.
Как и строка меню, панель инструментов может отображать разделители (см. Разделители меню). Однако разделители панели инструментов вертикальные, а не горизонтальные, и поддерживается только один стиль. В карте клавиш панели инструментов они представлены элементами (menu-item "--"); такие свойства, как :visible, для разделителей панели инструментов не поддерживаются. В панелях инструментов GTK+ и Nextstep разделители отображаются средствами самой системы; в остальных случаях они отображаются с помощью изображения вертикальной линии.
Панель инструментов по умолчанию настроена так, что элементы, относящиеся к редактированию, не отображаются в основных режимах, у символа команды которых свойство mode-class имеет значение special (см. Соглашения для основных режимов). Основные режимы могут добавлять элементы в глобальную панель, привязывая [tool-bar
foo] в своей локальной карте. Некоторым основным режимам имеет смысл полностью заменять элементы панели инструментов по умолчанию, поскольку удобно разместить на ней не так много элементов; это легко сделать благодаря тому, что в привязках по умолчанию используется перенаправление через tool-bar-map.
- Переменная: tool-bar-map
-
По умолчанию глобальная карта привязывает
[tool-bar]следующим образом:(keymap-global-set "<tool-bar>" '(menu-item "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))
-
Эта функция упрощает определение элементов панели инструментов, согласованных с существующими привязками строки меню. Привязка command ищется в строке меню карты map (по умолчанию
global-map), а затем изменяется: в неё добавляется спецификация изображения для icon, которое находится так же, как и с помощьюtool-bar-add-item. Полученная привязка помещается вtool-bar-map, поэтому эту функцию следует использовать только для глобальных элементов панели инструментов.map должна содержать соответствующую карту клавиш, привязанную к
[menu-bar]. Остальные аргументы props — это дополнительные элементы списка свойств, добавляемые к спецификации элемента меню.
Эта функция используется для создания неглобальных элементов панели инструментов. Применяйте её так же, как
tool-bar-add-item-from-menu, за исключением того, что in-map задаёт локальную карту, в которой создаётся определение. Аргумент from-map аналогичен аргументу map функцииtool-bar-add-item-from-menu.
Помимо элементов панели инструментов, определённых в tool-bar-map, Emacs также поддерживает отображение дополнительного ряда «вторичных» элементов панели инструментов, задаваемых в карте клавиш secondary-tool-bar-map. Обычно эти элементы отображаются ниже элементов, заданных в tool-bar-map, если панель инструментов расположена вверху рамки, и выше них, если панель расположена внизу (см. Параметры компоновки). Они не отображаются, если панель инструментов расположена слева или справа от рамки.
- Переменная: 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, Control, 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-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Tool-Bar.html