Позиции начала и конца окна
Каждое окно содержит маркер, используемый для отслеживания позиции буфера, указывающей, где в буфере должно начинаться отображение. Эта позиция называется позицией display-start окна (или просто началом). Символ после этой позиции отображается в левом верхнем углу окна. Обычно, но не всегда, это начало строки текста.
После переключения окон или буферов, а также в некоторых других случаях, если начало окна находится посредине строки, Emacs корректирует начало окна до начала строки. Это предотвращает определённые операции, оставляющие начало окна в бессмысленной точке внутри строки. Эта функция может мешать тестированию некоторых кодов Lisp, выполняя их с помощью команд режима Lisp, поскольку они вызывают эту корректировку. Чтобы проверить такой код, поместите его в команду и привяжите команду к клавише.
- Функция: window-start &optional window
-
Эта функция возвращает позицию display-start окна window. Если window равно
nil, используется выбранное окно.При создании окна или отображении другого буфера в нём позиция display-start устанавливается в последнюю использованную позицию display-start для того же буфера или в
point-min, если буфер не имеет таковой.Перерисовка обновляет позицию window-start (если вы её не задали явно с момента предыдущей перерисовки) — чтобы убедиться, что курсор отображается на экране. Ничто, кроме перерисовки, не изменяет позицию window-start; если вы перемещаете курсор, не ожидайте, что позиция window-start изменится в ответ до следующей перерисовки.
- Функция: window-group-start &optional window
-
Эта функция похожа на
window-start, за исключением того, что когда window является частью группы окон (см. Группу окон),window-group-startвозвращает позицию начала всей группы. Это условие выполняется, когда локальная переменная буфераwindow-group-start-functionустановлена в функцию. В этом случае,window-group-startвызывает функцию с единственным аргументом window, а затем возвращает её результат.
- Функция: window-end &optional window update
-
Эта функция возвращает позицию, где заканчивается отображение буфера в window. По умолчанию window — выбранное окно.
Простое изменение текста буфера или перемещение курсора не обновляет значение, которое
window-endвозвращает. Значение обновляется только при перерисовке Emacs и завершении перерисовки без прерывания.Если последняя перерисовка window была прервана и не завершена, Emacs не знает позиции конца отображения в этом окне. В этом случае эта функция возвращает
nil.Если update — не
nil,window-endвсегда возвращает актуальное значение конца отображения, основанное на текущем значенииwindow-start. Если ранее сохранённое значение этой позиции всё ещё справедливо,window-endвозвращает это значение; в противном случае вычисляет правильное значение, сканируя текст буфера.Даже если update — не
nil,window-endне пытается прокрутить отображение, если курсор вышел за пределы экрана, как это делает реальная перерисовка. Она не изменяет значениеwindow-start. По сути, она сообщает, где закончится отображаемый текст, если прокрутка не требуется. Обратите внимание, что возвращаемая позиция может быть только частично видна.
- Функция: window-group-end &optional window update
Эта функция похожа на
window-end, за исключением того, что когда window является частью группы окон (см. Группу окон),window-group-endвозвращает позицию конца всей группы. Это условие выполняется, когда локальная переменная буфераwindow-group-end-functionустановлена в функцию. В этом случаеwindow-group-endвызывает функцию с двумя аргументами window и update, а затем возвращает её результат. Аргумент update имеет то же значение, что и вwindow-end.
- Функция: set-window-start window position &optional noforce
-
Эта функция устанавливает позицию display-start окна window в position в буфере window. Возвращает position.
Процедуры отображения настаивают на том, чтобы позиция курсора была видна при отображении буфера. Обычно они выбирают позицию display-start согласно своей внутренней логике (и прокручивают окно при необходимости), чтобы сделать курсор видимым. Однако, если вы задаёте позицию начала с помощью этой функции, используя
nilдля noforce, это означает, что вы хотите начать отображение с position, даже если это поместит курсор за пределами экрана. Если это помещает курсор за пределы экрана, процедуры отображения пытаются переместить курсор к левому краю на средней строке в окне.Например, если курсор находится на позиции 1, а вы устанавливаете начало окна на 37, начало следующей строки, курсор будет выше верхней части окна. Процедуры отображения автоматически перемещают курсор, если он всё ещё равен 1 при перерисовке.
;; Here is what ‘foo’ looks like before executing ;; the
set-window-startexpression.---------- Buffer: foo ---------- ∗This is the contents of buffer foo. 2 3 4 5 6 ---------- Buffer: foo ----------
(set-window-start (selected-window) (save-excursion (goto-char 1) (forward-line 1) (point))) ⇒ 37
;; Here is what ‘foo’ looks like after executing ;; the
set-window-startexpression. ---------- Buffer: foo ---------- 2 3 ∗4 5 6 ---------- Buffer: foo ----------Если попытка сделать курсор видимым (т. е. в полностью видимой строке) терпит неудачу, процедуры отображения игнорируют запрошенную позицию window-start и вычисляют новую позицию. Таким образом, для получения надёжных результатов программы Lisp, вызывающие эту функцию, должны всегда перемещать курсор в пределах окна, отображение которого начинается с position.
Если noforce — не
nil, и position поместит курсор за пределами экрана при следующей перерисовке, то перерисовка вычисляет новую позицию window-start, которая хорошо работает с курсором, и поэтому position не используется.
- Функция: set-window-group-start window position &optional noforce
Эта функция похожа на
set-window-start, за исключением того, что когда window является частью группы окон (см. Группу окон),set-window-group-startустанавливает позицию начала всей группы. Это условие выполняется, когда локальная переменная буфераset-window-group-start-functionустановлена в функцию. В этом случаеset-window-group-startвызывает функцию с тремя аргументами window, position и noforce, а затем возвращает её результат. Аргументы position и noforce в этой функции имеют то же значение, что и вset-window-start.
- Функция: pos-visible-in-window-p &optional position window partially
-
Эта функция возвращает не-
nil, если position находится в диапазоне текста, отображаемого на экране в window. Возвращаетnil, если position прокручено вертикально за пределы области просмотра. Места, частично скрытые, не считаются видимыми, если partially не равноnil. Аргумент position по умолчанию — текущая позиция курсора в window; window по умолчанию — выбранное окно. Если position равноt, это означает проверку первой видимой позиции последней строки на экране в window или позиции конца буфера, в зависимости от того, какая из них появляется первой.Эта функция учитывает только вертикальную прокрутку. Если position находится вне области просмотра только потому, что window был прокручен горизонтально,
pos-visible-in-window-pвозвращает не-nil.Если position видна,
pos-visible-in-window-pвозвращаетt, если partially равноnil; если partially — неnil, а символ, следующий за position, полностью виден, она возвращает список вида(x y), где x и y — координаты в пикселях относительно левого верхнего угла окна; в противном случае возвращает расширенный список вида(x y rtop rbot rowh vpos), где rtop и rbot указывают количество пикселей вне окна вверху и внизу строки в position, rowh указывает видимую высоту этой строки, а vpos указывает вертикальную позицию (номер строки, нумерация с нуля) этой строки.Вот пример:
;; If point is off the screen now, recenter it now. (or (pos-visible-in-window-p (point) (selected-window)) (recenter 0))
- Функция: pos-visible-in-window-group-p &optional position window partially
Эта функция похожа на
pos-visible-in-window-p, за исключением того, что когда window является частью группы окон (см. Группу окон),pos-visible-in-window-group-pпроверяет видимость pos во всей группе, а не только в отдельном window. Это условие выполняется, когда локальная переменная буфераpos-visible-in-window-group-p-functionустановлена в функцию. В этом случаеpos-visible-in-window-group-pвызывает функцию с тремя аргументами position, window и partially, а затем возвращает её результат. Аргументы position и partially имеют то же значение, что и вpos-visible-in-window-p.
- Функция: window-line-height &optional line window
-
Эта функция возвращает высоту текстовой строки line в window. Если line — это одна из
header-lineилиmode-line,window-line-heightвозвращает информацию о соответствующей строке окна. В противном случае line — это номер текстовой строки, начиная с 0. Отрицательное число считает с конца окна. По умолчанию line — текущая строка в window, а window — выбранное окно.Если отображение не обновлено,
window-line-heightвозвращаетnil. В этом случае,pos-visible-in-window-pможет быть использован для получения связанной информации.Если нет строки, соответствующей заданному line,
window-line-heightвозвращаетnil. В противном случае возвращает список(height vpos ypos offbot), где height — высота в пикселях видимой части строки, vpos и ypos — вертикальная позиция в строках и пикселях строки относительно верха первой текстовой строки, а offbot — количество пикселей вне окна внизу текстовой строки. Если есть пиксели вне окна вверху (первой) текстовой строки, ypos отрицательное.
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/Window-Start-and-End.html