Фреймы и X Windows – ЧАСТЬ 3

Обратите  внимание, это средство автоматического поднятия реализовано самим Emacs. Некоторые программы управления окнами также реализуют автоподнятие. Если вы включите автоподнятие для фреймов Emacs в вашей программе управления X-окнами, это будет работать, но не под контролем Emacs, и следовательно, auto-raise-mode не будет играть роли.

M-x auto-lower-mode

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

Команда auto-lower-mode  не  влияет на автоопускание, реализованное  программой управления X-окнами.   Чтобы контролировать это, вы должны использовать соответствующие  средства своей программы управления окнами.

M-x set-frame-font hRETшрифт hRETi

Определяет шрифт как основной шрифт в выбранном фрейме. Основной шрифт используется для всего отображаемого в этом фрейме текста, кроме  случаев, когда для какого-то текста с помощью начертания (см. Раздел 17.13 [Начертания], с. 155) определен другой шрифт. См. Раздел A.7 [Шрифт X], с. 392, чтобы узнать о способах перечисления доступных в вашей системе шрифтов.

Вы также можете установить основной шрифт фрейма через всплывающее  ме-

ню. Чтобы вызвать это меню, нажмите S-Mouse-1.

В версиях Emacs, которые используют X toolkit, функции для установки цвета и шрифтов не влияют на меню, так как меню отображаются со своими собственными классами виджетов. Чтобы сменить вид меню, вы должны использовать X-ресурсы (см. Раздел A.13 [Ресурсы X], с. 396). См.  Раздел A.8 [Цвета X], с. 393, сведения о цветах, а также Раздел A.7 [Шрифт X], с. 392, касающийся  вопросов о выборе шрифта.

Для  получения информации  о параметрах и  настройках фреймов  смотрите  раздел

“Frame Parameters” в The Emacs Lisp Reference Manual.

17.11  Полоски прокрутки

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

Вы можете использовать на полоске прокрутки  Mouse-2 (обычно это средняя кнопка), чтобы передвинуть или перетащить внутренний прямоугольник вверх или вниз.  Если вы переместите  его к  верху полоски прокрутки,  вы увидите  начало буфера. Если вы переместите его к низу полоски прокрутки, то увидите конец буфера.

Правая и левая кнопки мыши прокручивают на контролируемое число строк.  Mouse-1 (обычно левая кнопка) перемещает строку, на уровне которой вы щелкнули, к верхнему краю окна.   Mouse-3 (обычно правая кнопка)  перемещает  верхнюю строку окна вниз к тому уровню, где  вы щелкнули.   Щелкая последовательно  на одном месте,  вы можете прокручивать на одно и то же расстояние  еще и еще.

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

Вы можете включить или выключить режим Scroll Bar командой M-x scroll-bar-mode. Без аргумента, она переключает использование полосок прокрутки.   С аргументом, она включает использование полосок прокрутки  тогда и только тогда, когда аргумент положителен. Эта команда применяется ко всем фреймам, включая те, что еще будут созданы.

Для управления начальной установкой режима Scroll Bar вы можете использовать X-ресурс

‘verticalScrollBars’. См. Раздел A.13 [Ресурсы X], с. 396.

Чтобы включить или выключить полоски прокрутки  только для выбранного фрейма,

воспользуйтесь командой M-x toggle-scroll-bar.

17.12  Полоски меню

Вы можете  включить  или выключить показ полосок меню с помощью команды M-x menu-bar-mode. Без аргументов, эта команда переключает режим Menu Bar; это второстепенный режим. С аргументом, эта команда включает режим Menu Bar, если аргумент положителен, и выключает, если аргумент неположителен. Для управления начальной установкой режима Menu Bar вы можете использовать X-ресурс ‘menuBarLines’. См. Раздел A.13 [Ресурсы X], с. 396. Профессиональные пользователи часто выключают полоску меню, особенно на текстовых терминалах, где это освобождает одну дополнительную строку для текста.

См. Раздел 1.4 [Полоска меню], с. 26, для получения информации о том, как вызывать команды с помощью полоски меню.

17.13  Использование разных начертаний

Когда вы используете Emacs с системой X, вы можете настроить несколько стилей отображения знаков. Вы можете контролировать такие аспекты стиля: шрифт, цвет текста, цвет фона и подчеркивание.  Emacs частично поддерживает начертания в MS-DOS, позволяя вам контролировать для каждого начертания цвета текста и фона (см. Приложение C [MS-DOS], с. 403).

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

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

Режим  Enriched,  предназначенный для  редактирования форматированного  текста, включает несколько команд и меню для задания начертаний.  См.  Раздел 21.11.4 [Начертания в форматированном тексте], с. 200, чтобы узнать, как указать шрифт для текста в буфере.  См. Раздел 21.11.5 [Цвета в форматированном тексте], с. 201, о задании цветов текста и фона.

Для изменения внешнего вида начернания используйте  буфер  настройки.   См.   Раздел 31.2.2.3 [Настройка начертаний], с. 347. Для определения атрибутов конкретных начертаний вы также можете использовать X-ресурсы (см. Раздел A.13 [Ресурсы X], с. 396).

Чтобы узнать, какие начертания определены в данный момент, и как они выглядят, наберите M-x list-faces-display.  Одно начертание может выглядеть по-разному в разных фреймах; данная команда показывает его вид в том фрейме, где вы ее набрали. Вот перечень стандартных определенных начертаний:

default    Это начертание используется для обычного текста, для которого не определено другое начертание.

modeline    Это начертание используется для строк режима. По умолчанию оно устанавливается как  инверсия начертания default.   См.   Раздел 11.7  [Переменные изображения],  с. 84.

highlight

Это начертание используется в различных режимах для подсветки частей тек-

ста.

region        Это  начертание применяется для отображения выделенной  области (когда включен режим Transient Mark — смотрите ниже).

secondary-selection

Это начертание используется для отображения вторичного выделения (см. Раз-

дел 17.2 [Вторичное выделение], с. 149).

bold            Это начертание использует жирный вариант шрифта по умолчанию, если он есть.

italic    Это начертание использует курсивный вариант шрифта по  умолчанию, если он есть.

bold-italic

Это начертание использует жирный курсивный вариант шрифта по умолча-

нию, если он есть.

underline

Это начертание подчеркивает текст.

Если включен режим Transient  Mark, текст области подсвечивается,  когда метка активна. Для этого используется начертание с именем region;  вы можете управлять стилем подсветки, меняя стиль этого начертания (см.  Раздел 31.2.2.3 [Настройка начертаний], с. 347).  См.  Раздел 8.2 [Transient  Mark],  с. 64, для получения большей информации  о режиме Transient Mark и активизации и деактивизации метки.

Один простой способ использовать  разные начертания — включить режим Font Lock. Этот  второстепенный  режим, всегда локальный для конкретного буфера,  подбирает начертания в соответствии с синтаксисом редактируемого текста.  Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он умеет даже распознавать и правильно подсвечивать различные другие важные конструкции. См. Раздел 17.14 [Font Lock], с. 156, для получения большей информации о режиме Font Lock и синтаксической подсветке.

Вы можете  распечатать буфер с подсветкой, какую вы видите  на экране, с помощью команды ps-print-buffer-with-faces. См. Раздел 30.5 [Postscript], с. 332.

17.14  Режим Font Lock

Режим 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-markblock-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 полагаются на особое соглашение: открывающая скобка в самом левом столбце всегда обозначает начало определения функции и, таким образом, всегда находится вне любой строки или комментария. (См.  Раздел 22.4 [Определения функций], с. 208.) Если вы не следуете этому соглашению, режим Font Lock может сделать неправильную подсветку текста после открывающей скобки в левом столбце, которая попадает в строку или комментарий.

Переменная font-lock-beginning-of-syntax-function (всегда локальная для буфера) указывает, каким образом режим Font Lock может найти позицию, которая гарантированно находится вне любого комментария или строки. В режимах, использующих соглашение об открывающей скобке в левом столбце, значение этой переменной по умолчанию — это beginning-of-defun, что велит режиму Font  Lock применять это соглашение. Если вы установите эту переменную в nil,  Font Lock больше  не станет полагаться на это соглашение.  Это позволяет избежать  неверных результатов, но ценой этого будет то, что в некоторых случаях для подсветки придется проходить текст буфера с самого начала.

Образцы подсветки Font  Lock уже  существуют для многих режимов, но вы можете захотеть раскрасить что-то дополнительно. Чтобы добавить свои собственные образцы подсветки для определенного режима, вы можете использовать функцию font-lock-addkeywords.  К примеру, чтобы выделить в комментариях Си слова ‘FIXME:’, используйте это:

(font-lock-add-keywords

’c-mode

’(("\\<\\(FIXME\\):" 1 font-lock-warning-face t)))

17.15  Режимы поддержки Font Lock

Режимы поддержки убыстряют режим Font Lock в больших буферах. Есть два режима поддержки:  режим Fast Lock и режим Lazy Lock.  Они используют два разных метода ускорения режима Font Lock.

17.15.1  Режим Fast 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 значение говорит, что должен (и это значение по умолчанию).

17.15.2  Режим Lazy Lock

Чтобы ускорить режим 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-lockminimum-size. Меньшие буферы расцвечиваются сразу, как в простом режиме Font Lock.

Когда вы изменяете буфер, режим Lazy Lock откладывает подсветку измененного текста. Переменная lazy-lock-defer-time задает число секунд, которое Emacs должен оставаться незанятым, прежде чем начать подсветку ваших изменений. Если ее значение  равно

0, изменения подсвечиваются незамедлительно, как в простом режиме Font Lock.

Обычно режим Lazy Lock подсвечивает ставшие видимыми фрагменты  буфера перед тем, как они впервые показываются на экране.  Однако, если значение lazy-lock-deferon-scrolling не равно nil,  вновь видимый текст подсвечивается только после того, как Emacs бездействовал lazy-lock-defer-time секунд.

В некоторых режимах, включая режим C и режим Emacs Lisp, изменение содержимого одной строки изменяет контекст последующих  строк и, следовательно, ту  подсветку, которая должна для них использоваться. Обычно вы должны набрать M-g M-g, чтобы обновить подсветку последующих строк.  Однако, если вы установите переменную lazylock-defer-contextually не равной nil,  режим Lazy Lock делает это автоматически по истечении lazy-lock-defer-time секунд.

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

Переменная lazy-lock-stealth-time  определяет,  сколько минут Emacs должен оставаться незанятым, прежде чем начать скрытую подсветку. Значение nil означает отсутствие скрытой подсветки. Переменные lazy-lock-stealth-lines  и lazy-lock-stealthverbose задают диапазон и подробность скрытой подсветки.

17.15.3  Fast Lock или Lazy Lock?

Вот простые указания, которые помогут вам выбрать один из режимов поддержки Font

Lock.

Режим Fast Lock играет роль только при обращении к файлам и уничтожении буферов (и связанных событий); следовательно,  редактирование  буфера и прокрутка  окна не быстрее и не медленнее, чем в простом режиме Font Lock.

Режим Fast Lock медленнее при считывании файлов кеша, чем режим Lazy Lock при подсветке буфера; следовательно, режим Fast Lock медленнее при обращении к файлам, чем режим Lazy Lock.

Режим Lazy Lock работает во время прокрутки  окна, чтобы раскрасить текст,  выносимый на экран; следовательно, прокрутка медленнее, чем в простом режиме Font Lock.

Режим Lazy Lock не подсвечивает  буфер в процессе редактирования  (он откладывает подсветку изменений);  следовательно, редактирование  в нем быстрее,  чем в простом режиме Font Lock.

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

Режим Fast Lock работает только с буферами, обращающимися к файлам; режим Lazy

Lock работает с любыми буферами.

Режим Fast Lock создает файлы кеша; режим Lazy 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)))

17.16  Режим Highlight Changes

Используйте  M-x highlight-changes-mode,  чтобы включить  второстепенный режим, который показывает с помощью разных начертаний (в основном цветов), какие части текста буфера изменялись недавно.

17.17  Другие возможности X Windows

Следующие команды позволяют вам создавать и удалять фреймы, а также делать дру-

гие операции над ними:

C-z             Минимизирует выбранный фрейм  (iconify-or-deiconify-frame).    Обычное значение C-z, приостановка Emacs, бесполезно под оконной  системой, поэтому в данном случае у этого ключа другая привязка.

Если вы введете эту команду в пиктограмме фрейма Emacs, она деминимизи-

рует этот фрейм.

C-x 5 0      Удаляет выбранный фрейм  (delete-frame).   Это не  допускается,  если есть только один фрейм.

C-x 5 o      Выбирает другой фрейм, поднимает его и переносит в него  мышь,  чтобы он оставался выбранным. Если вы повторяете эту команду, она циклически проходит по всем фреймам на вашем терминале.

17.18  Неоконные терминалы

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

Чтобы создать новый фрейм и переключиться в него, используйте  C-x 5 2; для кругового прохода по существующим фреймам используйте C-x 5 o; чтобы удалить текущий фрейм, используйте C-x 5 0.

Каждый  фрейм имеет отличительный номер. Если ваш терминал может показывать в одно время только один фрейм,  то около начала строки режима появляется  номер n текущего фрейма в форме ‘Fn’.

‘Fn’ на самом деле  — это имя фрейма.   Вы также  можете  указать другое имя, если хотите, и вы можете выбирать фреймы по именам. Чтобы задать новое имя для текущего фрейма, используйте команду M-x set-frame-name hRETимя hRETi, а для выбора фрейма в соответствии с его именем используйте  M-x select-frame-by-name hRETимя hRETi.   Указанное вами имя появляется в строке режима, когда этот фрейм становится  выбранным.

Источник: Ричард Столмен, Руководство по GNU Emacs

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий