[содержание]   [назад]   [предыдущий]   [вверх]   [следующий]   [вперед]  


Знаки, ключи и команды

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

Виды пользовательского ввода

GNU Emacs использует для ввода с клавиатуры расширение набора знаков ASCII; он также воспринимает незнаковые события, включая функциональные клавиши и действия с клавишами мыши.

ASCII состоит из 128 знаковых кодов. Некоторым из этих кодов приписаны графические обозначения, такие как `а' и `='; остальные являются управляющими знаками, например Cоntrol-a (также именуется С-а для краткости). C-a получил свое имя из-за того, что вы набираете его, зажав клавишу CTRL и затем нажав а.

У некоторых управляющих знаков ASCII есть специальные названия, и большинство терминалов имеют специальные клавиши, с помощью которых их можно набрать, например: RET, TAB, DEL и ESC. Знак пробела обычно обозначается ниже как SPC, хотя строго говоря, он является графическим знаком, чье изображение должно быть пустым. На некоторых клавиатурах есть клавиша "linefeed"; это другое название для C-j.

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

На ASCII-терминалах существует только 32 управляющих знака. Это варианты с модификатором control для букв и знаков `@[]\^_'. Кроме того, клавиша shift не имеет смысла с управляющими знаками: C-a и C-A -- это одно и то же, и Emacs не может их различить.

Но во множестве знаков Emacs есть место для вариантов с control для всех печатных знаков и для различения между C-a и C-A. X Windows позволяет ввести все эти знаки. Например, C-- (то есть Control-минус) и C-5 -- допустимые команды Emacs в системе X.

Еще одно расширение множества знаков Emacs -- это дополнительные биты модификаторов. Чаще всего используется только один бит-модификатор, он называется Meta. Для любого знака есть его Meta-вариант; примеры включают Meta-а (для краткости М-а), М-А (это не то же самое, что М-а, но эти два знака имеют обычно одно и то же значение в Emacs), M-RET и M-C-a. По традиции мы обычно пишем С-М-а, а не М-С-а; но логично говоря, порядок набора клавиш CTRL и META не имеет значения.

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

Если у вас нет клавиши META, вы все же можете набрать Meta-знаки, используя последовательность двух знаков, начинающуюся с ESC. Таким образом, чтобы ввести M-а, вы можете набрать ESC a. Чтобы ввести С-М-а, вы должны набрать ESC C-a. ESC разрешена также и на терминалах с клавишами META, на случай, если вы привыкли использовать ее.

X Windows предоставляет несколько других клавиш-модификаторов, которые могут быть применены к любому вводимому знаку. Эти клавиши называются SUPER, HYPER и ALT. Мы пишем `s-', `H-' и `A-', чтобы сказать, что знак использует эти модификаторы. Таким образом, s-H-C-x -- это сокращение для Super-Hyper-Control-x. Не все X-терминалы в действительности предоставляют клавиши для этих модификаторов -- фактически многие терминалы имеют клавишу, помеченную ALT, которая на самом деле является клавишей META. Стандартные привязки ключей Emacs не содержат каких-либо знаков с этими модификаторами. Но вы можете придать им свои значения, настраивая Emacs.

Ввод с клавиатуры включает клавиши, не являющие знаками: например функциональные клавиши и курсорные стрелки. Кнопки мыши также выпадают из гаммы знаков. Вы можете модифицировать эти события с помощью клавиш-модификаторов CTRL, META, SUPER, HYPER и ALT точно так же, как и знаки клавиатуры.

Вводимые знаки и незнаковый ввод вместе называются событиями. Смотрите раздел `Input Events' в The Emacs Lisp Reference Manual, для дальнейшей информации. Если вы не программируете на Лиспе, а просто хотите переопределить значения некоторых знаков и незнаковых событий, смотрите раздел Настройка.

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

Ключи

Последовательность ключей, (или коротко, ключ) есть последовательность вводимых событий, которая воспринимается как целое, как "единая команда". Некоторые командные последовательности Emacs --- это просто одиночный знак или одно событие; например, просто C-f достаточно для перемещения вперед на один знак. Но в Emacs также есть команды, которые вызываются двумя или более событиями.

Если последовательность событий достаточна для вызова команды, она является законченным ключом. Примером законченных ключей могут быть C-a, X, RET, NEXT (функциональная клавиша), DOWN (стрелка), C-x C-f и C-x 4 C-f. Если последовательность недостаточна, чтобы составить законченный ключ, она называется префиксным ключом. В примерах выше C-x и C-x 4 являются префиксными ключами. Любая последовательность ключей -- это либо законченный, либо префиксный ключ.

Большинство одиночных знаков являются законченными ключами в стандартных привязках команд Emacs. Немногие из них являются префиксными ключами. Префиксный ключ объединяется со следующим событием в более длинную последовательность ключей, которая сама может быть законченной или префиксной. Например, C-x -- это префиксный ключ, поэтому C-x и следующее событие объединяются в двухзнаковую последовательность ключей. Большинство этих последовательностей являются законченными ключами, в том числе C-x C-f и C-x b. Некоторые, например C-x 4 и C-x r, сами являются префиксными ключами, приводящими к трехзнаковым последовательностям ключей. Нет ограничения на длину последовательности ключей, но на практике люди редко используют последовательности длиннее четырех событий.

Напротив, добавить события к законченному ключу вы не можете. Например, двухзнаковая последовательность C-f C-k не является ключом, так как C-f является законченным ключом сама по себе. Невозможно дать C-f C-k независимое значение как команде. C-f C-k -- это две команды, а не одна.

Из всего сказанного следует, что префиксными ключами в Emacs являются C-c, C-h, C-x, C-x RET, C-x @, C-x a, C-x n, C-x r, C-x v, C-x 4, C-x 5, C-x 6, ESC, M-g и M-j. Но этот список не встроен; это просто стандартная привязка ключей в Emacs. В процессе настройки Emacs вы можете сделать новые префиксные ключи или уничтожить эти. Смотрите раздел Настройка привязок ключей.

Если вы в самом деле создаете или удаляете префиксные ключи, это изменяет набор возможных последовательностей ключей. Например, если вы переопределяете C-f как префикс, C-f C-k автоматически становятся ключом (законченным, если вы не определите его тоже как префикс). Наоборот, если вы уничтожите определение префикса C-x 4, то С-х 4 f (или С-х 4 что-нибудь) не будет в дальнейшем ключом.

Напечатав знак вызова справки (C-h или F1) после префиксного знака, вы получите список команд, начинающихся с этого префикса. Есть несколько префиксных знаков, для которых C-h не работает -- по историческим причинам у них есть другое значение для C-h, которое непросто изменить. Но F1 должна работать для всех префиксных знаков.

Ключи и команды

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

Каждая команда имеет имя, выбранное для нее программистом. Обычно это имя составляется из нескольких английских слов, разделенных дефисами; например, next-line или forward-word. У команды также есть определение, являющееся программой на Лиспе; она заставляет функцию делать то, что она делает. На самом деле, команда в языке Emacs Lisp -- это особая разновидность лисповской функции; это такая функция, которая указывает, как читать аргументы при интерактивном вызове. Для получения большей информации о командах и функциях смотрите раздел `What Is a Function' в The Emacs Lisp Reference Manual. (Определение, которое мы использовали в данном руководстве, слегка упрощено.)

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

Когда мы говорим, что "C-n сдвигает вертикально вниз на одну строку", мы замалчиваем отличие, которое не относится к делу при обычном использовании, но существенно для понимания того, как настраивается Emacs. Это команда next-line, которая запрограммирована на сдвиг вниз. Ключ C-n имеет такое действие, так как он привязан к этой команде. Если вы перепривяжете С-n к команде forward-word, то он будет перемещать на одно слово вперед. Перепривязка клавиш -- обычный метод настройки.

В остальной части этого руководства мы обычно будем игнорировать эту тонкость, чтобы сохранить простоту. Чтобы дать необходимую для настройки информацию, мы ставим имя команды, которая в действительности выполняет работу, в круглых скобках после ссылки на ключ, который ее запускает. Например, мы будем говорить: "Команда С-n (next-line) передвигает точку вниз", имея в виду, что next-line -- это команда, которая двигает вниз, а С-n --- это ключ, который стандартно привязан к ней.

Раз уж мы говорим сейчас только об информации для настройки, то это подходящий момент, чтобы рассказать вам о переменных. Часто описание команд будет говорить: "Чтобы изменить это, установите переменную mumble-foo". Переменная -- это имя, используемое для запоминания значения. Многие описанные в этом руководстве переменные существуют просто для облегчения настройки: некоторая команда или другая часть Emacs проверяет переменную и ведет себя по-разному в зависимости от ее значения. Пока вы не интересуетесь настройкой, вы можете пропустить информацию о переменных. Когда вы будете готовы, чтобы заинтересоваться, прочитайте базовые сведения о переменных, и тогда информация об отдельных переменных будет иметь смысл. Смотрите раздел Переменные.

Наборы знаков для текста

Текст в буферах Emacs -- это последовательность восьмибитных байт. Каждый байт может содержать один знак ASCII. Допустимы как управляющие знаки ASCII (с восьмеричными кодами от 000 до 037, и 0177), так и печатные ASCII-знаки (с кодами от 040 до 0176); однако, управляющие знаки не из ASCII не могут появиться в буфере. Другие флаги-модификаторы, используемые при вводе с клавиатуры, такие как Meta, также недопустимы в буферах.

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

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

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


[содержание]   [назад]   [предыдущий]   [вверх]   [следующий]   [вперед]