В этом разделе описываются удобные функции для доступа к данным в
событии кнопки мыши или события движения. Данные событий клавиатуры
можно получить с помощью тех же функций, но элементы данных, которые не
применимы к событиям клавиатуры, равны нулю или nil.
Следующие две функции возвращают список позиции мыши (см. События щелчка), указывающий позицию события мыши.
Возвращает начальную позицию события.
Если событие является щелчком или событием нажатия кнопки, возвращает местоположение события. Если событие является событием перетаскивания, возвращает начальную позицию перетаскивания.
Возвращает конечную позицию события.
Если событие является событием перетаскивания, возвращает позицию, в которой пользователь отпустил кнопку мыши. Если событие является щелчком или событием нажатия кнопки, значением фактически является начальная позиция, которая является единственной позицией, которую имеют такие события.
Эта функция возвращает не nil, если объект является
списком позиции мыши в формате, описанном в События щелчка);
в противном случае возвращает nil.
Эти функции принимают в качестве аргумента список позиции мыши и возвращают различные его части:
Возвращает окно, в котором находится позиция. Если позиция представляет местоположение за пределами фрейма, в котором было инициировано событие, возвращает этот фрейм.
Возвращает область окна, зафиксированную в позиции. Возвращает
nil, когда событие произошло в текстовой области окна;
в противном случае возвращает символ, идентифицирующий область, в
которой произошло событие.
Возвращает позицию в буфере из позиции. Когда событие произошло в текстовой области окна, в области полей или на кайме, это целое число, указывающее позицию в буфере. В противном случае значение не определено.
Возвращает координаты x и y в пикселях из позиции в виде
ячейки cons (x . y). Эти координаты
относительны окну, возвращаемому posn-window.
Этот пример показывает, как преобразовать координаты, относительные к окну в текстовой области окна, в координаты, относительные к фрейму:
(defun frame-relative-coordinates (position)
"Возвращает координаты, относительные к фрейму, из POSITION.
POSITION предположительно находится в текстовой области окна."
(let* ((x-y (posn-x-y position))
(window (posn-window position))
(edges (window-inside-pixel-edges window)))
(cons (+ (car x-y) (car edges))
(+ (cdr x-y) (cadr edges)))))
Эта функция возвращает ячейку cons (col . row),
содержащую вычисленные столбец и строку, соответствующие позиции в
буфере, описываемой позицией. Возвращаемое значение даётся в
единицах ширины символа по умолчанию и высоты строки по умолчанию
(включая интервалы) фрейма, вычисленных из значений x и
y, соответствующих позиции. (Таким образом, если
фактические символы имеют нестандартные размеры, фактические строка
и столбец могут отличаться от этих вычисленных значений.) Если
необязательный аргумент window не равен nil,
используется ширина символа по умолчанию в окне, указанном
позицией, вместо ширины фрейма. (Это имеет значение, если
это окно показывает буфер с нестандартным уровнем масштабирования,
например.)
Обратите внимание, что row отсчитывается от верхней части текстовой области. Если окно, заданное позицией, имеет строку заголовка (см. Строки заголовка окон) или строку вкладок, они не включаются в счёт row.
Возвращает фактические строку и столбец в позиции в виде
ячейки cons (col . row). Значениями
являются фактические номера строки и столбца в окне, заданном
позицией. См. События щелчка для подробностей.
Функция возвращает nil, если позиция не содержит
фактических значений позиции; в этом случае для получения
приблизительных значений можно использовать posn-col-row.
Обратите внимание, что эта функция не учитывает визуальную ширину
отображаемых символов, например количество визуальных столбцов,
занимаемых символом табуляции или изображением. Если вам нужны
координаты в канонических единицах символов, используйте
posn-col-row.
Возвращает строковый объект, описываемый позицией, либо
nil (что означает, что позиция описывает текст
буфера), либо ячейку cons (строка . позиция-в-строке).
Возвращает объект изображения в позиции, либо nil
(если в позиции нет изображения), либо спецификацию
изображения (image …).
Возвращает объект изображения или строки, описываемый позицией,
либо nil (что означает, что позиция описывает текст
буфера), изображение (image …) или ячейку cons
(строка . позиция-в-строке).
Возвращает координаты x и y в пикселях относительно левого верхнего
угла объекта, описываемого позицией, в виде ячейки cons
(dx . dy). Если позиция описывает
текст буфера, возвращает относительные координаты символа текста
буфера, ближайшего к этой позиции.
Возвращает ширину и высоту в пикселях объекта, описываемого
позицией, в виде ячейки cons (ширина . высота).
Если позиция описывает позицию в буфере, возвращает размер
символа в этой позиции.
Возвращает временную метку в позиции. Это время, в которое произошло событие, в миллисекундах. Такая временная метка сообщается относительно произвольного начального времени, которое варьируется в зависимости от используемой оконной системы. Например, в оконной системе X это количество миллисекунд с момента запуска X-сервера.
Эти функции вычисляют список позиции по заданной позиции в буфере или позиции на экране. Вы можете получить доступ к данным в этом списке позиции с помощью функций, описанных выше.
Эта функция возвращает список позиции для позиции pos в window. pos по умолчанию равен точке в window; window по умолчанию равен выбранному окну.
posn-at-point возвращает nil, если pos не видна в
window.
Эта функция возвращает информацию о позиции, соответствующую
пиксельным координатам x и y в указанном фрейме или
окне frame-or-window, которое по умолчанию равно выбранному
окну. Координаты x и y относительны
текстовой области выбранного окна.
Если whole не равен nil, координата x относительна
всей области окна, включая полосы прокрутки, поля и кайму.
Если эта переменная не равна nil, posn-point из списка
позиции мыши будет установлен в позицию глифа, левый край
которого ближе всего к щелчку мыши, а не в позицию глифа,
находящегося непосредственно под указателем мыши. Например, если
posn-at-x-y вызван с x, установленным в 9, что
находится внутри символа шириной 10, отображаемого в столбце 0,
точка, сохранённая в списке позиции мыши, будет после этого
символа, а не перед ним.