Spec-Zone.ru › Elisp

Отслеживание мыши

Иногда полезно отслеживать мышь, что означает отображать что-то, указывающее на положение мыши, и перемещать указатель по мере движения мыши. Для эффективного отслеживания мыши вам нужен способ дождаться, пока мышь фактически сдвинется.

Удобный способ отслеживания мыши — запросить события для отображения движения мыши. Затем вы можете дождаться движения, дождавшись события. Кроме того, вы можете легко обработать любые другие типы событий, которые могут возникнуть. Это полезно, потому что обычно вы не хотите отслеживать мышь вечно — только до тех пор, пока не произойдет другое событие, такое как отпускание кнопки.

Макрос: track-mouse body…

Этот макрос выполняет body, при этом включено генерирование событий движения мыши. Обычно body использует read-event для чтения событий движения и соответствующего изменения отображения. См. События движения для формата событий движения мыши.

Значение track-mouse соответствует последней форме в body. Вы должны спроектировать body так, чтобы он завершался, когда видит событие отпускания кнопки, или любой другой тип события, означающий, что пора остановить отслеживание.

Форма track-mouse заставляет Emacs генерировать события движения мыши, связывая переменную track-mouse с не-nil значением. Если эта переменная имеет специальное значение dragging, она дополнительно указывает движку отображения воздержаться от изменения формы указателя мыши. Это желательно в программах Lisp, которым требуется перетаскивание мыши по большим частям отображения Emacs, что в противном случае может привести к изменению формы указателя мыши в зависимости от части отображения, на которую он наводится (см. Форма указателя). Поэтому программы Lisp, которым нужен указатель мыши, сохраняющий свою исходную форму во время перетаскивания, должны связать track-mouse со значением dragging в начале своего body.

Обычная цель отслеживания движения мыши — указывать на экране последствия нажатия или отпускания кнопки в текущем положении.

Во многих случаях вы можете избежать необходимости отслеживать мышь, используя свойство текста mouse-face (см. Специальные свойства). Это работает на гораздо более низком уровне и выполняется более плавно, чем отслеживание мыши на уровне Lisp.

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/Mouse-Tracking.html

Spec-Zone.ru

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