Spec-Zone.ru › Elisp

Координаты и окна

В этом разделе описываются функции, которые сообщают о позициях внутри и относительно окна. Большинство этих функций сообщают о позициях относительно начала координат в родном положении рамки окна (см. Геометрия рамки). Некоторые функции сообщают о позициях относительно начала координат экрана рамки окна. В любом случае, начало координат имеет координаты (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-fringe
right-fringe

Координаты находятся в левой или правой окантовке окна.

left-margin
right-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

Spec-Zone.ru

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