Прочие системные события
Некоторые другие типы событий обозначают происходящее в системе.
-
text-conversion -
Событие этого типа отправляется после того, как общесистемный метод ввода выполняет правку в одном или нескольких буферах.
К моменту отправки события метод ввода уже мог внести изменения в несколько буферов в различных фреймах. Чтобы определить, какие буферы были изменены и какие правки в них были выполнены, используйте переменную
text-conversion-edits, значение которой устанавливается перед отправкой каждого событияtext-conversion; это список следующего вида:((buffer beg end ephemeral) ...)Здесь ephemeral — буфер, в который были внесены изменения, beg и end — маркеры, установленные в позициях правки на момент её завершения, а ephemeral — это либо строка, содержащая вставленный текст (или текст перед точкой, который был удалён), либо
t, что означает, что правка является временной правкой, выполненной методом ввода, либоnil, что означает, что после точки был удалён текст.Отправляется ли это событие, зависит от значения локальной для буфера переменной
text-conversion-style, которая определяет поведение метода ввода, если он должен вносить изменения в содержимое буфера.Эта переменная может иметь одно из четырёх значений:
nil-
Это означает, что метод ввода будет полностью отключён, а вместо событий преобразования текста будут отправляться события клавиш.
action-
Это означает, что метод ввода будет включён, но при необходимости вставить новую строку он будет отправлять RET.
password-
Это значение во многом соответствует
action, но также запрашивает метод ввода, способный вставлять символы ASCII, и указывает ему не сохранять ввод в местах, откуда его впоследствии могут получить функции метода ввода, не способные обрабатывать конфиденциальную информацию, например подсказки текста. tЭто или любое другое значение означает, что метод ввода будет включён и будет вносить изменения, за которыми следуют события
text-conversion.
Изменения значения этой переменной вступят в силу только при следующем перерисовывании после того, как буфер станет выбранным буфером фрейма. Если нужно немедленно отключить преобразование текста, вызовите вместо этого функцию
set-text-conversion-style. Это может привести к длительной блокировке метода ввода, поэтому использовать функцию следует осторожно.Кроме того, преобразование текста автоматически отключается после того, как цикл команд считывает префиксную клавишу или
read-key-sequence. Это поведение можно отключить, присвоив переменнойdisable-inhibit-text-conversionили связав её с не-nilзначением. -
(delete-frame (frame)) -
Событие этого типа означает, что пользователь дал оконному менеджеру команду удалить определённое окно, которым оказался фрейм Emacs.
Стандартное определение события
delete-frame— удалить frame. -
(iconify-frame (frame)) -
Событие этого типа означает, что пользователь свернул frame в значок с помощью оконного менеджера. Его стандартное определение —
ignore; поскольку фрейм уже свёрнут в значок, Emacs ничего делать не нужно. Этот тип события нужен для того, чтобы при желании можно было отслеживать такие события. -
(make-frame-visible (frame)) -
Событие этого типа означает, что пользователь восстановил frame из значка с помощью оконного менеджера. Его стандартное определение —
ignore; поскольку фрейм уже отображается, Emacs ничего делать не нужно. -
(touch-end (position)) -
Событие этого типа означает, что палец пользователя перестал касаться колеса мыши или сенсорной панели. Элемент position — это список позиции мыши (см. События щелчка), указывающий положение курсора мыши в момент, когда палец перестал касаться колеса мыши.
-
(wheel-up position clicks lines pixel-delta) (wheel-down position clicks lines pixel-delta)-
Эти события генерируются при прокрутке колеса мыши. Элемент position — это список позиции мыши (см. События щелчка), указывающий положение курсора мыши в момент возникновения события.
Элемент clicks, если он присутствует, — это число быстрых последовательных поворотов колеса. См. Повторяющиеся события. Элемент lines, если он присутствует и не равен
nil, — это положительное число экранных строк для прокрутки (вверх, если событие имеет типwheel-up, или вниз, если событие имеет типwheel-down). Элемент pixel-delta, если он присутствует, — это конс-ячейка вида(x . y), где x и y — числа пикселей, на которые следует прокрутить изображение по каждой из осей, то есть пиксельные смещения. Обычно только одно из этих значений отлично от нуля, а другое равно нулю или очень близко к нему; большее значение указывает ось прокрутки окна. Когда переменнаяmwheel-coalesce-scroll-eventsравнаnil, команды прокрутки игнорируют элемент lines, даже если он не равенnil, и вместо него используют данные pixel-delta; в этом случае направление прокрутки определяется знаком пиксельных смещений, а направление (вверх или вниз), заданное типом события, игнорируется.С помощью пиксельных смещений x и y можно определить, насколько на самом деле прокрутилось колесо мыши с точностью до пикселя. Например, эти смещения можно использовать для прокрутки изображения с точностью до пикселя, точно соответствующей повороту колеса мыши пользователем. Такая пиксельная прокрутка возможна только тогда, когда
mwheel-coalesce-scroll-eventsравноnil; как правило, данные pixel-delta не генерируются, если эта переменная не равнаnil.События
wheel-upиwheel-downгенерируются только в некоторых системах. В других системах вместо них используются другие события, напримерmouse-4иmouse-5. Переносимый код должен обрабатывать событияwheel-upиwheel-down, а также события, указанные в переменныхmouse-wheel-up-eventиmouse-wheel-down-event, определённых в mwheel.el. По историческим причинам переменнаяmouse-wheel-up-eventсодержит событие, которое следует обрабатывать так же, какwheel-down, и наоборот.То же относится к горизонтальной прокрутке колеса, которая обычно представлена событиями
wheel-leftиwheel-right, но для которой переносимый код также должен учитывать переменныеmouse-wheel-left-eventиmouse-wheel-right-event, определённые в mwheel.el. Однако некоторые мыши одновременно с этими событиями прокрутки генерируют другие события, которые могут мешать. Обычно это исправляют, отменяя привязки этих событий (например,mouse-6илиmouse-7, но это сильно зависит от оборудования и операционной системы). -
(pinch position dx dy scale angle) -
Событие этого типа генерируется, когда пользователь выполняет жест «сведения-разведения», помещая два пальца на сенсорную панель и двигая их навстречу друг другу или врозь. position — это список позиции мыши (см. События щелчка), указывающий положение указателя мыши в момент возникновения события; dx — изменение горизонтального расстояния между пальцами с момента последнего события в той же последовательности; dy — вертикальное перемещение пальцев с момента последнего события в той же последовательности; scale — отношение текущего расстояния между пальцами к расстоянию в начале последовательности; angle — разница в градусах между направлением линии, соединяющей пальцы в этом событии, и направлением этой линии в последнем событии той же последовательности.
Поскольку события сведения-разведения отправляются только в начале или во время последовательности таких жестов, они не сообщают о жестах, при которых пользователь вращает два пальца на сенсорной панели, не сводя их.
Все аргументы после position — числа с плавающей точкой.
Это событие обычно отправляется в составе последовательности, которая начинается, когда пользователь кладёт два пальца на сенсорную панель, и заканчивается, когда убирает их. В первом событии последовательности значения dx, dy и angle будут равны
0.0; в последующих событиях для этих членов структуры события будут указаны ненулевые значения.Значения dx и dy задаются в условных относительных единицах, в которых
1.0— ширина и высота сенсорной панели соответственно. Обычно их интерпретируют как относительные величины по отношению к размеру объекта под жестом: изображения, окна и т. д. -
(preedit-text arg) -
Это событие отправляется, когда системный метод ввода сообщает Emacs, что нужно отобразить текст, показывающий пользователю, что будет вставлено. Содержимое arg зависит от используемой оконной системы.
В X arg — это строка с текстом, который следует разместить за курсором. Значение может быть
nil, что означает удаление ранее отображённого текста.Во фреймах PGTK (см. Фреймы) arg — это список строк с информацией об их цвете и атрибутах подчёркивания. Он имеет следующий вид:
((string1 (ul . underline-color) (bg . background-color) (fg . foreground-color)) (string2 (ul . underline-color) (bg . background-color) (fg . foreground-color)) ... )Информацию о цвете можно опустить, оставив только текст строк. Значение underline-color может быть равно
t, что означает подчёркнутый текст с цветом подчёркивания по умолчанию, либо может быть строкой с названием цвета подчёркивания.Это специальное событие (см. Специальные события), которое обычно не следует привязывать к какой-либо команде. Получив его, Emacs обычно отображает содержащийся в нём текст в наложении за точкой.
-
(drag-n-drop position files) -
Событие этого типа генерируется, когда в приложении вне Emacs выбирают группу файлов, а затем перетаскивают её на фрейм Emacs.
Элемент position — это список, описывающий позицию события в том же формате, что и для события щелчка мыши (см. События щелчка), а files — список имён перетаскиваемых файлов. Обычно это событие обрабатывают, открывая эти файлы.
В настоящее время событие этого типа генерируется только в некоторых системах.
-
help-echo -
Событие этого типа генерируется, когда указатель мыши перемещается на часть текста буфера, имеющую текстовое свойство
help-echo. Сгенерированное событие имеет следующий вид:(help-echo frame help window object pos)
Точное значение параметров события и способ их использования для отображения текста help-echo описаны в разделе Текстовое свойство help-echo.
-
sigusr1 sigusr2-
Эти события генерируются, когда процесс Emacs получает сигналы
SIGUSR1иSIGUSR2. Они не содержат дополнительных данных, поскольку сигналы не передают дополнительную информацию. Эти события могут быть полезны при отладке (см. Вызов отладчика при ошибке).Чтобы перехватить пользовательский сигнал, привяжите соответствующее событие к интерактивной команде в
special-event-map(см. Управление активными картами клавиш). Команда вызывается без аргументов, а конкретное событие сигнала доступно вlast-input-event(см. Прочие возможности ввода событий). Например:(defun sigusr-handler () (interactive) (message "Caught signal %S" last-input-event)) (keymap-set special-event-map "<sigusr1>" 'sigusr-handler)
Чтобы проверить обработчик сигналов, можно заставить Emacs отправить сигнал самому себе:
(signal-process (emacs-pid) 'sigusr1)
-
(sleep-event state) -
Это событие создаётся, когда устройство, на котором работает Emacs, собирается перейти в спящий режим или только что вышло из него. Значение state будет символом
pre-sleepилиpost-wake.Это реализовано в GNU/Linux, macOS и MS-Windows.
-
language-change -
Событие этого типа генерируется в MS-Windows при смене языка ввода. Обычно это означает, что клавиши клавиатуры будут отправлять в Emacs символы другого языка. Сгенерированное событие имеет следующий вид:
(language-change frame codepage language-id)
Здесь frame — фрейм, который был текущим в момент смены языка ввода; codepage — номер новой кодовой страницы; language-id — числовой идентификатор нового языка ввода. Система кодирования (см. Системы кодирования), соответствующая codepage, — это
cpcodepageилиwindows-codepage. Чтобы преобразовать language-id в строку (например, для использования в различных зависящих от языка функциях, таких какset-language-environment), используйте функциюw32-get-locale-info, например:;; Get the abbreviated language name, such as "ENU" for English (w32-get-locale-info language-id) ;; Get the full English name of the language, ;; such as "English (United States)" (w32-get-locale-info language-id 4097) ;; Get the full localized name of the language (w32-get-locale-info language-id t)
-
end-session Это событие генерируется в MS-Windows, когда операционная система сообщает Emacs, что пользователь завершил интерактивный сеанс или что система завершает работу. Стандартное определение этого события — вызвать команду
kill-emacs(см. Завершение работы Emacs), чтобы корректно завершить работу Emacs; если есть несохранённые изменения, будут созданы файлы автосохранения (см. Автосохранение), которые пользователь сможет использовать после перезапуска сеанса для восстановления несохранённых правок.
Если одно из этих событий поступает в середине последовательности клавиш — то есть после префиксной клавиши, — Emacs меняет порядок событий так, чтобы это событие оказалось до или после последовательности клавиш из нескольких событий, а не внутри неё.
Некоторые из этих специальных событий, например delete-frame, по умолчанию вызывают команды Emacs; другие не привязаны. Если нужно, чтобы специальное событие вызывало команду, это можно настроить с помощью special-event-map. Команда, привязанная к функциональной клавише в этой карте, может проверить полное событие, которое её вызвало, в last-input-event. См. Специальные события.
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/Misc-Events.html