Spec-Zone.ru › Elisp

Горизонтальная прокрутка

Горизонтальная прокрутка означает сдвиг изображения в окне влево или вправо на заданное кратное обычной ширине символа. Каждое окно имеет позицию горизонтальной прокрутки, которая представляет собой число, никогда не меньшее нуля. Оно указывает, насколько сдвинуть содержимое влево. Сдвиг содержимого окна влево обычно приводит к тому, что вся или часть некоторых символов исчезают слева, а вся или часть других символов появляются справа. Обычно значение равно нулю.

Позиция горизонтальной прокрутки измеряется в единицах обычной ширины символа, которая соответствует ширине пробела в шрифте по умолчанию. Таким образом, если значение равно 5, это означает, что содержимое окна прокручивается влево на 5 раз ширину обычного символа. Количество символов, которые фактически исчезают слева, зависит от их ширины и может отличаться от строки к строке.

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

Обычно горизонтальной прокрутки нет; тогда самый левый столбец находится на левом краю окна. В этом состоянии прокрутка вправо бессмысленна, так как слева от края нет данных, которые можно было бы показать; поэтому это запрещено. Прокрутка влево разрешена; она прокручивает первые столбцы текста за край окна и может открыть дополнительные столбцы справа, которые были обрезаны ранее. После того, как окно имеет ненулевое значение левой горизонтальной прокрутки, вы можете прокрутить его обратно вправо, но только до тех пор, пока чистая горизонтальная прокрутка не станет равной нулю. Нет ограничений на то, насколько далеко вы можете прокрутить влево, но в конце концов весь текст исчезнет слева.

Если auto-hscroll-mode установлено, автоматическое переотображение автоматически изменяет горизонтальную прокрутку окна по мере необходимости, чтобы убедиться, что указанная точка всегда видна. Однако вы все равно можете установить значение горизонтальной прокрутки явно. Указанное вами значение служит нижней границей для автоматической прокрутки, то есть автоматическая прокрутка не будет прокручивать окно в столбец меньше, чем указанный.

Значение по умолчанию для auto-hscroll-mode равно t; установка его в current-line активирует вариант автоматической горизонтальной прокрутки, при котором только строка, отображающая курсор, прокручивается горизонтально, чтобы сделать точку видимой, остальная часть окна остается либо непрокрученной, либо с минимальным количеством прокрутки, установленным scroll-left и scroll-right, см. ниже.

Команда: scroll-left &необязательный счет set-minimum

Эта функция прокручивает выбранное окно на count столбцов влево (или вправо, если count отрицательное). По умолчанию для count используется ширина окна минус 2.

Возвращаемое значение — общее количество левой горизонтальной прокрутки, действующей после изменения, — точно так же, как значение, возвращаемое window-hscroll (ниже).

Обратите внимание, что текст в абзацах, основное направление которых справа налево (см. Двунаправленное отображение), перемещается в противоположном направлении: например, он перемещается вправо, когда scroll-left вызывается с положительным значением count.

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

Если set-minimum не nil, новое значение прокрутки становится нижней границей для автоматической прокрутки; то есть автоматическая прокрутка не будет прокручивать окно в столбец меньше, чем значение, возвращаемое этой функцией. Взаимодействующие вызовы передают не-nil для set-minimum.

Команда: scroll-right &необязательный счет set-minimum

Эта функция прокручивает выбранное окно на count столбцов вправо (или влево, если count отрицательное). По умолчанию для count используется ширина окна минус 2. Помимо направления прокрутки, это работает так же, как scroll-left.

Функция: window-hscroll &необязательное окно

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

Возвращаемое значение никогда не является отрицательным. Оно равно нулю, когда в window не выполнялась горизонтальная прокрутка (что обычно и происходит).

(window-hscroll)
     ⇒ 0
(scroll-left 5)
     ⇒ 5
(window-hscroll)
     ⇒ 5
Функция: set-window-hscroll окно столбцы

Эта функция устанавливает горизонтальную прокрутку 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)))))

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

Spec-Zone.ru

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