При использовании X Window System вы можете создавать в одном сеансе Emacs несколько окон уровня оконной системы. Каждое принадлежащее Emacs X-окно показывает один фрейм, который может содержать одно или несколько окон Emacs. Изначально фрейм содержит одно окно Emacs общего назначения, которое вы можете поделить вертикально или горизонтально на меньшие. Обычно фрейм имеет собственную эхо-область и минибуфер, но вы можете сделать фреймы без них -- они будут использовать эхо-область и минибуфер другого фрейма.
Редактирование в одном фрейме затрагивает и другие фреймы. К примеру, если вы поместите текст в список уничтожений в одном фрейме, вы можете восстановить его в другом. Если вы выходите из Emacs через C-x C-c в одном фрейме, это удалит все фреймы. Чтобы удалить только один фрейм, используйте C-x 5 0.
Чтобы избежать путаницы, мы резервируем слово "окно" для тех окон, которые реализует сам Emacs, и никогда не используем его для обозначения фрейма.
Emacs, скомпилированный для MS-DOS, эмулирует некоторые аспекты оконной системы, так что вы сможете использовать многие возможности из описанных в этой главе. Смотрите раздел Клавиатура и мышь в MS-DOS, для дальнейшей информации.
Команды мыши для выделения и копирования области в основном совместимы
с командами программы xterm
. Вы можете пользоваться одними и
теми же командами мыши для обмена текстом между Emacs другими
X-клиентами.
Если вы выделите область с помощью любой из этих команд и сразу же после этого нажмете функциональную клавишу DELETE, она удалит выделенную область. Функциональная клавиша BACKSPACE или ASCII-знак DEL не делают этого; и если вы нажмете между командой мыши и DELETE какую-то другую клавишу, DELETE не подействует таким образом.
mouse-set-point
). Обычно
это левая кнопка.
mouse-set-region
). С помощью
этой команды вы можете указать оба конца области.
Если при проведении мышью вы переместите ее за верхний или нижний предел
окна, это окно непрерывно прокручивается, пока вы не вернете в него
мышь. Таким способом вы можете выделять области, не умещающиеся на
экране. Число прокручиваемых за один шаг строк зависит от того,
насколько далеко за край окна ушла мышь; минимальный размер шага
определяет переменная mouse-scroll-min-lines
.
mouse-yank-at-click
). Обычно это средняя кнопка.
mouse-save-then-kill
, имеет несколько назначений в
зависимости от того, где вы щелкнули, и от состояния области.
Самый основной случай -- это когда вы щелкаете Mouse-1 в одном
месте, а затем Mouse-3 в другом. Это выделяет текст между двумя
этими позициями в качестве области. Это также копирует новую область в
список уничтожений, чтобы вы могли скопировать его в другое место.
Если вы щелкните в тексте Mouse-1, прокрутите окно с помощью
полоски прокрутки и затем щелкните Mouse-3, Emacs запомнит, где
была точка перед прокруткой (где вы поместили ее с помощью
Mouse-1), и использует эту позицию как другой конец области. Это
сделано, чтобы вы могли выделять области, которые не умещаются полностью
на экране.
В более общем виде, если у вас нет подсвеченной области, Mouse-3
выделяет в качестве области текст между точкой и местом щелчка. Она
делает это, устанавливая метку там, где была точка, и перемещая точку к
той позиции, где вы щелкнули.
Если у вас есть подсвеченная область, или если область была установлена
непосредственно перед этим с помощью проведения кнопкой 1, Mouse-3
подстраивает ближайший конец области, перемещая его к месту щелчка.
Также, текст подстроенной области замещает в списке уничтожений текст
старой области.
Если вы изначально задали область, используя двойной или тройной щелчок
Mouse-1, чтобы определить область как состоящую из целых слов или
строк, то подстройка области с помощью Mouse-3 также проходит по
целым словам или строкам.
Если вы примените Mouse-3 два раз подряд на одном месте, вы
уничтожите уже выделенную область.
Простейший способ уничтожить текст с помощью мыши -- нажать Mouse-1 в одном конце, а затем дважды нажать Mouse-3 на другом. Смотрите раздел Удаление и уничтожение. Чтобы скопировать текст в список уничтожений, не удаляя его из буфера, нажмите Mouse-3 только один раз или просто проведите по этому тексту с прижатой Mouse-1. Потом вы можете скопировать этот текст в другое место восстановлением.
Чтобы восстановить уничтоженный или скопированный текст в другое
место, переведите туда мышь и нажмите Mouse-2.
Смотрите раздел Восстановление. Однако, если mouse-yank-at-point
не равна
nil
, Mouse-2 восстанавливает в точке. Тогда не имеет
значения, где вы щелкаете, или даже в каком из окон фрейма вы щелкаете.
Значение по умолчанию равно nil
. Эта переменная влияет также на
восстановление вторичного выделения.
Чтобы скопировать текст в другое X-окно, уничтожьте его или сохраните в списке уничтожений. Под X это кроме того установит первичное выделение. Затем используйте в программе, работающей в другом окне, команду "вставить", чтобы вставить текст выделения.
Чтобы скопировать текст из другого X-окна, используйте в программе, работающей в другом окне, команды "вырезать" или "копировать", чтобы выделить нужный вам текст. Затем восстановите его в Emacs с помощью C-y или Mouse-2.
Эти команды вырезания и вставки работают также и в MS-Windows.
Когда Emacs помещает текст в список уничтожений или перекладывает
текст на вершину списка уничтожений, он устанавливает первичное
выделение X-сервера. Именно таким образом другие X-клиенты могут
получить доступ к этому тексту. Emacs также сохраняет текст в буфере
вырезок, но только если этот текст достаточно короткий
(x-cut-buffer-max
задает максимальное число знаков); помещение в
буфер вырезок длинных строк может быть медленным.
Команды восстановления первого вхождения списка уничтожений на самом деле сначала проверяют, нет ли первичного выделения из других программ; после этого они проверяют, нет ли текста в буфере вырезок. Если ни тот, ни другой источник не предоставляют текста для восстановления, используется содержимое списка уничтожений.
Вторичное выделение -- это другой способ выделения текста с использованием X Windows. Оно не использует точку или метку, поэтому вы можете использовать его для уничтожения текста без установки точки или метки.
mouse-set-secondary
). Когда вы проводите мышью, появляется и
изменяется подсветка.
Если при проведении мышью вы сдвинете ее за верхний или нижний предел
окна, это окно непрерывно прокручивается, пока вы не вернете в него
мышь. Таким способом вы можете выделять области, не умещающиеся на
экране.
mouse-start-secondary
).
mouse-secondary-save-then-kill
). Второй щелчок на этом же месте
уничтожает только что сделанное вторичное выделение.
mouse-yank-secondary
). Это помещает точку в конец
восстановленного текста.
Двойные и тройные щелчки M-Mouse-1 действуют на слова и строки, во многом как для Mouse-1.
Если mouse-yank-at-point
не равна nil
, M-Mouse-2
восстанавливает в точке. Тогда не имеет значения, где вы щелкнули;
главное, в каком окне. Смотрите раздел Команды мыши для редактирования.
Некоторые буферы Emacs показывают различного рода перечни. Это перечни файлов, буферов, возможных завершений, совпадений с образцом и так далее.
Поскольку восстановление в этих буферах бессмысленно, в большинстве из них Mouse-2 определена особо, как команда для использования или просмотра пункта, на котором вы щелкнули.
Например, если вы щелкните Mouse-2 на имени файла в буфере Dired, вы обратитесь к этому файлу. Если вы щелкните Mouse-2 на сообщении об ошибке в буфере `*Compilation*', вы перейдете к исходному коду для этого сообщения. Если вы щелкните Mouse-2 на завершении в буфере `*Completions*', вы выберете это завершение.
Обычно вы можете судить о том, имеет ли Mouse-2 особое значение, по тому, что чувствительный текст подсвечивается, когда вы проводите над ним мышь.
Щелчки мыши, модифицированные с помощью клавиш CTRL и SHIFT, выводят меню.
Вы можете использовать мышь на строке режима для выбора окон и манипуляций с ними.
C-Mouse-2 на полоске прокрутки разбивает соответствующее окно по горизонтали. Смотрите раздел Разделение окон.
Префиксный ключ C-x 5 аналогичен C-x 4, и на них определены параллельные подкоманды. Разница между ними в том, что команды с C-x 5 создают новый фрейм, а не просто новое окно в выбранном фрейме (смотрите раздел Изображение в другом окне). Если запрошенный материал уже показывается в существующем видимом или минимизированном фрейме, эти команды используют существующий фрейм после его поднимания или деминимизации по необходимости.
Команды на C-x 5 различаются по тому, как они находят или создают буфер для выбора:
make-frame-command
).
switch-to-buffer-other-frame
.
find-file-other-frame
. Смотрите раздел Обращение к файлам.
dired-other-frame
. Смотрите раздел Dired, редактор каталогов.
mail-other-frame
). Это вариант C-x m, работающий в другом
фрейме. Смотрите раздел Посылка почты.
find-tag-other-frame
, вариант M-., работающий с
несколькими фреймами. Смотрите раздел Таблицы тегов.
find-file-read-only-other-frame
. Смотрите раздел Обращение к файлам.
Вы можете управлять видом вновь создаваемых фреймов, устанавливая
параметры фрейма в default-frame-alist
. Для задания параметров,
относящихся только к начальному фрейму, вы можете использовать
переменную initial-frame-alist
. Смотрите раздел `Initial Parameters' в The Emacs Lisp Reference Manual, для дальнейшей
информации.
Простейший способ указать основной шрифт для всех фреймов Emacs ---
через X-ресурс (смотрите раздел Ключи для задания шрифта), но вы также можете сделать это,
изменив default-frame-alist
так, чтобы в нем задавался параметр
font
, как показано здесь:
(add-to-list 'default-frame-alist '(font . "10x20"))
Фрейм Emacs может иметь speedbar, то есть вертикальное окно, служащее как меню с возможностью прокрутки для файлов, к которым вы можете обратиться, и тегов внутри этих файлов. Чтобы создать speedbar, введите M-x speedbar; это создает окно speedbar для выбранного фрейма. После этого вы можете щелкнуть в speedbar на имени файла, чтобы обратиться к нему в соответствующем фрейме Emacs, или щелкнуть на имени тега, чтобы перескочить к нему соответствующем фрейме.
Изначально speedbar перечисляет непосредственное содержание текущего каталога по одному файлу на строке. В каждой строке также есть кнопка, `[+]' или `<+>', на которой вы можете щелкнуть Mouse-2, чтобы "открыть" содержимое данного элемента. Если на этой строке перечислен каталог, то при открытии к показанному в speedbar добавляется содержание этого каталога под его собственной строкой. Если на строке перечислен обычный файл, при его открытии к содержимому speedbar добавляется список тегов из этого файла. Когда файл открывается, `[+]' заменяется на `[-]'; вы можете щелкнуть на этой кнопке, чтобы "закрыть" этот файл (скрыть его содержание).
Некоторые основные режимы, включая режим Rmail, Info и GUD, имеют специализированные способы поместить в speedbar другие полезные вещи. Например, в режиме Rmail speedbar показывает перечень Rmail-файлов и позволяет вам перенести текущее сообщение в другой Rmail-файл, щелкнув на кнопке `<M>'.
Speedbar принадлежит одному фрейму Emacs и всегда работает с этим фреймом. Если вы используете несколько фреймов, вы можете сделать speedbar для некоторых или для всех из них; чтобы сделать speedbar для любого данного фрейма, наберите в нем M-x speedbar.
Один Emacs может общаться более чем с одним дисплеем X Windows.
Изначально Emacs использует только один дисплей -- тот, что указан в
переменной среды `DISPLAY' или с помощью ключа --display
(смотрите раздел Ключи запуска). Чтобы подсоединиться к другому дисплею,
воспользуйтесь командой make-frame-on-display
:
Один X-сервер может обрабатывать более одного экрана. Когда вы открываете фреймы на экранах, принадлежащих одному серверу, Emacs знает, что они разделяют одну клавиатуру и воспринимает все команды, приходящие с этих экранов, как один поток ввода.
Когда вы открываете фреймы на разных X-серверах, Emacs создает для каждого сервера отдельный поток ввода. Поэтому два пользователя могут одновременно печатать на двух дисплеях, и Emacs не смешивает их ввод. Каждый сервер имеет также собственный выбранный фрейм. Команды, которые вы вводите на конкретном X-сервере, относятся к выбранному фрейму этого сервера.
Несмотря на это, люди, использующие одно и то же задание Emacs с разных дисплеев, все же могут вмешиваться в дела друг друга, если будут неосторожны. Например, если любой их них напечатает C-x C-c, это прекратит задание Emacs для всех!
Вы можете сделать так, чтобы определенные буферы, для которых Emacs
обычно создает второе окно, если у вас есть только одно, появлялись в
особых собственных фреймах. Чтобы сделать это, установите переменную
special-display-buffer-names
равной списку имен буферов; любой
буфер, чье имя содержится в этом списке, автоматически получает
специальный фрейм, когда какая-нибудь команда Emacs хочет показать его
"в другом окне".
Например, если вы установите эту переменную таким образом:
(setq special-display-buffer-names '("*Completions*" "*grep*" "*tex-shell*"))
то списки завершений, вывод grep
и буфер оболочки режима
TeX получат свои собственные фреймы. Эти фреймы и окна в них никогда
не разбиваются автоматически и не используются для других буферов. Они
продолжают показывать буферы, для которых были созданы, пока вы не
измените их вручную. Уничтожение специального буфера автоматически
удаляет его фрейм.
В более общем случае вы можете установить
special-display-regexps
равной списку регулярных выражений; тогда
буфер получает собственный фрейм, если его имя совпадает в любым из них.
(Еще раз, это относится только к буферам, которые обычно отображаются в
отдельном окне.)
Переменная special-display-frame-alist
задает параметры для
этих фреймов. У нее есть значение по умолчанию, поэтому вам
необязательно устанавливать ее.
Те, кто знает Лисп, могут также сделать элемент
special-display-buffer-names
или special-display-regexps
списком. Тогда первый элемент -- это имя буфера или регулярное
выражение, а остальные указывают, как создавать фрейм. Это может быть
ассоциативный список, задающий значения параметров фрейма; эти значения
имеют приоритет перед значениями параметров, указанных в
special-display-frame-alist
. Или же остальные элементы могут
иметь такую форму:
(функция аргументы...)
где функция -- это символ. Тогда фрейм конструируется путем вызова функции; ее первым аргументом является буфер, а остальными аргументами -- аргументы.
Аналогичными средствами вы можете указать буферы, которые должны
отображаться в выбранном окне. Смотрите раздел Принудительное изображение в том же окне.
Показ в том же окне обладает приоритетом перед показом в специальном
фрейме; следовательно, если вы добавили имя буфера к
special-display-buffer-names
, но это не возымело никакого
эффекта, проверьте, не используется ли для этого же имени буфера
средство показа в том же окне.
Этот раздел описывает команды для изменения стиля отображения выбранного фрейма и его поведения в оконной среде.
modeline
, чтобы оно оставалось инверсией
начертания по умолчанию.
auto-raise-mode
не будет играть роли.
auto-lower-mode
не влияет на автоопускание, реализованное
программой управления X-окнами. Чтобы контролировать это, вы должны
использовать соответствующие средства своей программы управления окнами.
В версиях Emacs, которые используют X toolkit, функции для установки цвета и шрифтов не влияют на меню, так как меню отображаются со своими собственными классами виджетов. Чтобы сменить вид меню, вы должны использовать X-ресурсы (смотрите раздел X-ресурсы). Смотрите раздел Параметры для задания цветов, сведения о цветах, а также раздел Ключи для задания шрифта, касающийся вопросов о выборе шрифта.
Для получения информации о параметрах и настройках фреймов смотрите раздел `Frame Parameters' в The Emacs Lisp Reference Manual.
При использовании X, Emacs обычно создает полоски прокрутки слева от каждого окна. Полоска прокрутки проходит по всей высоте окна, а внутри ее есть прямоугольник, представляющий показанную в данный момент часть буфера. Полная высота полоски прокрутки представляет всю длину буфера.
Вы можете использовать на полоске прокрутки Mouse-2 (обычно это средняя кнопка), чтобы передвинуть или перетащить внутренний прямоугольник вверх или вниз. Если вы переместите его к верху полоски прокрутки, вы увидите начало буфера. Если вы переместите его к низу полоски прокрутки, то увидите конец буфера.
Правая и левая кнопки мыши прокручивают на контролируемое число строк. Mouse-1 (обычно левая кнопка) перемещает строку, на уровне которой вы щелкнули, к верхнему краю окна. Mouse-3 (обычно правая кнопка) перемещает верхнюю строку окна вниз к тому уровню, где вы щелкнули. Щелкая последовательно на одном месте, вы можете прокручивать на одно и то же расстояние еще и еще.
Помимо прокрутки, вы также можете щелкнуть на полоске прокрутки с помощью C-Mouse-2, чтобы разбить окно по горизонтали. Разбиение делается в той строке, где вы щелкнули.
Вы можете включить или выключить режим Scroll Bar командой M-x scroll-bar-mode. Без аргумента, она переключает использование полосок прокрутки. С аргументом, она включает использование полосок прокрутки тогда и только тогда, когда аргумент положителен. Эта команда применяется ко всем фреймам, включая те, что еще будут созданы. Для управления начальной установкой режима Scroll Bar вы можете использовать X-ресурс `verticalScrollBars'. Смотрите раздел X-ресурсы.
Чтобы включить или выключить полоски прокрутки только для выбранного фрейма, воспользуйтесь командой M-x toggle-scroll-bar.
Вы можете включить или выключить показ полосок меню с помощью команды M-x menu-bar-mode. Без аргументов, эта команда переключает режим Menu Bar; это второстепенный режим. С аргументом, эта команда включает режим Menu Bar, если аргумент положителен, и выключает, если аргумент неположителен. Для управления начальной установкой режима Menu Bar вы можете использовать X-ресурс `menuBarLines'. Смотрите раздел X-ресурсы. Профессиональные пользователи часто выключают полоску меню, особенно на текстовых терминалах, где это освобождает одну дополнительную строку для текста.
Смотрите раздел Полоска меню, для получения информации о том, как вызывать команды с помощью полоски меню.
Когда вы используете Emacs с системой X, вы можете настроить несколько стилей отображения знаков. Вы можете контролировать такие аспекты стиля: шрифт, цвет текста, цвет фона и подчеркивание. Emacs частично поддерживает начертания в MS-DOS, позволяя вам контролировать для каждого начертания цвета текста и фона (смотрите раздел Emacs и MS-DOS).
Вы управляете стилем отображения путем определения именованных начертаний. Каждое начертание может задавать шрифт, цвет текста, цвет фона и флаг подчеркивания; но оно не обязано задавать их все. Затем, указывая начертание или начертания для заданной части текста в буфере, вы управляете внешним видом этого текста.
Используемый для каждого данного знака стиль отображения определяется комбинацией нескольких начертаний. Любой аспект стиля, не заданный перекрытиями или свойствами текста, предоставляется самим фреймом.
Режим Enriched, предназначенный для редактирования форматированного текста, включает несколько команд и меню для задания начертаний. Смотрите раздел Начертания в форматированном тексте, чтобы узнать, как указать шрифт для текста в буфере. Смотрите раздел Цвета в форматированном тексте, о задании цветов текста и фона.
Для изменения внешнего вида начернания используйте буфер настройки. Смотрите раздел Настройка начертаний. Для определения атрибутов конкретных начертаний вы также можете использовать X-ресурсы (смотрите раздел X-ресурсы).
Чтобы узнать, какие начертания определены в данный момент, и как они выглядят, наберите M-x list-faces-display. Одно начертание может выглядеть по-разному в разных фреймах; данная команда показывает его вид в том фрейме, где вы ее набрали. Вот перечень стандартных определенных начертаний:
default
modeline
default
.
Смотрите раздел Переменные управления изображением.
highlight
region
secondary-selection
bold
italic
bold-italic
underline
Если включен режим Transient Mark, текст области подсвечивается, когда
метка активна. Для этого используется начертание с именем
region
; вы можете управлять стилем подсветки, меняя стиль этого
начертания (смотрите раздел Настройка начертаний). Смотрите раздел Режим Transient Mark, для
получения большей информации о режиме Transient Mark и активизации и
деактивизации метки.
Один простой способ использовать разные начертания -- включить режим Font Lock. Этот второстепенный режим, всегда локальный для конкретного буфера, подбирает начертания в соответствии с синтаксисом редактируемого текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он умеет даже распознавать и правильно подсвечивать различные другие важные конструкции. Смотрите раздел Режим Font Lock, для получения большей информации о режиме Font Lock и синтаксической подсветке.
Вы можете распечатать буфер с подсветкой, какую вы видите на экране, с
помощью команды ps-print-buffer-with-faces
. Смотрите раздел Печать через Postscript.
Режим Font Lock -- это второстепенный режим, всегда локальный для каждого буфера, который подсвечивает редактируемый вами текст, используя различные начертания в соответствии с синтаксисом текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он может также распознавать и правильно подсвечивать различные другие важные конструкции -- например, имена определяемых функций и зарезервированные ключевые слова.
Команда M-x font-lock-mode включает и выключает режим Font Lock
в соответствии с аргументом и переключает, если аргумент не задан.
Функция turn-on-font-lock
безусловно включает режим Font Lock.
Это полезно в функциях-ловушках режима. Например, чтобы задействовать
режим Font Lock всякий раз, когда вы редактируете файл на Си, вы можете
сделать так:
(add-hook 'c-mode-hook 'turn-on-font-lock)
Чтобы включить режим Font Lock автоматически во всех режимах, которые
его поддерживают, используйте функцию global-font-lock-mode
, как
показано здесь:
(global-font-lock-mode 1)
Когда вы редактируете текст в режиме Font Lock, подсветка в измененной
строке обновляется автоматически. Чаще всего изменения не оказывают
влияния на подсветку последующих строк, но иногда все же влияют. Чтобы
обновить подсветку нескольких строк, используйте команду M-g M-g
(font-lock-fontify-block
).
В некоторых основных режимах M-g M-g обновляет подсветку всей
текущей функции. (Как именно можно найти текущую функцию, указывает
переменная font-lock-mark-block-function
.) В других основных
режимах M-g M-g обновляет подсветку 16-ти строк над и под точкой.
С числовым аргументом n, M-g M-g обновляет подсветку n строк над и под точкой, независимо от режима.
Чтобы получить все преимущества режима Font Lock, вам придется выбрать такой шрифт по умолчанию, у которого есть жирный, курсивный и жирный курсивный варианты; или вам понадобится цветной монитор или монитор, отображающий много градаций серого.
Переменная font-lock-maximum-decoration
задает предпочтительный
уровень оформления для режимов, которые предоставляют несколько уровней.
Уровень 1 -- это минимальное оформление; некоторые режимы поддерживают
до трех уровней. Обычное значение по умолчанию обозначает "как можно
больше". Вы можете указать целое число, которое применяется ко всем
режимам, или задать разные числа для конкретных режимов; например, чтобы
использовать уровень 1 для режимов C/C++ и уровень по умолчанию в
остальных случаях, напишите так:
(setq font-lock-maximum-decoration '((c-mode . 1) (c++-mode . 1)))
В больших буферах подсветка может быть слишком медленной, поэтому вы
можете подавить ее. Переменная font-lock-maximum-size
задает
размер буфера, сверх которого подсветка не делается.
Подсветка комментариев и строк (или "синтаксическая" подсветка) основывается на анализе синтаксической структуры текста буфера. В целях увеличения скорости некоторые режимы, включая режим C и режим Lisp полагаются на особое соглашение: открывающая скобка в самом левом столбце всегда обозначает начало определения функции и, таким образом, всегда находится вне любой строки или комментария. (Смотрите раздел Определения функций.) Если вы не следуете этому соглашению, режим Font Lock может сделать неправильную подсветку текста после открывающей скобки в левом столбце, которая попадает в строку или комментарий.
Переменная font-lock-beginning-of-syntax-function
(всегда
локальная для буфера) указывает, каким образом режим Font Lock может
найти позицию, которая гарантированно находится вне любого комментария
или строки. В режимах, использующих соглашение об открывающей скобке в
левом столбце, значение этой переменной по умолчанию -- это
beginning-of-defun
, что велит режиму Font Lock применять это
соглашение. Если вы установите эту переменную в nil
, Font Lock
больше не станет полагаться на это соглашение. Это позволяет избежать
неверных результатов, но ценой этого будет то, что в некоторых случаях
для подсветки придется проходить текст буфера с самого начала.
Образцы подсветки Font Lock уже существуют для многих режимов, но вы
можете захотеть раскрасить что-то дополнительно. Чтобы добавить свои
собственные образцы подсветки для определенного режима, вы можете
использовать функцию font-lock-add-keywords
. К примеру, чтобы
выделить в комментариях Си слова `FIXME:', используйте это:
(font-lock-add-keywords 'c-mode '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))
Режимы поддержки убыстряют режим Font Lock в больших буферах. Есть два режима поддержки: режим Fast Lock и режим Lazy Lock. Они используют два разных метода ускорения режима Font Lock.
Чтобы сделать режим Font Lock более быстрым для буферов, обращающихся к большим файлам, вы можете использовать режим Fast Lock. Режим Fast Lock сохраняет информацию о шрифтах для каждого файла в отдельном файле кеша; всякий раз, когда вы обращаетесь к файлу, он заново считывает информацию о шрифтах из файла кеша вместо того, чтобы вычислять шрифты для текста с нуля.
Команда M-x fast-lock-mode включает и выключает режим Fast Lock в соответствии с аргументом (без аргумента, режим переключается). Вы также можете сделать так, чтобы режим Fast Lock включался всякий раз, когда вы используете режим Font Lock, следующим образом:
(setq font-lock-support-mode 'fast-lock-mode)
Записывать файл кеша для маленьких буферов не имеет смысла. Поэтому
есть переменная, fast-lock-minimum-size
, задающая наименьший
размер файла, для которого информация о шрифтах кешируется.
Переменная fast-lock-cache-directories
указывает, где нужно
размещать файлы кеша. Ее значение -- это список каталогов, которые
будут испробованы; "."
означает тот же каталог, где файл
редактируется. Значение по умолчанию равно ("."
"~/.emacs-flc")
, что велит использовать тот же каталог, если это
возможно, иначе использовать каталог `~/.emacs-flc'.
Переменная fast-lock-save-others
указывает, должен ли режим
Fast Lock сохранять файлы кеша для файлов, чьим владельцем являетесь не
вы. Отличное от nil
значение говорит, что должен (и это
значение по умолчанию).
Чтобы ускорить режим Font Lock для больших буферов, вы можете использовать режим Lazy Lock, который уменьшает количество текста, подлежащего подсветке. В режиме Lazy Lock подсветка буфера делается по необходимости; она производится только для тех частей буфера, которые должны появиться на экране. И подсветка ваших изменений замедлена; она производится, только когда Emacs бездействовал определенный небольшой промежуток времени.
Команда M-x lazy-lock-mode включает и выключает режим Lazy Lock в соответствии с аргументом (без аргумента, режим переключается). Вы также можете сделать так, чтобы режим Lazy Lock включался всякий раз, когда вы используете режим Font Lock, следующим образом:
(setq font-lock-support-mode 'lazy-lock-mode)
Избегать подсветки маленьких буферов не имеет смысла. Минимальный
размер буфера, для которого подсветка делается по необходимости,
определяется переменной lazy-lock-minimum-size
. Меньшие буферы
расцвечиваются сразу, как в простом режиме Font Lock.
Когда вы изменяете буфер, режим Lazy Lock откладывает подсветку
измененного текста. Переменная lazy-lock-defer-time
задает число
секунд, которое Emacs должен оставаться незанятым, прежде чем начать
подсветку ваших изменений. Если ее значение равно 0, изменения
подсвечиваются незамедлительно, как в простом режиме Font Lock.
Обычно режим Lazy Lock подсвечивает ставшие видимыми фрагменты буфера
перед тем, как они впервые показываются на экране. Однако, если
значение lazy-lock-defer-on-scrolling
не равно nil
, вновь
видимый текст подсвечивается только после того, как Emacs бездействовал
lazy-lock-defer-time
секунд.
В некоторых режимах, включая режим C и режим Emacs Lisp, изменение
содержимого одной строки изменяет контекст последующих строк и,
следовательно, ту подсветку, которая должна для них использоваться.
Обычно вы должны набрать M-g M-g, чтобы обновить подсветку
последующих строк. Однако, если вы установите переменную
lazy-lock-defer-contextually
не равной nil
, режим Lazy
Lock делает это автоматически по истечении lazy-lock-defer-time
секунд.
Когда Emacs бездействует продолжительное время, Lazy Lock подсвечивает дополнительные фрагменты буфера, которые еще не показаны, на случай, если вы вынесете их на экран позднее. Это называется скрытой подсветкой.
Переменная lazy-lock-stealth-time
определяет, сколько минут
Emacs должен оставаться незанятым, прежде чем начать скрытую подсветку.
Значение nil
означает отсутствие скрытой подсветки. Переменные
lazy-lock-stealth-lines
и lazy-lock-stealth-verbose
задают
диапазон и подробность скрытой подсветки.
Вот простые указания, которые помогут вам выбрать один из режимов поддержки Font Lock.
Переменная font-lock-support-mode
указывает, какой из этих
режимов поддержки следует использовать; например, чтобы сказать, что в
режимах C/C++ используется режим Fast Lock, а в остальных случаях ---
режим Lazy Lock, установите эту переменную так:
(setq font-lock-support-mode '((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode)))
Используйте M-x highlight-changes-mode, чтобы включить второстепенный режим, который показывает с помощью разных начертаний (в основном цветов), какие части текста буфера изменялись недавно.
Следующие команды позволяют вам создавать и удалять фреймы, а также делать другие операции над ними:
iconify-or-deiconify-frame
).
Обычное значение C-z, приостановка Emacs, бесполезно под оконной
системой, поэтому в данном случае у этого ключа другая привязка.
Если вы введете эту команду в пиктограмме фрейма Emacs, она
деминимизирует этот фрейм.
delete-frame
). Это не допускается, если
есть только один фрейм.
Если ваш терминал не обладает оконной системой, которую поддерживает Emacs, то он может показывать только один фрейм Emacs в один момент времени. Однако, вы все же можете создавать несколько фреймов Emacs и переключаться между ними. На таких терминалах переключение фреймов во многом похоже на переключение между различными конфигурациями окон.
Чтобы создать новый фрейм и переключиться в него, используйте C-x 5 2; для кругового прохода по существующим фреймам используйте C-x 5 o; чтобы удалить текущий фрейм, используйте C-x 5 0.
Каждый фрейм имеет отличительный номер. Если ваш терминал может показывать в одно время только один фрейм, то около начала строки режима появляется номер n текущего фрейма в форме `Fn'.
`Fn' на самом деле -- это имя фрейма. Вы также можете указать другое имя, если хотите, и вы можете выбирать фреймы по именам. Чтобы задать новое имя для текущего фрейма, используйте команду M-x set-frame-name RET имя RET, а для выбора фрейма в соответствии с его именем используйте M-x select-frame-by-name RET имя RET. Указанное вами имя появляется в строке режима, когда этот фрейм становится выбранным.