Прокрутка текста
Прокрутка текста означает перемещение текста вверх или вниз в окне. Она работает за счёт изменения начальной позиции отображения окна. Она также может изменить значение 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 корректирует положение точки, чтобы сохранить курсор в той же вертикальной позиции, даже если команда прокрутки не переместила точку за пределы окна.Этот параметр влияет на все команды прокрутки, имеющие свойство символа, отличное от
nilscroll-command.
- Параметр пользователя: next-screen-context-lines
Значение этой переменной — число строк непрерывности, сохраняемых при прокрутке на весь экран. Например,
scroll-upс аргументомnilпрокручивает так, что столько строк снизу окна отображается сверху. Значение по умолчанию —2.
- Параметр пользователя: scroll-error-top-bottom
-
Если этот параметр равен
nil(значение по умолчанию),scroll-up-commandиscroll-down-commandпросто сообщают об ошибке, когда больше невозможно прокручивать.Если значение равно
t, эти команды вместо этого перемещают точку в начало или конец буфера (в зависимости от направления прокрутки); они сообщают об ошибке только в том случае, если точка уже находится в этом положении.
- Команда: 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с аргументомnilcount и аргументом не-nilredisplay перерисовывает рамку. Значение по умолчанию —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