Текстовая прокрутка означает перемещение текста вверх или вниз в пределах окна. Она работает путем изменения позиции начала отображения окна. Она также может изменять значение window-point, чтобы удерживать точку на экране (см. Окна и точка).
Основные функции текстовой прокрутки: scroll-up (которая прокручивает вперед) и scroll-down (которая прокручивает назад). В названиях этих функций «вверх» и «вниз» относятся к направлению движения текста буфера относительно окна. Представьте, что текст написан на длинном рулоне бумаги, а команды прокрутки перемещают бумагу вверх и вниз. Таким образом, если вы смотрите на середину буфера и многократно вызываете scroll-down, вы в итоге увидите начало буфера.
К сожалению, это иногда вызывает путаницу, поскольку некоторые люди склонны мыслить в противоположной конвенции: они представляют, что окно перемещается над неподвижным текстом, так что команды «вниз» приводят вас к концу буфера. Эта конвенция согласуется с тем фактом, что такая команда привязана к клавише PageDown на современных клавиатурах.
Функции текстовой прокрутки (кроме scroll-other-window) дают непредсказуемые результаты, если текущий буфер не отображается в выбранном окне. См. Текущий буфер.
Если окно содержит строку, выше по высоте, чем само окно (например, при наличии большого изображения), функции прокрутки скорректируют вертикальную позицию прокрутки окна для прокрутки частично видимой строки. Вызывающие стороны из Lisp могут отключить эту возможность, привязав переменную auto-window-vscroll к nil (см. Дробная вертикальная прокрутка).
Эта функция прокручивает вперед на count строк в выбранном окне.
Если count отрицателен, она прокручивает назад. Если count равен nil (или опущен), расстояние прокрутки составляет next-screen-context-lines строк меньше высоты тела окна.
Если выбранное окно невозможно прокрутить дальше, эта функция сигнализирует об ошибке. В противном случае она возвращает nil.
Эта функция прокручивает назад на count строк в выбранном окне.
Если count отрицателен, она прокручивает вперед. В остальных аспектах она ведет себя так же, как scroll-up.
Ведет себя как scroll-up, за исключением того, что если выбранное окно невозможно прокрутить дальше и значение переменной scroll-error-top-bottom равно t, она пытается переместиться в конец буфера. Если точка уже там, она сигнализирует об ошибке.
Ведет себя как scroll-down, за исключением того, что если выбранное окно невозможно прокрутить дальше и значение переменной scroll-error-top-bottom равно t, она пытается переместиться в начало буфера. Если точка уже там, она сигнализирует об ошибке.
Эта функция прокручивает текст в другом окне вверх на count строк. Отрицательные значения count или nil обрабатываются так же, как в scroll-up.
Вы можете указать, какой буфер прокручивать, установив переменную other-window-scroll-buffer в буфер. Если этот буфер еще не отображается, scroll-other-window отображает его в каком-либо окне.
Когда выбрано окно минибуфера, следующим окном обычно является крайнее левое окно непосредственно над ним. Вы можете указать другое окно для прокрутки, когда выбран минибуфер, установив переменную minibuffer-scroll-window. Эта переменная не оказывает влияния, когда выбрано любое другое окно. Если она не равна nil и выбран минибуфер, она имеет приоритет над other-window-scroll-buffer. См. Определение minibuffer-scroll-window.
Эта функция прокручивает текст в другом окне вниз на count строк. Отрицательные значения count или nil обрабатываются так же, как в scroll-down. В остальных аспектах она ведет себя так же, как scroll-other-window.
Если эта переменная не равна nil, она указывает scroll-other-window, окно какого буфера прокручивать.
Эта опция задает размер поля прокрутки — минимальное количество строк между точкой и верхом или низом окна. Всякий раз, когда точка оказывается в пределах этого количества строк от верха или низа окна, перерисовка автоматически прокручивает текст (если возможно), чтобы переместить точку из поля, ближе к центру окна.
Эта переменная ограничивает эффективное значение scroll-margin долей от высоты строки текущего окна. Например, если текущее окно имеет 20 строк, а maximum-scroll-margin равен 0.1, то поля прокрутки никогда не будут больше 2 строк, независимо от того, насколько большим установлен scroll-margin.
Само значение maximum-scroll-margin имеет максимум 0.5, что позволяет устанавливать большие поля, чтобы удерживать курсор на средней строке окна (или двух средних строках, если в окне четное число строк). Если установить большее значение (или любое значение, не являющееся числом с плавающей запятой от 0.0 до 0.5), вместо него будет использоваться значение по умолчанию 0.25.
Эта переменная управляет тем, как выполняется автоматическая прокрутка, когда точка выходит за пределы экрана (или попадает в поле прокрутки). Если значение — положительное целое число n, то перерисовка прокручивает текст до n строк в любом направлении, если это позволит вернуть точку в надлежащую видимость. Такое поведение называется консервативной прокруткой. В противном случае прокрутка выполняется обычным способом под управлением других переменных, таких как scroll-up-aggressively и scroll-down-aggressively.
Значение по умолчанию — ноль, что означает, что консервативная прокрутка никогда не выполняется.
Значение этой переменной должно быть либо nil, либо дробью f от 0 до 1. Если это дробь, она определяет, где на экране размещать точку при прокрутке вниз. Точнее, когда окно прокручивается вниз, потому что точка находится выше начала окна, новая начальная позиция выбирается так, чтобы разместить точку на f части высоты окна от верха. Чем больше f, тем агрессивнее прокрутка.
Значение nil эквивалентно 0.5, поскольку его эффект — центрирование точки. Эта переменная автоматически становится локальной для буфера при любом ее установке.
Аналогично для прокрутки вверх. Значение f определяет, как далеко от низа окна должна размещаться точка; таким образом, как и в случае с scroll-down-aggressively, большее значение означает более агрессивную прокрутку.
Эта переменная является более старой версией scroll-conservatively. Разница в том, что если ее значение равно n, это разрешает прокрутку ровно на n строк, но не на меньшее количество. Эта возможность не работает с scroll-margin. Значение по умолчанию — ноль.
Если эта опция равна t, то всякий раз, когда команда прокрутки перемещает точку за пределы окна, Emacs пытается скорректировать точку, чтобы сохранить курсор на его старой вертикальной позиции в окне, а не у края окна.
Если значение не равно nil и не равно t, Emacs корректирует точку для сохранения курсора на той же вертикальной позиции, даже если команда прокрутки не переместила точку за пределы окна.
Эта опция влияет на все команды прокрутки, имеющие не-nil свойство символа scroll-command.
Значение этой переменной — количество строк контекста, сохраняемых при прокрутке на полные экраны. Например, scroll-up с аргументом nil прокручивает так, что это количество строк внизу окна появляется вместо него вверху. Значение по умолчанию — 2.
Если эта опция равна nil (по умолчанию), scroll-up-command и scroll-down-command просто сигнализируют об ошибке, когда дальнейшая прокрутка невозможна.
Если значение равно t, эти команды вместо этого перемещают точку в начало или конец буфера (в зависимости от направления прокрутки); только если точка уже находится на этой позиции, они сигнализируют об ошибке.
Эта функция прокручивает текст в выбранном окне так, чтобы точка отображалась в заданной вертикальной позиции внутри окна. Она не перемещает точку относительно текста.
Если count — неотрицательное число, это помещает строку, содержащую точку, на count строк ниже верха окна. Если count — отрицательное число, то отсчет ведется снизу окна, так что −1 соответствует последней используемой строке в окне.
Если count равен nil (или не-nil списку), recenter помещает строку с точкой в середину окна. Если count равен nil, а redisplay не равен nil, эта функция может перерисовать кадр в соответствии со значением recenter-redisplay. Таким образом, опускание второго аргумента можно использовать для отмены эффекта не-nil значения recenter-redisplay. Интерактивные вызовы передают не-nil для redisplay.
При интерактивном вызове recenter, count — это сырой префиксный аргумент. Таким образом, набор C-u в качестве префикса устанавливает count в не-nil список, а набор C-u 4 устанавливает count в 4, что помещает текущую строку на четыре строки от верха.
С аргументом ноль recenter помещает текущую строку в верхнюю часть окна. Команда recenter-top-bottom предлагает более удобный способ достижения этого.
Эта функция подобна recenter, за исключением того, что когда выбранное окно является частью группы окон (см. Группа окон), recenter-window-group прокручивает всю группу. Это условие выполняется, когда локальная для буфера переменная recenter-window-group-function установлена в функцию. В этом случае recenter-window-group вызывает эту функцию с аргументом count и возвращает ее результат. Аргумент count имеет тот же смысл, что и в recenter, но применительно ко всей группе окон.
Если эта переменная не равна nil, вызов recenter с аргументом count, равным nil, и аргументом redisplay, не равным nil, перерисовывает кадр. Значение по умолчанию — tty, что означает перерисовку кадра, только если он является tty-кадром.
Эта команда, которая является привязкой по умолчанию для C-l, действует как recenter, за исключением случая вызова без аргумента. В этом случае последовательные вызовы размещают точку в соответствии с порядком цикла, определенным переменной recenter-positions.
Эта переменная управляет поведением recenter-top-bottom при вызове без аргумента. Значение по умолчанию — (middle top bottom), что означает, что последовательные вызовы recenter-top-bottom без аргумента циклически переключаются между размещением точки в середине, верху и низу окна.