Горизонтальная прокрутка означает смещение изображения в окне влево или вправо на заданное число, кратное нормальной ширине символа. Каждое окно имеет позицию горизонтальной прокрутки, которая является числом, не меньшим нуля. Она определяет, насколько далеко сдвигать содержимое влево. Сдвиг содержимого окна влево обычно приводит к тому, что все или часть некоторых символов исчезают слева, а все или часть некоторых других символов появляются справа. Обычное значение равно нулю.
Позиция горизонтальной прокрутки измеряется в единицах нормальной ширины символа, которая равна ширине пробела в шрифте по умолчанию. Таким образом, если значение равно 5, это означает, что содержимое окна прокручено влево на 5 нормальных ширин символа. Сколько символов на самом деле исчезает слева, зависит от их ширины и может варьироваться от строки к строке.
Поскольку мы читаем слева направо во внутреннем цикле и сверху вниз во внешнем цикле, эффект горизонтальной прокрутки не похож на эффект текстовой или вертикальной прокрутки. Текстовая прокрутка включает выбор части текста для отображения, а вертикальная прокрутка перемещает содержимое окна непрерывно; но горизонтальная прокрутка приводит к тому, что часть каждой строки уходит за пределы экрана.
Обычно горизонтальная прокрутка не действует; тогда крайний левый столбец находится у левого края окна. В этом состоянии прокрутка вправо бессмысленна, так как слева от края нет данных, которые можно было бы открыть; поэтому она не допускается. Прокрутка влево допускается; она прокручивает первые столбцы текста за край окна и может открыть дополнительные столбцы справа, которые ранее были обрезаны. Как только окно получило ненулевую величину левой горизонтальной прокрутки, вы можете прокрутить его обратно вправо, но только настолько, чтобы свести чистую горизонтальную прокрутку к нулю. Нет ограничения на то, как далеко влево можно прокручивать, но в конце концов весь текст исчезнет за левым краем.
Если установлен auto-hscroll-mode, перерисовка автоматически изменяет горизонтальную прокрутку окна по мере необходимости, чтобы точка всегда была видима. Однако вы всё равно можете установить значение горизонтальной прокрутки явно. Заданное вами значение служит нижней границей для автоматической прокрутки, то есть автоматическая прокрутка не будет прокручивать окно до столбца меньше указанного.
Значение по умолчанию для auto-hscroll-mode — t; установка его в current-line активирует вариант автоматической горизонтальной прокрутки, при котором только строка, показывающая курсор, прокручивается горизонтально, чтобы сделать точку видимой, а остальная часть окна остаётся либо без прокрутки, либо с минимальной величиной прокрутки, заданной scroll-left и scroll-right, см. ниже.
Эта функция прокручивает выбранное окно на count столбцов влево (или вправо, если count отрицателен). Значение по умолчанию для count — ширина окна минус 2.
Возвращаемое значение — это общая величина левой горизонтальной прокрутки, действующая после изменения, — точно так же, как значение, возвращаемое window-hscroll (ниже).
Обратите внимание, что текст в абзацах, направление чтения которых справа налево (см. Двунаправленный вывод), движется в противоположном направлении: например, он движется вправо, когда scroll-left вызывается с положительным значением count.
Как только вы прокрутите окно максимально вправо, до его нормального положения, где общая левая прокрутка равна нулю, попытки прокрутки дальше вправо не дадут эффекта.
Если set-minimum не равен nil, новая величина прокрутки становится нижней границей для автоматической прокрутки; то есть автоматическая прокрутка не будет прокручивать окно до столбца меньше значения, возвращаемого этой функцией. Интерактивные вызовы передают не nil для set-minimum.
Эта функция прокручивает выбранное окно на count столбцов вправо (или влево, если count отрицателен). Значение по умолчанию для count — ширина окна минус 2. За исключением направления прокрутки, это работает так же, как scroll-left.
Эта функция возвращает общую величину левой горизонтальной прокрутки окна window — число столбцов, на которое текст в window прокручен влево за левое поле. (В абзацах справа налево значение вместо этого является общей величиной правой прокрутки.) Значение по умолчанию для window — выбранное окно.
Возвращаемое значение никогда не бывает отрицательным. Оно равно нулю, когда в window не выполнялась горизонтальная прокрутка (что обычно и имеет место).
(window-hscroll)
⇒ 0
(scroll-left 5)
⇒ 5
(window-hscroll)
⇒ 5
Эта функция устанавливает горизонтальную прокрутку окна window. Значение columns определяет величину прокрутки в столбцах от левого поля (правого поля в абзацах справа налево). Аргумент columns должен быть нулём или положительным числом; если это не так, он принимается за ноль. Дробные значения columns в настоящее время не поддерживаются.
Обратите внимание, что set-window-hscroll может показаться неработающим, если вы проверяете его, вычисляя вызов с помощью M-: простым способом. Происходит следующее: функция устанавливает значение горизонтальной прокрутки и возвращает управление, но затем перерисовка корректирует горизонтальную прокрутку, чтобы сделать точку видимой, и это переопределяет действие функции. Вы можете наблюдать эффект функции, если вызвать её, когда точка находится достаточно далеко от левого поля, чтобы оставаться видимой.
Возвращаемое значение равно columns.
(set-window-hscroll (selected-window) 10)
⇒ 10
Вот как можно определить, находится ли заданная позиция position за пределами экрана из-за горизонтальной прокрутки:
(defun hscroll-on-screen (window position)
(save-excursion
(goto-char position)
(and
(>= (- (current-column) (window-hscroll window)) 0)
(< (- (current-column) (window-hscroll window))
(window-width window)))))