Управление изображением

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

Прокрутка

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

Прокрутка означает передвижение текста вверх или вниз в окне так, что становятся видимыми различные его части. Прокрутка вперёд означает, что текст двигается вверх, а новый текст появляется снизу. Прокрутка назад двигает текст вниз, а новый текст появляется сверху.

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

C-l
Очистить экран и восстановить изображение, сдвигая по вертикали выбранное окно к центральной точке в пределах окна (recenter).
C-v
NEXT
Прокрутить вперёд (на одно окно или на определённое число строк) (scroll-up).
M-v
PRIOR
Прокрутить назад (scroll-down).
арг C-l
Прокрутить таким образом, что точка оказывается на строке арг (recenter).
C-M-l
Прокрутить эвристически, чтобы вывести на экран полезную информацию (reposition-window).

Основной командой прокрутки является C-l (recenter) без аргумента. Она полностью очищает экран и восстанавливает изображение во всех окнах. Кроме того, она прокручивает выбранное окно таким образом, что точка располагается посередине от начала окна.

Команды прокрутки C-v и M-v позволяют вам двигать весь текст в окне вверх или вниз на несколько строк. C-v (scroll-up) с аргументом показывает вам заданное количество строк, находящихся за нижней границей окна, сдвигая текст и точку вверх вместе, как C-l. C-v с отрицательным аргументом показывает вам больше строк, находящихся за верхней границей окна. M-v (scroll-down) подобна C-v, но двигает в обратном направлении. Функциональные клавиши NEXT и PRIOR эквивалентны C-v и M-v.

Имена команд прокрутки основаны на направлении, в котором движется текст в окне. Таким образом, команда прокрутки вперёд называется scroll-up, потому что она перемещает текст вверх по экрану.

Чтобы прочитать буфер по целому окну, используйте C-v без аргумента. Эта команда берёт последние две строки, находящиеся внизу окна, и ставит их в начало, и за ними далее следует почти все окно строк, невидимых ранее. Если точка находилась в тексте, ушедшем за верхний край окна, то она передвигается в новую вершину окна. M-v без аргумента двигает текст в обратном направлении с аналогичным перекрыванием. Количество перекрывающихся строк при C-v или M-v управляется переменной next-screen-context-line, по умолчанию оно равно двум.

Некоторым пользователям нравится, когда команды прокрутки всего окна сохраняют точку на одной строке экрана. Чтобы включить такое поведение, установите переменную scroll-preserve-screen-position не равной nil. Такой режим удобен для просмотра файлов путем прокрутки по целому экрану; если вы вернетесь на экран, с которого начали, точка вернется на начальную строку. Однако, этот режим неудобен, когда вы перемещаетесь на следующий экран, чтобы передвинуть туда точку.

Другой способ выполнить прокрутку -- использовать команду C-l с числовым аргументом. C-l с заданным аргументом не очищает экран, она только прокручивает выбранное окно. С положительным аргументом n она перемещает текст так, чтобы установить точку на n строк вниз от вершины. Аргумент, равный нулю, устанавливает точку на самую верхнюю строку. Точка не двигается по отношению к тексту; скорее, текст и точка двигаются на экране жёстко связанные вместе. C-l с отрицательным аргументом устанавливает точку на заданное число строк выше от конца окна. Например, C-u - 1 C-l устанавливает точку на нижней строке, а C-u - 5 C-l устанавливает её на пять строк выше конца окна. Просто C-u в качестве аргумента в C-u C-l прокручивает точку к центру экрана.

Команда C-M-l (reposition-window) прокручивает текущее окно эвристически, так, чтобы вывести на экран полезную информацию. Например, в файле с программой на Лиспе эта команда пытается разместить на экране все текущее определение функции, если это возможно.

Прокрутка происходит автоматически, если во время просмотра текста точка ушла из видимой его части. Обычно автоматическая прокрутка центрирует точку в окне по вертикали. Однако, если вы установите переменную scroll-conservatively равной маленькому числу n, тогда если вы сдвинете точку за экран лишь немного -- меньше, чем на n строк, -- Emacs прокрутит текст ровно на столько, чтобы вернуть точку на экран. По умолчанию значение scroll-conservatively равно нулю.

Переменная scroll-margin определяет, насколько близко может подойти точка к вершине или к низу окна. Её значение -- это число экранных строк; если точка подходит на заданное число строк к вершине или к низу окна, Emacs заново центрирует это окно. По умолчанию scroll-margin равна 0.

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

Горизонтальная прокрутка -- это сдвиг всех строк в окне в сторону, так что некоторый текст около левого края становится не виден совсем.

C-x <
Прокручивает текст текущего окна влево (scroll-left).
C-x >
Прокручивает вправо (scroll-right).

Когда окно прокручивается по горизонтали, строки текста становятся усеченными, а не продолженными. (смотрите раздел Строки продолжения); знак `$' появляется в первом столбце, если есть текст, усеченный слева, и в последнем столбце, если существует текст, усеченный справа.

Команда C-x < (scroll-left) с аргументом n прокручивает выбранное окно влево на n столбцов. Она перемещает часть начала каждой строки за левый край окна. Без аргумента, она прокручивает почти на полную ширину окна (без двух столбцов, если быть точным).

C-x > (scroll-right) прокручивает аналогично, но только вправо. Окно не может быть прокручено дальше вправо, если оно отображено нормально (каждая строка начинается с левого края окна). Попытка сделать это не будет иметь результата. Это значит, что вы не обязаны точно вычислять аргумент для C-x >; любое достаточное большое число восстановит нормальное изображение.

Вы можете потребовать автоматической горизонтальной прокрутки, включив режим Hscroll. Когда этот режим задействован, Emacs горизонтально прокручивает окно всякий раз, когда это необходимо для сохранения точки видимой и расположенной не слишком далеко от левого или правого края. Команда для включения и выключения этого режима -- M-x hscroll-mode.

Режим Follow

Режим Follow -- это второстепенный режим, который делает так, что два окна, показывающие один и тот же буфер, прокручиваются как одно большое "виртуальное окно". Чтобы использовать режим Follow, перейдите во фрейм с одним окном, разбейте его на два примыкающих окна с помощью C-x 3 и затем напечатайте M-x follow-mode. Теперь вы можете редактировать буфер в любом из двух окон или прокручивать любое из них; второе окно будет следовать изменениям.

Чтобы выключить режим Follow, напечатайте M-x follow-mode второй раз.

Выборочный показ

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

Чтобы спрятать строки, наберите C-x $ (set-selective-display) с числовым аргументом n. После этого строки, имеющие по крайней мере n столбцов отступа, пропадут с экрана. Показателем их существования являются только три точки (`...'), появляющиеся в конце каждой видимой строки, за которой следует одна или более невидимых.

Команды C-n и C-p перемещаются сквозь спрятанные строки, как если бы их не было.

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

Чтобы сделать вс видимым снова, наберите C-x $ без аргумента.

Если вы установите переменную selective-display-ellipses равной nil, то три точки не будут появляться в конце строки, которая предшествует спрятанным строкам. Тогда не будет никакого видимого указания на наличие скрытых строк. Эта переменная при установке автоматически становится локальной.

Дополнительные возможности строки режима

Когда включён режим Line Number, в строке режима появляется номер текущей строки, где находится точка. Используйте для переключения этого режима команду M-x line-number-mode; обычно он включён. Номер строки появляется перед поз, позицией в процентах от объема буфера, с буквой `L' для указания на то, что это такое. Смотрите раздел Второстепенные режимы, для дальнейшей информации о второстепенных режимах и о том, как применять эту команду.

Если буфер очень большой (больше, чем значение переменной line-number-display-limit), то номер строки не выводится. Emacs не подсчитывает номера строк, если буфер велик, потому что это было бы слишком медленно. Если вы сузили буфер (смотрите раздел Сужение), отображаемый номер строки отчитывается относительно доступной части буфера.

Вы также можете показать номер текущего столбца, включив режим Column Number. Он отображает номер текущего столбца после буквы `C'. Для переключения этого режима напечатайте M-x column-number-mode.

Emacs может показывать время и загрузку системы во всех строках режима. Чтобы задействовать эту возможность, напечатайте M-x display-time. Эти сведения, добавляемые к строке режима, обычно появляются после имени буфера перед именами режимов. Это выглядит так:

чч:ммpm з.зз

Здесь чч и мм обозначают часы и минуты, за которыми всегда следуют `am' или `pm'. з.зз -- это среднее число процессов, запущенных во всей системе. (Некоторые поля могут быть пропущены, если ваша операционная система не поддерживает их.) Если вы предпочитаете видеть время в двадцатичетырехчасовом формате, установите переменную display-time-24hr-format в значение t.

Если для вас есть почта, которую вы ещё не читали, после уровня загрузки появляется слово `Mail'.

Как отображается текст

Печатные знаки ASCII (с восьмиричными кодами от 040 до 0176) отображаются в буферах Emacs как их собственные графические представления. То же и для многобайтных печатных знаков, не входящих в ASCII (с восьмиричными кодами выше 0400).

Некоторые управляющие знаки ASCII отображаются особым образом. Знак новой строки (восьмиричный код 012) отображается как начало новой строки. Знак табуляции (восьмиричный код 011) показывается продвижением до следующей позиции табуляции (обычно через каждые 8 столбцов).

Другие управляющие знаки ASCII обычно отображается как шапочка (`^'), за которой следует неуправляющая версия знака; таким образом, control-A показывается как `^A'.

Не-ASCII-знаки от 0200 до 0377 отображаются с помощью восьмиричных управляющих последовательностей; например, знак с кодом 0243 (восьмиричным) выводится как `\243'. Однако, если вы включите отображение европейских алфавитов, то большинство этих знаков станут печатными не-ASCII-знаками и будут отображаться с использованием их графических представлений (в предположении, что ваш терминал поддерживает это). Смотрите раздел Поддержка однобайтных европейских знаков.

Переменные управления изображением

Этот раздел содержит информацию только для настройки. Начинающим пользователям стоит его пропустить.

Переменная mode-line-inverse-video управляет тем, отражается ли строка режима в инверсном виде (в предположении, что терминал поддерживает это); nil значит, что это не делается. Смотрите раздел Строка режима. Если вы зададите цвет шрифта для начертания modeline, и mode-line-inverse-video не равна nil, то по умолчанию цветом фона для этого начертания будет цвет простого текста. Смотрите раздел Использование разных начертаний.

Если переменная inverse-video не равна nil, Emacs пытается инвертировать все строки дисплея из их обычного состояния.

Если переменная visible-bell не nil, Emacs пытается мерцать экраном, когда обычно он подает звуковой сигнал. Эта переменная не действует, если ваш терминал не умеет мерцать экраном.

Когда вы снова входите в Emacs после прерывания, Emacs обычно очищает экран и перерисовывает все изображение. На некоторых терминалах, имеющих более одной страницы памяти, можно сделать такую запись termcap, чтобы строки `ti' и `te' (выводимые терминалу, когда в Emacs входят и выходят, соответственно) переключали страницы памяти так, чтобы использовать одну для Emacs, а вторую для другого вывода. Затем, вы можете по желанию установить переменную no-redraw-on-reenter не равной nil; это велит Emacs предполагать, что страница экрана после повторного входа всё ещё содержит то, что Emacs туда записал в последний раз.

Переменная echo-keystrokes управляет отражением многознаковых ключей. Значение этой переменной -- это выраженная в секундах длина паузы, требуемой для вызова эхо; если оно равно нулю, это значит, что эхо не будет. Смотрите раздел Эхо-область.

Если переменная ctl-arrow равна nil, то управляющие знак будут показаны в буфере с помощью восьмиричных управляющих последовательностей, все, кроме ограничителя новой строки и табуляции. Изменение значения переменной ctl-arrow делает её локальной для текущего буфера, до этого же момента действует значение по умолчанию. Значение по умолчанию равно t. Смотрите раздел `Display Tables' в The Emacs Lisp Reference Manual.

Обычно знак табуляции показывается в буфере как пробел, который простирается до следующей позиции табуляции дисплея; остановки по табуляции происходят через интервал, равный восьми пробелам. Число пробелов в табуляции управляется переменной tab-width, которая становится локальной при её изменении, так же, как и ctl-arrow. Отметим, что способ отображения символа табуляции в буфере никак не влияет на определение TAB, как команды. Переменная tab-width должна иметь значение между 1 и 1000, включительно.

Если переменная truncate-lines не равна nil, то каждая строка текста занимает ровно одну строку на экране; если строка текста слишком длинна, показывается только умещающаяся часть. Если truncate-lines равна nil, то длинные строки текста отображаются как несколько строк на экране, столько, сколько нужно, чтобы показать весь текст строки. Смотрите раздел Строки продолжения. Изменение значения truncate-lines делает её локальной для текущего буфера; до этого момента действует значение по умолчанию. Это значение по умолчанию изначально равно nil.

Если переменная truncate-partial-width-windows не равна nil, она принуждает усечение длинных строк вместо их продолжения в любом окне уже полной ширины фрейма, несмотря на значение переменной truncate-lines. Для получения информации о примыкающих окнах, смотрите раздел Разделение окон. Смотрите также раздел `Display' в The Emacs Lisp Reference Manual.

Переменная baud-rate содержит скорость вывода терминала, насколько её знает Emacs. Установка этой переменной не меняет действительную скорость передачи данных, но её значение используется для вычислений, например, наполнения. Она также влияет на принятие решения о том, нужно ли прокручивать часть экрана или перерисовывать её -- даже при использовании оконной системы. (Мы сделали так, несмотря на то, что оконная система не имеет действительной "скорости вывода", чтобы дать вам возможность настроить эти параметры.)

Вы можете настроить способ вывода каждого конкретного знака с помощью таблицы отображения. Смотрите раздел `Display Tables' в The Emacs Lisp Reference Manual.

Назад |  Вперед |  Содержание



Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2024