Координаты и окна
В этом разделе описываются функции, которые сообщают о позициях внутри и относительно окна. Большинство этих функций сообщают о позициях относительно начала координат в родном положении рамки окна (см. Геометрия рамки). Некоторые функции сообщают о позициях относительно начала координат экрана рамки окна. В любом случае, начало координат имеет координаты (0, 0), а координаты X и Y увеличиваются соответственно вправо и вниз.
Для следующих функций координаты X и Y сообщаются в целых единицах символов, т. е. в количестве строк и столбцов соответственно. На графическом дисплее каждая «строка» и «столбец» соответствует высоте и ширине символа по умолчанию, заданного шрифтом по умолчанию рамки (см. Шрифт рамки).
- Функция: window-edges &optional window body absolute pixelwise
-
Эта функция возвращает список координат границ window. Если window опущен или
nil, по умолчанию используется выделенное окно.Значение возврата имеет вид
(left top right bottom). Эти элементы списка соответственно представляют координату X самого левого столбца, занятого окном, координату Y самой верхней строки, координату X на один столбец правее правого столбца и координату Y на одну строку ниже нижней строки.Обратите внимание, что это фактические внешние границы окна, включая любые его украшения. На текстовом терминале, если у окна есть сосед справа, его правая граница включает разделительную линию между окном и его соседом.
Если необязательный аргумент body
nil, это означает возврат границ, соответствующих общему размеру window. body не-nilозначает возврат границ тела window. Если body не-nil, window должен указывать на активное окно.Если необязательный аргумент absolute
nil, это означает возврат границ относительно родного положения рамки window. absolute не-nilозначает возврат координат относительно начала координат (0, 0) экрана window. На системах без графики этот аргумент не оказывает влияния.Если необязательный аргумент pixelwise
nil, это означает возврат координат в терминах ширины и высоты символа по умолчанию рамки window (см. Шрифт рамки), округленных при необходимости. pixelwise не-nilозначает возврат координат в пикселях. Обратите внимание, что пиксель, заданный right и bottom, находится непосредственно за пределами этих границ. Если absolute не-nil, pixelwise неявно тоже не-nil.
- Функция: window-body-edges &optional window
Эта функция возвращает границы тела window (см. Размеры окна). Вызов
(window-body-edges window)эквивалентен вызову(window-edges window t), см. выше.
Следующие функции могут быть использованы для связи набора координат, относящихся к рамке, с окном:
- Функция: window-at x y &optional frame
-
Эта функция возвращает активное окно в координатах x и y, заданных в размерах символов по умолчанию (см. Шрифт рамки) относительно родного положения frame (см. Геометрия рамки).
Если в этой позиции нет окна, возвращаемое значение
nil. Если frame опущен илиnil, по умолчанию используется выделенная рамка.
- Функция: coordinates-in-window-p coordinates window
-
Эта функция проверяет, занимает ли окно window координаты coordinates относительно рамки, и если да, то какую часть окна. window должно быть активным окном.
coordinates должен быть ячейкой списка вида
(x . y), где x и y заданы в размерах символов по умолчанию (см. Шрифт рамки) относительно родного положения рамки window (см. Геометрия рамки).Если в указанной позиции нет окна, возвращаемое значение
nil. В противном случае возвращаемое значение — одно из следующих:(relx . rely)-
Координаты находятся внутри window. Числа relx и rely — эквивалентные координаты, относящиеся к окну, для указанной позиции, отсчитываемые от 0 в верхнем левом углу окна.
mode-line-
Координаты находятся в строке режима окна.
header-line-
Координаты находятся в строке заголовка окна.
tab-line-
Координаты находятся в строке вкладки окна.
right-divider-
Координаты находятся в разделителе, отделяющем window от окна справа.
bottom-divider-
Координаты находятся в разделителе, отделяющем window от окна снизу.
vertical-line-
Координаты находятся в вертикальной линии между window и его соседом справа. Это значение встречается только в том случае, если у окна нет полосы прокрутки; позиции в полосе прокрутки для этих целей считаются расположенными вне окна.
left-fringeright-fringe-
Координаты находятся в левой или правой окантовке окна.
left-marginright-margin-
Координаты находятся в левом или правом отступе окна.
nilКоординаты не находятся ни в какой части window.
Функция
coordinates-in-window-pне требует рамки в качестве аргумента, поскольку всегда использует рамку, к которой относится window.
Следующие функции возвращают позиции окна в пикселях, а не в единицах символов. Хотя они в основном полезны на графических дисплеях, их также можно вызывать на текстовых терминалах, где область экрана каждого текстового символа принимается за один пиксель.
- Функция: window-pixel-edges &optional window
Эта функция возвращает список координат пикселей границ window. Вызов
(window-pixel-edges window)эквивалентен вызову(window-edges window nil nil t), см. выше.
- Функция: window-body-pixel-edges &optional window
Эта функция возвращает пиксельные границы тела window. Вызов
(window-body-pixel-edges window)эквивалентен вызову(window-edges window t nil t), см. выше.
Следующие функции возвращают позиции окна в пикселях относительно начала координат экрана, а не рамки:
- Функция: window-absolute-pixel-edges &optional window
Эта функция возвращает координаты пикселей window относительно начала координат (0, 0) экрана рамки window. Вызов
(window-absolute-pixel-edges)эквивалентен вызову(window-edges window nil t t), см. выше.
- Функция: window-absolute-body-pixel-edges &optional window
-
Эта функция возвращает координаты пикселей тела window относительно начала координат (0, 0) экрана рамки window. Вызов
(window-absolute-body-pixel-edges window)эквивалентен вызову(window-edges window t t t), см. выше.В сочетании с
set-mouse-absolute-pixel-position, эта функция может быть использована для перемещения курсора мыши в произвольную позицию буфера, видимую в некотором окне:(let ((edges (window-absolute-body-pixel-edges)) (position (pos-visible-in-window-p nil nil t))) (set-mouse-absolute-pixel-position (+ (nth 0 edges) (nth 0 position)) (+ (nth 1 edges) (nth 1 position))))На графическом терминале эта форма «перемещает» курсор мыши в верхний левый угол глифа в точке выделенного окна. Полученную таким образом позицию также можно использовать для отображения всплывающего окна в этой точке.
Следующая функция возвращает экранные координаты позиции буфера, видимой в окне:
- Функция: window-absolute-pixel-position &optional position window
-
Если позиция буфера position видна в окне window, эта функция возвращает экранные координаты верхнего левого угла глифа в позиции position. Возвращаемое значение — пара координат X и Y этого угла относительно начала координат (0, 0) экрана window. Она возвращает
nilесли position не видна в window.window должно быть активным окном и по умолчанию является выделенным окном. position по умолчанию имеет значение
window-pointдля window.Это означает, что для перемещения курсора мыши в позицию точки в выделенном окне достаточно написать:
(let ((position (window-absolute-pixel-position))) (set-mouse-absolute-pixel-position (car position) (cdr position)))
Следующая функция возвращает наибольший прямоугольник, который можно вписать в окно без наложения на текст, отображенный в этом окне.
- Функция: window-largest-empty-rectangle &optional window count min-width min-height positions left
-
Эта функция вычисляет размеры самого большого пустого прямоугольника, который можно вписать в заданную текстовую область окна window. window должен быть активным окном, по умолчанию используется выделенное окно.
Результат — тройка значений: ширина и координаты начала и конца по оси y самого большого прямоугольника, который можно вписать в пустое место (место, где нет текста) текстовой области окна window. Координаты x не возвращаются функцией — предполагается, что любой такой прямоугольник заканчивается на правой границе текстовой области окна window. Если пустого места не найдено, возвращается
nil.Необязательный аргумент count, если он не
nil, задаёт максимальное количество возвращаемых прямоугольников. Это означает, что результат — список троек, описывающих прямоугольники, причём самый большой прямоугольник указан первым. count может также быть списком, где голова списка указывает количество прямоугольников, а хвост, если он неnil, означает, что все возвращаемые прямоугольники должны быть непересекающимися.Необязательные аргументы min-width и min-height, если они не
nil, задают минимальную ширину и высоту возвращаемого прямоугольника.Необязательный аргумент positions, если он не
nil, является списком, где голова списка указывает верхнюю, а хвост — нижнюю пиксельную позицию, которую должен покрывать любой возвращаемый прямоугольник. Эти позиции измеряются от начала текстовой области окна window.Необязательный аргумент left, если он не
nil, означает возвращение значений, подходящих для буферов с отображением текста справа налево. В этом случае любой возвращаемый прямоугольник предполагается начинающимся на левой границе текстовой области окна window.Обратите внимание, что для получения размеров каждой строки матрицы глифов окна window функция должна использовать
window-lines-pixel-dimensions(см. Размер отображаемого текста). Поэтому функция также может вернутьnil, если текущая матрица глифов окна window не обновлена.
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/Coordinates-and-Windows.html