|
Фреймы и X Windows@hyphenation{фрей-ме фрей-мы фрей-ма фрей-му фрей-мом} При использовании X Window System вы можете создавать в одном сеансе Emacs несколько окон уровня оконной системы. Каждое принадлежащее Emacs X-окно показывает один фрейм, который может содержать одно или несколько окон Emacs. Изначально фрейм содержит одно окно Emacs общего назначения, которое вы можете поделить вертикально или горизонтально на меньшие. Обычно фрейм имеет собственную эхо-область и минибуфер, но вы можете сделать фреймы без них -- они будут использовать эхо-область и минибуфер другого фрейма. Редактирование в одном фрейме затрагивает и другие фреймы. К примеру, если вы поместите текст в список уничтожений в одном фрейме, вы можете восстановить его в другом. Если вы выходите из Emacs через C-x C-c в одном фрейме, это удалит все фреймы. Чтобы удалить только один фрейм, используйте C-x 5 0. Чтобы избежать путаницы, мы резервируем слово "окно" для тех окон, которые реализует сам Emacs, и никогда не используем его для обозначения фрейма. Emacs, скомпилированный для MS-DOS, эмулирует некоторые аспекты оконной системы, так что вы сможете использовать многие возможности из описанных в этой главе. Смотрите раздел Клавиатура и мышь в MS-DOS, для дальнейшей информации. Команды мыши для редактированияКоманды мыши для выделения и копирования области в основном совместимы с
командами программы Если вы выделите область с помощью любой из этих команд и сразу же после этого нажмете функциональную клавишу DELETE, она удалит выделенную область. Функциональная клавиша BACKSPACE или ASCII-знак DEL не делают этого; и если вы нажмете между командой мыши и DELETE какую-то другую клавишу, DELETE не подействует таким образом.
Простейший способ уничтожить текст с помощью мыши -- нажать Mouse-1 в одном конце, а затем дважды нажать Mouse-3 на другом. Смотрите раздел Удаление и уничтожение. Чтобы скопировать текст в список уничтожений, не удаляя его из буфера, нажмите Mouse-3 только один раз или просто проведите по этому тексту с прижатой Mouse-1. Потом вы можете скопировать этот текст в другое место восстановлением. Чтобы восстановить уничтоженный или скопированный текст в
другое место, переведите туда мышь и нажмите Mouse-2. Смотрите раздел
Восстановление.
Однако, если Чтобы скопировать текст в другое X-окно, уничтожьте его или сохраните в списке уничтожений. Под X это кроме того установит первичное выделение. Затем используйте в программе, работающей в другом окне, команду "вставить", чтобы вставить текст выделения. Чтобы скопировать текст из другого X-окна, используйте в программе, работающей в другом окне, команды "вырезать" или "копировать", чтобы выделить нужный вам текст. Затем восстановите его в Emacs с помощью C-y или Mouse-2. Эти команды вырезания и вставки работают также и в MS-Windows. Когда Emacs помещает текст в список уничтожений или
перекладывает текст на вершину списка уничтожений, он устанавливает
первичное выделение X-сервера. Именно таким образом другие X-клиенты
могут получить доступ к этому тексту. Emacs также сохраняет текст в буфере
вырезок, но только если этот текст достаточно короткий
( Команды восстановления первого вхождения списка уничтожений на самом деле сначала проверяют, нет ли первичного выделения из других программ; после этого они проверяют, нет ли текста в буфере вырезок. Если ни тот, ни другой источник не предоставляют текста для восстановления, используется содержимое списка уничтожений. Вторичное выделениеВторичное выделение -- это другой способ выделения текста с использованием X Windows. Оно не использует точку или метку, поэтому вы можете использовать его для уничтожения текста без установки точки или метки.
Двойные и тройные щелчки M-Mouse-1 действуют на слова и строки, во многом как для Mouse-1. Если Следование по ссылкам с помощью мышиНекоторые буферы Emacs показывают различного рода перечни. Это перечни файлов, буферов, возможных завершений, совпадений с образцом и так далее. Поскольку восстановление в этих буферах бессмысленно, в большинстве из них Mouse-2 определена особо, как команда для использования или просмотра пункта, на котором вы щёлкнули. Например, если вы щелкните Mouse-2 на имени файла в буфере Dired,
вы обратитесь к этому файлу. Если вы щелкните Mouse-2 на сообщении об
ошибке в буфере Обычно вы можете судить о том, имеет ли Mouse-2 особое значение, по тому, что чувствительный текст подсвечивается, когда вы проводите над ним мышь. Щелчки мыши для менюЩелчки мыши, модифицированные с помощью клавиш CTRL и SHIFT, выводят меню.
Команды мыши для строки режимаВы можете использовать мышь на строке режима для выбора окон и манипуляций с ними.
C-Mouse-2 на полоске прокрутки разбивает соответствующее окно по горизонтали. Смотрите раздел Разделение окон. Создание фреймовПрефиксный ключ C-x 5 аналогичен C-x 4, и на них определены параллельные подкоманды. Разница между ними в том, что команды с C-x 5 создают новый фрейм, а не просто новое окно в выбранном фрейме (смотрите раздел Изображение в другом окне). Если запрошенный материал уже показывается в существующем видимом или минимизированном фрейме, эти команды используют существующий фрейм после его поднимания или деминимизации по необходимости. Команды на C-x 5 различаются по тому, как они находят или создают буфер для выбора:
Вы можете управлять видом вновь
создаваемых фреймов, устанавливая параметры фрейма в
Простейший способ указать основной шрифт для всех фреймов
Emacs --- через X-ресурс (смотрите раздел Ключи для задания
шрифта), но вы также можете сделать это, изменив
(add-to-list 'default-frame-alist '(font . "10x20")) Создание и использование фрейма SpeedbarФрейм 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' или с помощью ключа
Один X-сервер может обрабатывать более одного экрана. Когда вы открываете фреймы на экранах, принадлежащих одному серверу, Emacs знает, что они разделяют одну клавиатуру и воспринимает все команды, приходящие с этих экранов, как один поток ввода. Когда вы открываете фреймы на разных X-серверах, Emacs создаёт для каждого сервера отдельный поток ввода. Поэтому два пользователя могут одновременно печатать на двух дисплеях, и Emacs не смешивает их ввод. Каждый сервер имеет также собственный выбранный фрейм. Команды, которые вы вводите на конкретном X-сервере, относятся к выбранному фрейму этого сервера. Несмотря на это, люди, использующие одно и то же задание Emacs с разных дисплеев, все же могут вмешиваться в дела друг друга, если будут неосторожны. Например, если любой их них напечатает C-x C-c, это прекратит задание Emacs для всех! Фреймы специальных буферовВы можете сделать так, чтобы определённые буферы, для
которых Emacs обычно создаёт второе окно, если у вас есть только одно,
появлялись в особых собственных фреймах. Чтобы сделать это, установите
переменную Например, если вы установите эту переменную таким образом: (setq special-display-buffer-names '("*Completions*" "*grep*" "*tex-shell*")) то списки завершений, вывод В более общем случае вы можете установить
Переменная Те, кто знает Лисп, могут также сделать элемент
(функция аргументы...) где функция -- это символ. Тогда фрейм конструируется путем вызова функции; её первым аргументом является буфер, а остальными аргументами -- аргументы. Аналогичными средствами вы можете указать буферы, которые должны отображаться
в выбранном окне. Смотрите раздел Принудительное
изображение в том же окне. Показ в том же окне обладает приоритетом перед
показом в специальном фрейме; следовательно, если вы добавили имя буфера к
Установка параметров фреймаЭтот раздел описывает команды для изменения стиля отображения выбранного фрейма и его поведения в оконной среде.
В версиях 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. Одно начертание может выглядеть по-разному в разных фреймах; данная команда показывает его вид в том фрейме, где вы её набрали. Вот перечень стандартных определённых начертаний:
Если включён режим Transient Mark, текст области
подсвечивается, когда метка активна. Для этого используется начертание с именем
Один простой способ использовать разные начертания -- включить режим Font Lock. Этот второстепенный режим, всегда локальный для конкретного буфера, подбирает начертания в соответствии с синтаксисом редактируемого текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он умеет даже распознавать и правильно подсвечивать различные другие важные конструкции. Смотрите раздел Режим Font Lock, для получения большей информации о режиме Font Lock и синтаксической подсветке. Вы можете распечатать буфер с подсветкой, какую вы видите на экране, с
помощью команды Режим Font LockРежим Font Lock -- это второстепенный режим, всегда локальный для каждого буфера, который подсвечивает редактируемый вами текст, используя различные начертания в соответствии с синтаксисом текста. Он может распознавать комментарии и строки в большинстве языков; в некоторых языках он может также распознавать и правильно подсвечивать различные другие важные конструкции -- например, имена определяемых функций и зарезервированные ключевые слова. Команда M-x font-lock-mode
включает и выключает режим Font Lock в соответствии с аргументом и переключает,
если аргумент не задан. Функция (add-hook 'c-mode-hook 'turn-on-font-lock) Чтобы включить режим Font Lock автоматически во всех
режимах, которые его поддерживают, используйте функцию
(global-font-lock-mode 1) Когда вы редактируете текст в режиме
Font Lock, подсветка в измененной строке обновляется автоматически. Чаще всего
изменения не оказывают влияния на подсветку последующих строк, но иногда все же
влияют. Чтобы обновить подсветку нескольких строк, используйте команду M-g
M-g ( В некоторых основных режимах M-g M-g обновляет
подсветку всей текущей функции. (Как именно можно найти текущую функцию,
указывает переменная С числовым аргументом n, M-g M-g обновляет подсветку n строк над и под точкой, независимо от режима. Чтобы получить все преимущества режима Font Lock, вам придется выбрать такой шрифт по умолчанию, у которого есть жирный, курсивный и жирный курсивный варианты; или вам понадобится цветной монитор или монитор, отображающий много градаций серого. Переменная (setq font-lock-maximum-decoration '((c-mode . 1) (c++-mode . 1))) В больших буферах подсветка может быть слишком медленной,
поэтому вы можете подавить её. Переменная Подсветка комментариев и строк (или "синтаксическая" подсветка) основывается на анализе синтаксической структуры текста буфера. В целях увеличения скорости некоторые режимы, включая режим C и режим Lisp полагаются на особое соглашение: открывающая скобка в самом левом столбце всегда обозначает начало определения функции и, таким образом, всегда находится вне любой строки или комментария. (Смотрите раздел Определения функций.) Если вы не следуете этому соглашению, режим Font Lock может сделать неправильную подсветку текста после открывающей скобки в левом столбце, которая попадает в строку или комментарий. Переменная Образцы подсветки Font Lock уже существуют для многих
режимов, но вы можете захотеть раскрасить что-то дополнительно. Чтобы добавить
свои собственные образцы подсветки для определённого режима, вы можете
использовать функцию (font-lock-add-keywords 'c-mode '(("\\<\\(FIXME\\):" 1 font-lock-warning-face t))) Режимы поддержки Font LockРежимы поддержки убыстряют режим Font Lock в больших буферах. Есть два режима поддержки: режим Fast Lock и режим Lazy Lock. Они используют два разных метода ускорения режима Font Lock. Режим 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) Записывать файл кеша для маленьких буферов не имеет
смысла. Поэтому есть переменная, Переменная Переменная Режим 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 Lock откладывает
подсветку измененного текста. Переменная Обычно режим Lazy Lock подсвечивает ставшие видимыми
фрагменты буфера перед тем, как они впервые показываются на экране. Однако, если
значение В некоторых режимах, включая режим C и режим Emacs Lisp,
изменение содержимого одной строки изменяет контекст последующих строк и,
следовательно, ту подсветку, которая должна для них использоваться. Обычно вы
должны набрать M-g M-g, чтобы обновить подсветку последующих строк.
Однако, если вы установите переменную Когда Emacs бездействует продолжительное время, Lazy Lock подсвечивает дополнительные фрагменты буфера, которые ещё не показаны, на случай, если вы вынесете их на экран позднее. Это называется скрытой подсветкой. Переменная
Fast Lock или Lazy Lock?Вот простые указания, которые помогут вам выбрать один из режимов поддержки Font Lock.
Переменная (setq font-lock-support-mode '((c-mode . fast-lock-mode) (c++-mode . fast-lock-mode) (t . lazy-lock-mode))) Режим Highlight ChangesИспользуйте M-x highlight-changes-mode, чтобы включить второстепенный режим, который показывает с помощью разных начертаний (в основном цветов), какие части текста буфера изменялись недавно. Другие возможности X WindowsСледующие команды позволяют вам создавать и удалять фреймы, а также делать другие операции над ними:
Неоконные терминалыЕсли ваш терминал не обладает оконной системой, которую поддерживает 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. Указанное вами имя появляется в строке режима, когда этот фрейм становится выбранным. Назад | Вперед | Содержание |
|
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2024 |
Социальные сети