Панели инструментов
Панель инструментов — это строка значков, которые можно нажать, расположенная в верхней части фрейма, сразу под строкой меню. См. Панели инструментов в Руководстве по 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))
-
Эта функция служит для определения элементов панели инструментов, согласованных с существующими привязками строки меню. Привязка 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.
- Переменная: auto-resize-tool-bars
-
Если эта переменная отлична от
nil, панель инструментов автоматически изменяет размер, чтобы отобразить все определённые элементы панели инструментов, но не больше, чем четверть высоты фрейма.Если значение равно
grow-only, панель инструментов автоматически расширяется, но не сжимается автоматически. Чтобы сжать панель инструментов, пользователь должен перерисовать фрейм, введя C-l.Если Emacs скомпилирован с GTK+ или Nextstep, панель инструментов может отображать только одну строку, поэтому эта переменная не оказывает влияния.
Если эта переменная отлична от
nil, элементы панели инструментов отображаются в поднятой форме, когда курсор мыши перемещается по ним.
Эта переменная определяет дополнительный отступ вокруг элементов панели инструментов. Значение — целое число, количество пикселей. По умолчанию 4.
Эта переменная определяет ширину тени для элементов панели инструментов. Значение — целое число, количество пикселей. По умолчанию 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