Spec-Zone.ru › Elisp

Прокрутка текста

Прокрутка текста означает перемещение текста вверх или вниз в окне. Она работает за счёт изменения начальной позиции отображения окна. Она также может изменить значение window-point для сохранения позиции на экране (см. Точка окна).

Основные функции прокрутки текста — scroll-up (прокрутка вперед) и scroll-down (прокрутка назад). В этих именах функций «вверх» и «вниз» относятся к направлению движения текстового буфера относительно окна. Представьте, что текст написан на длинной бумажной ленте, а команды прокрутки перемещают ленту вверх и вниз. Таким образом, если вы смотрите на середину буфера и многократно вызываете scroll-down, вы в конечном итоге увидите начало буфера.

К сожалению, это иногда приводит к путанице, потому что некоторые люди склонны мыслить в обратном соответствии: они представляют окно, перемещающееся по тексту, который остаётся на месте, так что команды «вниз» приводят вас к концу буфера. Это согласуется с тем фактом, что такая команда связана с клавишей PageDown на современных клавиатурах.

Функции прокрутки текста (кроме scroll-other-window) имеют непредсказуемые результаты, если текущий буфер не является тем, который отображается в выбранном окне. См. Текущий буфер.

Если окно содержит строку, высота которой превышает высоту окна (например, при наличии большого изображения), функции прокрутки скорректируют вертикальную позицию прокрутки окна, чтобы прокрутить частично видимую строку. Пользователи Lisp могут отключить эту функцию, связав переменную auto-window-vscroll со значением nil (см. Вертикальная прокрутка).

Команда: scroll-up &optional count

Эта функция прокручивает вперёд на count строк в выбранном окне.

Если count отрицательное, прокрутка происходит назад. Если count равно nil (или опущено), расстояние прокрутки составляет next-screen-context-lines строк меньше высоты тела окна.

Если выбранное окно больше не может быть прокручено, эта функция сообщает об ошибке. В противном случае она возвращает nil.

Команда: scroll-down &optional count

Эта функция прокручивает назад на count строк в выбранном окне.

Если count отрицательное, прокрутка происходит вперёд. В остальном она работает так же, как и scroll-up.

Команда: scroll-up-command &optional count

Это работает так же, как scroll-up, за исключением того, что если выбранное окно больше не может быть прокручено, а значение переменной scroll-error-top-bottom равно t, оно пытается переместиться в конец буфера. Если точка уже там, выдаётся ошибка.

Команда: scroll-down-command &optional count

Это работает так же, как scroll-down, за исключением того, что если выбранное окно больше не может быть прокручено, а значение переменной scroll-error-top-bottom равно t, оно пытается переместиться в начало буфера. Если точка уже там, выдаётся ошибка.

Команда: scroll-other-window &optional count

Эта функция прокручивает текст в другом окне вверх на count строк. Отрицательные значения count, или nil, обрабатываются так же, как и в scroll-up.

Вы можете указать, какой буфер прокручивать, установив переменную other-window-scroll-buffer в буфер. Если этот буфер ещё не отображается, scroll-other-window отобразит его в некотором окне.

Когда выбранное окно — минибуфер, следующее окно обычно является самым левым окном, непосредственно расположенным над ним. Вы можете указать другое окно для прокрутки, когда выбран минибуфер, установив переменную minibuffer-scroll-window. Эта переменная не имеет эффекта, когда выбрано любое другое окно. Когда она имеет ненулевое значение и выбран минибуфер, она имеет приоритет над other-window-scroll-buffer. См. Определение minibuffer-scroll-window.

Команда: scroll-other-window-down &optional count

Эта функция прокручивает текст в другом окне вниз на count строк. Отрицательные значения count, или nil, обрабатываются так же, как и в scroll-down. В остальном она работает так же, как и scroll-other-window.

Переменная: other-window-scroll-buffer

Если эта переменная имеет ненулевое значение, она указывает scroll-other-window на то, окно какого буфера нужно прокручивать.

Параметр пользователя: scroll-margin

Этот параметр определяет размер поля прокрутки — минимальное количество строк между точкой и верхней или нижней частью окна. Всякий раз, когда точка оказывается в пределах этого числа строк от верхней или нижней части окна, повторная отрисовка автоматически прокручивает текст (если это возможно), чтобы перенести точку из поля прокрутки ближе к центру окна.

Параметр пользователя: maximum-scroll-margin

Эта переменная ограничивает эффективное значение scroll-margin до доли текущей высоты строки окна. Например, если в текущем окне 20 строк, а maximum-scroll-margin равно 0,1, то поля прокрутки никогда не будут больше 2 строк, независимо от того, насколько большим является scroll-margin.

Само maximum-scroll-margin имеет максимальное значение 0,5, что позволяет устанавливать поля прокрутки достаточно большими, чтобы держать курсор на средней строке окна (или двух средних строках, если в окне чётное количество строк). Если оно установлено в большее значение (или любое значение, кроме числа с плавающей точкой между 0,0 и 0,5), вместо этого будет использовано значение по умолчанию 0,25.

Параметр пользователя: scroll-conservatively

Эта переменная управляет тем, как происходит автоматическая прокрутка, когда точка перемещается за пределы экрана (или попадает в поле прокрутки). Если значение — положительное целое число n, то повторная отрисовка прокручивает текст на максимум n строк в любом направлении, если это вернёт точку в поле зрения. Это поведение называется консервативной прокруткой. В противном случае прокрутка происходит обычным способом, под управлением других переменных, таких как scroll-up-aggressively и scroll-down-aggressively.

Значение по умолчанию равно нулю, что означает, что консервативная прокрутка никогда не происходит.

Параметр пользователя: scroll-down-aggressively

Значение этой переменной должно быть либо nil, либо дробью f между 0 и 1. Если это дробь, она задаёт позицию точки на экране при прокрутке вниз. Точнее, когда окно прокручивается вниз, потому что точка находится над началом окна, новая позиция начала выбирается для размещения точки на f части высоты окна от верхней границы. Чем больше f, тем более агрессивной является прокрутка.

Значение nil эквивалентно 0,5, так как его действие заключается в центрировании точки. Эта переменная автоматически становится локальной для буфера, когда устанавливается любым способом.

Параметр пользователя: scroll-up-aggressively

Аналогично для прокрутки вверх. Значение f задаёт, насколько далеко точка должна быть от нижней части окна; таким образом, как и с scroll-down-aggressively, более высокое значение обеспечивает более агрессивную прокрутку.

Параметр пользователя: scroll-step

Эта переменная является более старой версией scroll-conservatively. Разница заключается в том, что если её значение равно n, это разрешает прокрутку только на ровно n строк, а не на меньшее число. Эта функция не работает с scroll-margin. Значение по умолчанию равно нулю.

Параметр пользователя: scroll-preserve-screen-position

Если этот параметр равен t, при каждом выполнении команды прокрутки, перемещающей точку за пределы окна, Emacs пытается скорректировать положение точки, чтобы сохранить курсор в его старой вертикальной позиции в окне, а не на краю окна.

Если значение не nil и не t, Emacs корректирует положение точки, чтобы сохранить курсор в той же вертикальной позиции, даже если команда прокрутки не переместила точку за пределы окна.

Этот параметр влияет на все команды прокрутки, имеющие свойство символа, отличное от nil scroll-command.

Параметр пользователя: next-screen-context-lines

Значение этой переменной — число строк непрерывности, сохраняемых при прокрутке на весь экран. Например, scroll-up с аргументом nil прокручивает так, что столько строк снизу окна отображается сверху. Значение по умолчанию — 2.

Параметр пользователя: scroll-error-top-bottom

Если этот параметр равен nil (значение по умолчанию), scroll-up-command и scroll-down-command просто сообщают об ошибке, когда больше невозможно прокручивать.

Если значение равно t, эти команды вместо этого перемещают точку в начало или конец буфера (в зависимости от направления прокрутки); они сообщают об ошибке только в том случае, если точка уже находится в этом положении.

END_OF_DOCUMENT_MARKER
Команда: recenter &optional count redisplay

Эта функция прокручивает текст в выбранном окне так, чтобы указанная точка отображалась в заданной вертикальной позиции в окне. Она не перемещает точку относительно текста.

Если count — неотрицательное число, то это помещает строку, содержащую точку, на count строк вниз от верха окна. Если count отрицательное число, то оно считает вверх от нижней части окна, так что -1 соответствует последней используемой строке в окне.

Если count равно nil (или не-nil список), recenter помещает строку, содержащую точку, в середину окна. Если count равно nil и redisplay не-nil, эта функция может перерисовать рамку в соответствии со значением recenter-redisplay. Таким образом, опускание второго аргумента может быть использовано для отмены действия recenter-redisplay не-nil. В интерактивных вызовах для redisplay передаётся не-‘nil’.

Когда recenter вызывается интерактивно, count — это исходный аргумент префикса. Таким образом, ввод C-u в качестве префикса устанавливает count в не-nil список, а ввод C-u 4 устанавливает count в 4, что позиционирует текущую строку на четвёртой строке сверху.

При аргументе ноль, recenter позиционирует текущую строку вверху окна. Команда recenter-top-bottom предоставляет более удобный способ достижения этой цели.

Функция: recenter-window-group &optional count

Эта функция похожа на recenter, за исключением того, что когда выбранное окно является частью группы окон (см. Группа окон), recenter-window-group прокручивает всю группу. Это условие выполняется, когда локальная переменная буфера recenter-window-group-function установлена в функцию. В этом случае recenter-window-group вызывает функцию с аргументом count, а затем возвращает её результат. Аргумент count имеет то же значение, что и в recenter, но относительно всей группы окон.

Пользовательская опция: recenter-redisplay

Если эта переменная не-nil, вызов recenter с аргументом nil count и аргументом не-nil redisplay перерисовывает рамку. Значение по умолчанию — tty, что означает, что рамка перерисовывается только если это рамка tty.

Команда: recenter-top-bottom &optional count

Эта команда, которая является стандартной привязкой для C-l, работает как recenter, за исключением случаев, когда она вызывается без аргументов. В этом случае последовательные вызовы помещают точку в соответствии с циклическим порядком, определённым переменной recenter-positions.

Пользовательская опция: recenter-positions

Эта переменная контролирует поведение recenter-top-bottom при вызове без аргументов. Значение по умолчанию — (middle top bottom), что означает, что последовательные вызовы recenter-top-bottom без аргумента циклически переключаются между позиционированием точки в середине, вверху и внизу окна.

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/Textual-Scrolling.html

Spec-Zone.ru

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