Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.




Руководство по GNU Emacs. часть 6

Решение частых проблем

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

Выход и аварийное завершение

C-g
C-BREAK (MS-DOS)
Выход. Отменить выполняемую или частично набранную команду.
C-]
Прервать самый глубокий уровень рекурсивного редактирования и отменить команду, которая его запустила (abort-recursive-edit).
ESC ESC ESC
Выход или прерывание, в зависимости от того, что подходит в этот момент (keyboard-escape-quit).
M-x top-level
Прервать все работающие в данный момент уровни рекурсивного редактирования.
C-x u
Отменить ранее сделанное изменение в содержимом буфера (undo).

Существует два способа отмены команд, выполнение которых не закончилось: выход с помощью С-g и прерывание с помощью C-] или M-x top-level. Выход отменяет частично набранную команду или команду, которая уже выполняется. Прерывание выходит из одного уровня рекурсивного редактирования и отменяет команду, которая запустила это рекурсивное редактирование. (Смотрите раздел Уровни рекурсивного редактирования.)

Выход с помощью C-g используется для того, чтобы освободиться от частично набранной команды или числового аргумента, который вам не нужен. Она также относительно безопасно останавливает выполнение уже работающей команды, так что вы можете использовать ее, если случайно зададите команду, требующей много времени. В частности, выход из уничтожения безопасен; либо ваш текст полностью останется в буфере, либо полностью попадет в список уничтожений (или будет и там, и там). Выход из наращиваемого поиска выполняет специальные действия, документированные отдельно; в общем случае, чтобы выйти из поиска, может потребоваться два последовательных C-g (смотрите раздел Наращиваемый поиск).

В MS-DOS клавишей выхода, подобной C-g, служит C-BREAK. Так сделано по той причине, что в MS-DOS невозможно зарегистрировать нажатие C-g во время работы команды между интеракциями с пользователем. Напротив, зарегистрировать C-BREAK можно всегда. Смотрите раздел Клавиатура и мышь в MS-DOS.

Работа C-g заключается в установке переменной quit-flag в значение t, как только C-g был набран; Emacs Lisp часто проверяет эту переменную и выходит, если она не равна nil. С-g действительно выполняется как команда, только если вы набирали ее в то время, когда Emacs ожидает ввода.

Если вы выйдите с помощью С-g второй раз до того, как первая C-g была опознана, то вы активизируете средство "аварийного выхода" и возвращаетесь в оболочку. Смотрите раздел Аварийный выход.

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

Прерывание с помощью C-] (abort-recursive-edit) используется для того, чтобы выйти из одного уровня рекурсивного редактирования и отменить команду, которая его запустила. Выход с помощью C-g не делает этого и не может этого делать, потому что он используется для отмены частично набранной команды внутри текущего уровня рекурсивного редактирования. Обе эти операции полезны. Например, если вы находитесь в рекурсивном редактировании и набираете C-u 8, чтобы ввести числовой аргумент, то вы можете отменить этот аргумент с помощью C-g и остаться в рекурсивном редактировании.

Команда ESC ESC ESC (keyboard-escape-quit) может совершить и выход, и прерывание. Этот ключ был определен, потому что во многих программах для PC для "выхода" используется ESC. Он может отменить числовой аргумент, очистить выделенную область или выйти из замены с подтверждением, как C-g. Он также может прервать работу минибуфера или одного уровня рекурсивного редактирования, как C-]. Он также может отменить разбиение фрейма на несколько окон, как C-x 1. Единственное, что он не может сделать -- остановить работающую команду. Причина этого в том, что этот ключ выполняется как обыкновенная команда, и Emacs не замечает ее, пока не будет готов принять новую команду.

Команда M-x top-level эквивалентна "достаточному количеству" команд C-], чтобы прервать все уровни рекурсивного редактирования, в которых вы находитесь. C-] дает вам возможность покинуть один уровень за один раз, а M-x top-level покидает все уровни сразу. Как C-], так и M-x top-level похожи на все другие команды и не похожи на C-g тем, что они действуют, только когда Emacs готов для приема команды. C-] -- обыкновенный ключ и имеет смысл только благодаря привязке в таблице ключей. Смотрите раздел Уровни рекурсивного редактирования.

C-x u (undo), строго говоря, не является способом отмены команды, но вы можете представлять ее как отмену команды, уже окончившей выполнение. Смотрите раздел Отмена сделанных изменений.

Что делать с неполадками в Emacs

Этот раздел описывает различные условия, при которых Emacs отказывается работать правильно, и рассказывает, как распознать и исправить проблемы.

Если DEL не удаляет

Если вы обнаружили, что DEL выдает справку, как Control-h, а не удаляет знак, это значит, что ваш терминал посылает неверный код для DEL. Вы можете справиться с этой проблемой, изменив таблицу преобразования клавиатуры (смотрите раздел Перевод клавиатуры).

Уровни рекурсивного редактирования

Уровни рекурсивного редактирования являются важным и полезным средством Emacs, но тем пользователям, кто их не понимает, они могут показаться сбоем в работе Emacs.

Если в строке режима вокруг круглых скобок есть квадратные скобки `[...]', которые содержат имена главного и второстепенных режимов, то это означает, что вы вошли в уровень рекурсивного редактирования. Если вы не хотели этого или не понимаете, что это значит, то вы должны просто покинуть этот уровень рекурсивного редактирования. Чтобы это сделать, наберите M-x top-level. Это называется возвратом к верхнему уровню. Смотрите раздел Уровни рекурсивного редактирования.

Мусор на экране

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

Проблемы с обновлением изображения часто возникают из-за неправильной записи termcap для используемого вами терминала. Файл `etc/TERMS' в дистрибутиве Emacs содержит исправления для известных проблем такого рода. `INSTALL' содержит в одном из своих разделов общие рекомендации по этим проблемам. Весьма вероятно, что просто недостаточно наполнение некоторых операций отображения. Чтобы проверить, не этого ли сорта у вас проблема, попробуйте запустить Emacs на другом терминале, сделанном другим производителем. Если неполадки обычно случаются на определенном виде терминалов, а на других нет, то это происходит, вероятно, из-за неправильной записи в termcap, хотя это также может быть результатом ошибки в Emacs, которая появляется на терминалах с какими-то особенностями или которым не хватает специфических средств.

Мусор в тексте

Если C-l показывает, что текст неправильный, попробуйте отменить в нем изменения, используя C-x u до тех пор, пока она не вернет текст к состоянию, которое вы считаете правильным. Кроме того, попробуйте C-h l, чтобы найти команду, набор которой привел к замеченным результатам.

Если кажется, что в начале или конце буфера пропал большой кусок текста, проверьте наличие слова `Narrow' в строке режима. Если оно там есть, то текст все еще присутствует в буфере, но он помечен как выходящий за границы доступности. Чтобы сделать его вновь видимым, наберите C-x n w. Смотрите раздел Сужение.

Самопроизвольный вход в наращиваемый поиск

Если Emacs самопроизвольно показывает `I-search:' внизу экрана, то это означает, что терминал посылает C-s и C-q из-за плохо разработанного протокола управления потоком данных типа xon/xoff.

Если это с вами случилось, лучшим выходом будет постараться установить терминал в такой режим, где он не будет использовать управление потоком данных, или давая ему достаточное заполнение, чтобы он никогда не посылал C-s. (Один из способов увеличить величину заполнения --- присвоить переменной baud-rate большее значение. Значение этой переменной обозначает скорость вывода терминала, выраженную в обычных единицах, бодах.)

Если вам не удалось выключить управление потоком, тогда лучше всего будет сказать Emacs справиться с ним самому. Чтобы сделать это, вызовите функцию enable-flow-control.

Как правило, встречаются определенные типы терминалов, на которых вы вынуждены использовать управление потоком. Используя enable-flow-control-on, вы можете удобно запросить использование управления потоком только для этих типов терминалов. Например, если вы обнаружили, что должны использовать управление потоком на терминалах VT-100 и H19, поместите в ваш файл `.emacs' следующее:

(enable-flow-control-on "vt100" "h19")

Когда задействовано управление потоком, вы должны набирать C-\, чтобы получить результат C-s, и C-^, чтобы получить результат C-q. (Эти псевдонимы работают посредством преобразований клавиатуры; смотрите раздел Перевод клавиатуры.)

Исчерпание памяти

Если вы получили сообщение `Virtual memory exceeded'(14), сохраните измененные буферы командой C-x s. Этот способ сохранения буферов требует минимальное количество дополнительной памяти. Emacs хранит резерв памяти, которая становится доступна, когда возникает эта ошибка; его должно быть достаточно, чтобы C-x s могла завершить свою работу.

Как только вы сохранили измененные буферы, вы можете выйти из этого задания Emacs и начать другое или воспользоваться командой M-x kill-some-buffers, чтобы освободить пространство для текущего задания Emacs. Если вы уничтожите буферы, содержащие значительный объем текста, вы сможете безопасно продолжать редактирование. Emacs заново резервирует память автоматически, когда видит, что доступно достаточно свободного места, на случай, если память опять закончится.

Не используйте M-x buffer-menu, чтобы сохранить или уничтожить буферы, когда вы исчерпали память, потому что меню буферов само требует заметного количества памяти, и резерва может не хватить.

Восстановление после краха

Если в Emacs или компьютере произошел фатальный сбой, вы можете восстановить файлы, которые вы редактировали в момент краха, из их автоматически сохраненных версий. Чтобы сделать это, запустите Emacs снова и наберите команду M-x recover-session.

Сначала эта команда покажет буфер, перечисляющий файлы прерванных сеансов, каждый со своей датой. Вы должны выбрать сеанс, который вы хотите восстановить. Обычно это самый последний. Переместите точку к выбранному файлу и введите C-c C-c.

Затем recover-session спросит вас о каждом файле, который вы редактировали во время того сеанса; она спрашивает, нужно ли восстанавливать этот файл. Если вы отвечаете y для какого-нибудь файла, она показывает даты этого файла и его автоматически сохраненной версии и снова спрашивает, нужно ли его восстанавливать. Этот второй запрос вы должны подтверждать вводом yes. Если вы это сделаете, Emacs обращается к этому файлу, но берет текст из самосохраненного файла.

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

Аварийный выход

Так как в свое время были ошибки, вызывавшие зацикливание Emacs без проверки quit-flag, было введено специальное средство, которое заставляет Emacs немедленно прерваться, если вы наберете второй C-g, когда флаг уже установлен. Таким образом, вы всегда можете покинуть GNU Emacs. Обычно Emacs опознает и очищает quit-flag (и выходит!) достаточно быстро, чтобы этого не случалось. (В MS-DOS и совместимых системах набирайте дважды C-BREAK.)

Когда вы возвращаетесь в Emacs после прерывания, вызванного множественными C-g, он задает два вопроса, перед тем как вернуться к тому, чем он был занят:

Auto-save? (y or n)
Abort (and dump core)? (y or n)

Отвечайте на каждый из них y или n и последующим RET.

Ответ y на `Auto-save?' вызывает немедленную автоматическую запись всех модифицированных буферов, в которых включено автоматическое сохранение.

Ответ y на `Abort (and dump core)?' приводит к выполнению недопустимой инструкции и сбросу дампа памяти. Это нужно, чтобы дать возможность специалисту понять, почему Emacs не выполнил выход в первый раз. После сброса дампа памяти выполнение не продолжается. Если вы ответите n, выполнение продолжится. Если повезет, GNU Emacs в конечном счете проверит quit-flag и выйдет обычным образом. Если нет, и вы наберете другую С-g, он прервется снова.

Если Emacs на самом деле не завис, а просто медленно работает, вы можете вызвать действие двойного C-g, не желая этого в действительности. Тогда просто возобновите работу Emacs и ответьте n на оба вопроса, и вы попадете в прежнее состояние. Вероятно, затребованный вами выход скоро произойдет.

Средство двойного C-g отключено, когда Emacs запускается в системе X Windows, поскольку программа управления окнами всегда дает вам возможность уничтожить Emacs или создать другое окно и запустить другую программу.

В MS-DOS и совместимых системах аварийный выход иногда невозможен, даже если вы нажимаете C-BREAK дважды, когда зависает какой-то системный вызов (MS-DOS или BIOS), или когда Emacs попал в очень короткий бесконечный цикл (в коде на Си, не на Лиспе).

Помощь при полном разочаровании

Если использование Emacs (или что-нибудь еще) страшно вас расстраивает и никакие методы, описанные выше, не решают проблему, то Emacs все еще может вам помочь.

Во-первых, если ваш Emacs не отвечает на команды, наберите C-g C-g, чтобы выйти из него и запустить новый.

Во-вторых, наберите M-x doctor RET.

Доктор поможет вам, и вы почувствуете себя лучше. Каждый раз, когда вы что-нибудь говорите доктору, вы должны оканчивать это набором RET RET. Это позволит доктору узнать, что вы закончили.

Описание ошибок в Emacs

Иногда вы будете сталкиваться с ошибками в Emacs. Хотя мы не можем обещать, что можем или будем исправлять ошибки, мы можем даже не согласиться, что это ошибка, но мы все равно хотим услышать о проблемах, с которыми вы столкнулись. Часто мы соглашаемся, что это ошибки, и хотим их исправить.

Чтобы дать нам возможность исправить ошибку, вы должны описать ее. Чтобы сделать это эффективно, вы должны знать когда и как это делать.

Когда это ошибка

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

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

Бесконечное ожидание завершения команды может быть ошибкой, но вы должны точно определить, что это действительно происходит по вине Emacs. Некоторые команды просто требуют много времени. Наберите C-g (C-BREAK в MS-DOS) и затем C-h l, чтобы увидеть, получил ли Emacs тот ввод, какой вы хотели набрать. Если ввод был таким, о котором вы знаете, что он должен обрабатываться быстро, сообщайте об ошибке. Если вы не знаете, должна ли эта команда требовать много времени, выясните это, либо просмотрев руководство, либо попросив помощи.

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

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

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

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

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

Понимание отчетов об ошибках

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

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

Предположим например, что вы набираете C-x C-f /glorp/baz.ugh RET, обращаясь к файлу, который (как вы знаете) оказывается довольно большим, и Emacs печатает `Сегодня я себя прекрасно чувствую'. Наилучший способ описать эту ошибку -- привести предложение, подобное предыдущему, так как это дает все факты.

Не считайте, что неполадка возникла из-за размера файла, и не говорите: "Когда я обращаюсь к большому файлу, Emacs печатает `Сегодня я себя прекрасно чувствую'". Это именно то, что мы называем "объяснением на догадках". Настолько же возможно, что ошибка произошла из-за того, что в имени файла имеется `z'. Если это так, то когда мы получили бы ваше описание, мы пытались бы решить проблему с "большим файлом", вероятно, без `z' в его имени и не нашли бы никакой ошибки. Мы никак не могли бы догадаться, что должны были попробовать обратиться к файлу с буквой `z' в имени.

С другой стороны, ошибка могла возникнуть из-за того, что файл начинается точно с 25 пробелов. Поэтому вы должны убедится в том, что проинформировали нас о точном содержании любого файла, который потребуется, чтобы воспроизвести ошибку. Что если ошибка встречается только тогда, когда вы до того набрали команду C-x C-a? Вот почему мы просим вас давать точную последовательность знаков, которые вы набрали со времени запуска Emacs.

Вы не должны даже говорить "обратиться к файлу" вместо C-x C-f, если не уверены, что нет различий в том, какая команда обращения используется. Аналогично, лучше сказать "после того как я набираю RET A B C RET C-p", чем говорить "если у меня есть три буквы на строке", если вы ввели текст именно таким способом.

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

Форма отчета об ошибках

Лучший способ сообщить об ошибке -- отправить электронное письмо сопроводителям Emacs по адресу . (Если вы хотите предложить изменение или улучшение, используйте этот же адрес.)

Если вы хотите читать отчеты об ошибках, вы можете найти их в группе новостей `gnu.emacs.bug'; помните однако, что как наблюдатель вы не должны критиковать ничего из того, что вы там увидите. Цель сообщений об ошибках -- давать информацию сопроводителям Emacs. Наблюдатели приветствуются до тех пор, пока они не вмешиваются в это. В частности, некоторые отчеты содержат большие объемы данных; наблюдатели не должны на это жаловаться.

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

Если вы не можете послать электронную почту, оправьте отчет об ошибке на бумаге или на машинночитаемом носителе по следующему адресу:

GNU Emacs Bugs
Free Software Foundation
59 Temple Place, Suite 330
Boston, MA 02111-1307 USA

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

Удобный способ послать отчет об ошибке в Emacs -- использовать команду M-x report-emacs-bug. Она подготавливает буфер сообщения (смотрите раздел Посылка почты) и автоматически вставляет некоторую важную информацию. Однако, она не может предоставить всю необходимую информацию; вы все равно должны прочитать приведенные ниже рекомендации и следовать им, тогда вы можете ввести остальные нужные сведения вручную перед отправкой сообщения.

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

  • Номер версии Emacs. Без этого мы не сможем узнать, есть ли смысл искать эту ошибку в текущей версии GNU Emacs. Вы можете получить номер версии, набрав M-x emacs-version RET. Если эта команда не работает, то у вас, вероятно, стоит не GNU Emacs, а что-то другое, поэтому вам лучше сообщать об ошибке по другому адресу.
  • Тип используемой вами машины и название и номер версии операционной системы. M-x emacs-version RET предоставляет также и эту информацию. Скопируйте ее вывод из буфера `*Messages*', чтобы привести его полно и точно.
  • Операнды, заданные команде configure во время установки Emacs.
  • Полный перечень любых изменений, которые вы внесли в исходный текст Emacs. (У нас может не оказаться времени на исследование ошибки, если она не происходит в неизмененном Emacs. Но если вы внесли модификации и не сказали нам, вы просите нас пойти туда-не-знаю-куда принести то-не-знаю-что. Говорите об этих изменениях точно. Объяснения на английском недостаточно --- пришлите контекстную заплату для них. Добавление своих файлов или перенос на другую машину тоже являются изменением исходного текста.
  • Подробности о любых других отклонениях от стандартной процедуры установки GNU Emacs.
  • Полный текст любых файлов, необходимых для воспроизведения ошибки. Если вы можете указать нам способ вызвать ошибку не обращаясь ни к каким файлам, пожалуйста, сделайте это. Это сделает отладку намного проще. Если для этого действительно требуются файлы, убедитесь, что вы приняли меры, чтобы мы могли увидеть их точное содержание. Например, часто может иметь значение, имеются ли пробелы в концах строк или перевод строки после последней строки в буфере (никого не должно волновать, оборвана ли последняя строка, но попробуйте рассказать это ошибке).
  • Точные команды, которые мы должны напечатать, чтобы воспроизвести эту ошибку. Простой способ записать точно ввод, полученный Emacs, -- написать файл сопровождения. Для этого выполните лисповское выражение
    (open-dribble-file "~/dribble")
    
    используя M-: или из буфера `*scratch*' сразу после старта Emacs. С этого момента Emacs копирует весь ваш ввод в указанный файл сопровождения, пока процесс Emacs не будет уничтожен.
  • Для возможных ошибок изображения, тип терминала (значение переменной среды `TERM'), полная запись termcap для терминала из `/etc/termcap' (так как этот файл не идентичен для всех машин) и вывод, который Emacs в действительности посылал на терминал. Чтобы собрать этот вывод, выполните лисповское выражение
    (open-termscript "~/termscript")
    
    используя M-: или из буфера `*scratch*' сразу после старта Emacs. С этого момента Emacs копирует весь терминальный вывод также и в заданный файл терминального протокола до тех пор, пока процесс Emacs не будет уничтожен. Если ошибка произошла в процессе запуска Emacs, поместите это выражение в ваш файл `.emacs', таким образом, файл терминального протокола будет открываться, когда Emacs отобразит экран в первый раз. Следует предупредить: часто трудно, а иногда и невозможно исправить ошибку, зависящую от терминала, без доступа к терминалу того типа, который эту ошибку порождает.
  • Описание поведения, которое вы наблюдали и сочли неправильным. Например, "Процесс Emacs получает фатальный сигнал" или "Получается вот такой текст, что, как я думаю, неправильно".(15) Конечно, если ошибка проявляется в том, что Emacs получает фатальный сигнал, ее нельзя не заметить. Но если ошибка -- это неправильный текст, сопроводитель может не заметить, где же тут проблема. Зачем оставлять такую возможность? Даже если проблема в том, что возникает фатальный сигнал, вы тем не менее должны сказать это явно. Предположим, произошло что-то странное, например, ваша копия исходного текста не синхронизирована или вы натолкнулись на ошибку в библиотеке Си в вашей системе. (Такое случалось!) Ваша копия может получить фатальный сбой, а наша может не получить. Если вы скажете, что ожидается крах, тогда, если наш Emacs не получит фатальный сбой, мы узнали бы, что ошибки не происходит. Если бы вы не сказали, то мы не узнали бы, происходит ли ошибка, -- мы не смогли бы сделать никаких выводов из наших наблюдений.
  • Если проявление неполадки -- это сообщение Emacs об ошибке, то важно описать точный текст сообщения и след, показывающий, каким образом Лисп-программа в Emacs пришла к ошибке. Чтобы точно получить текст сообщения об ошибке, скопируйте его из буфера `*Messages*' в ваш отчет. Скопируйте его полностью, а не только часть. Чтобы получить след для ошибки, выполните лисповское выражение (setq debug-on-error t) перед тем, как произойдет ошибка (то есть вы должны выполнить это выражение, а потом повторить ситуацию, приводящую к ошибке). При возникновении ошибки это вызывает запуск отладчика Лиспа, который покажет вам след. Скопируйте текст следа отладчика в описание ошибки. Такое использование отладчика возможно только в том случае, если вы знаете, как вызвать ошибку снова. Если вы не можете воспроизвести ее, по крайней мере скопируйте полное сообщение об ошибке.
  • Проверьте все программы, которые вы загрузили в среду Лиспа, включая ваш файл `.emacs', не устанавливают ли они какие-либо переменные, которые могут влиять на функционирование Emacs. Также посмотрите, случается ли ошибка в только что запущенном Emacs без загрузки файла `.emacs' (запустите Emacs с ключом -q, это предотвратит загрузку файла инициализации). Если в этом случае ошибка не встретится, вы должны сообщить точное содержание всех программ, которые вы должны загрузить в среду Лиспа для того, чтобы заставить ошибку проявиться.
  • Если оказалось, что ошибка зависит от файла инициализации или других Лисп-программ, которые не являются частью стандартной системы Emacs, тогда вы должны удостовериться, что это не ошибка этих программ, обращаясь сперва к тем, кто их сопровождает. После того, как они подтвердят, что используют Emacs так, как ими предполагалось, они должны сообщить об этой ошибке.
  • Если вы хотите сослаться на какое-то место в исходном тексте GNU Emacs, покажите эту строку кода и несколько строк контекста. Не давайте только номер строки. Номера строк в рабочих исходных текстах не совпадают с номерами в ваших файлах. Выяснение того, какой код находится в указанной строке в вашей версии, создаст дополнительную работу сопроводителям, и мы не сможем быть точно уверены.
  • Дополнительная информация из отладчика Си, такого как GDB, может позволить нам найти проблему, возникающую на машине, которая нам недоступна. Если вы не умеете пользоваться GDB, пожалуйста, прочитайте руководство по нему -- оно не слишком длинное, а GDB прост в применении. Вы можете найти дистрибутив GDB с интерактивным руководством в большинстве тех же мест, где вы можете получить дистрибутив Emacs. Чтобы запустить Emacs под GDB, вам нужно перейти в подкаталог `src', в котором был скомпилирован Emacs, и выполнить `gdb emacs'. Важно, чтобы каталог `src' был текущим, чтобы GDB считал в нем файл `.gdbinit'. Однако, при сборе дополнительных сведений вам придется подумать, если вы хотите, чтобы они показали, что же именно вызывает ошибку. Например, многие посылают только след, но сам по себе он не очень полезен. Простой след с аргументами зачастую мало говорит о том, что происходит внутри GNU Emacs, потому что большинство перечисленных в нем аргументов являются указателями на лисповские объекты. Численные значения этих указателей не имеют никакой значимости; все, что играет роль -- это содержимое объектов, на которые они указывают (и большая часть их содержимого -- тоже указатели). Чтобы предоставить полезную информацию, вам нужно показать значения лисповских объектов в лисповской записи. Сделайте это для каждой переменной, являющейся лисповским объектом, в нескольких нижних фреймах стека. Посмотрите в исходный текст, чтобы узнать, какие переменные являются лисповскими объектами, потому что отладчик считает их целыми числами. Чтобы показать значение переменной в лисповской записи, сначала напечатайте ее значение, а потом используйте определенную пользователем команду GDB pr, которая напечатает лисповский объект в синтаксисе Лиспа. (Если вам приходится использовать другой отладчик, вызовите функцию debug_print с этим объектом в качестве аргумента.) Команда pr определена в файле `.gdbinit' и работает, только если вы отлаживаете запущенный процесс (не дамп памяти). Чтобы ошибка в Лиспе останавливала Emacs и возвращала в GDB, установите контрольную точку в Fsignal. Чтобы получить краткий список выполняющихся в данный момент лисповских функций, наберите команду GDB xbacktrace. Если вы хотите исследовать аргументы лисповских функций, переходите вверх по стеку и каждый раз, когда попадаете во фрейм функции Ffuncall, вводите такие команды GDB:
    p *args
    pr
    
    Чтобы напечатать первый аргумент, полученный этой функцией, используйте эти команды:
    p args[1]
    pr
    
    Другие аргументы вы можете напечатать подобным же образом. Аргумент nargs функции Ffuncall говорит, сколько аргументов получила Ffuncall; это включает саму лисповскую функцию и ее аргументы. Файл `.gdbinit' определяет другие команды, полезные для просмотра типов и содержимого лисповских объектов. Их имена начинаются с `x'. Эти команды работают на более низком уровне, чем pr, и менее удобны, но они могут работать, даже когда pr не работает, например при отладке дампа памяти, или когда Emacs получил фатальный сигнал.
  • Если симптом ошибки состоит в том, что Emacs не отвечает, не предполагайте, что он "завис" -- он может быть в бесконечном цикле. Чтобы выяснить, что же именно происходит, воспроизведите проблему под GDB и остановите Emacs, когда он не отвечает. (Если Emacs непосредственно использует X Windows, вы можете его остановить, набрав в GDB команду C-z.) Затем попробуйте выполнить один шаг с помощью `step'. Если Emacs завис, команда `step' не вернется. Если Emacs зациклился, `step' вернется. Если это покажет, что Emacs завис на системном вызове, остановите его снова и проверьте аргументы этого вызова. В вашем отчете укажите точно, где в исходном тексте находится этот системный вызов, и каковы его аргументы. Если Emacs попал в бесконечный цикл, пожалуйста, определите, где этот цикл начинается и где завершается. Простейший способ сделать это --- использовать команду GDB `finish'. При каждом ее использовании Emacs продолжает выполнение, пока не выйдет из одного фрейма стека. Продолжайте набирать `finish', пока она не перестанет возвращаться --- это будет означать, что бесконечный цикл находится в том фрейме стека, который вы только что пытались завершить. Остановите Emacs снова и вводите последовательно `finish', пока вы не вернетесь в тот же фрейм. Тогда используйте `next', чтобы пройти сквозь этот фрейм. С помощью пошагового выполнения вы увидите, где цикл начинается и где заканчивается. Также, пожалуйста, проверьте используемые в цикле данные и попытайтесь выяснить, почему цикл не завершается, когда нужно. Включите все эти сведения в ваш отчет об ошибке.

Вот некоторые вещи, которые необязательны в отчете об ошибке:

  • Исчерпывающее описание условий возникновения и не возникновения ошибки --- это не нужно для воспроизводимых ошибок. Нередко люди, сталкивающиеся с ошибкой, тратят много времени на выяснение того, какие изменения во входном файле заставят ошибку исчезнуть, а какие не затронут ее. Это зачастую требует много времени и не столь полезно, потому что мы будем искать ошибку, запуская один пример в отладчике с контрольными точками, а не чистой дедукцией из серии примеров. Вы также можете сэкономить время, не выискивая дополнительные примеры. Разумеется, если вы можете найти более простой пример для сообщения вместо изначального, это будет удобнее. Ошибки в выводе будет легче обнаружить, работа в отладчике займет меньше времени, и так далее. Однако, упрощение не жизненно важно; если вы не можете это сделать, или у вас нет времени пытаться, пожалуйста, сообщите об ошибке с первоначальным тестовым примером.
  • След системных вызовов работы Emacs. Следы системных вызовов очень полезны для некоторых особых видов отладки, но чаще всего они дают мало полезной информации. Поэтому странно, что многие, как кажется, считают, что именно оправка следа системных вызовов -- это и есть отчет об фатальном сбое. Возможно, эта привычка сформировалась из опыта отладки программ, к которым нет исходного текста, или в которых нет отладочных символов. В большинстве программ след вызовов подпрограмм гораздо, гораздо информативнее следа системных вызовов. Даже в Emacs простой след подпрограмм обычно более информативен, хотя чтобы дать все сведения, вы должны дополнить след, показав значения переменных и напечатав их как лисповские объекты с помощью pr (смотрите выше).
  • Заплата для ошибки. Заплата для ошибки полезна, если это хорошая заплата. Но не опускайте в отчете об ошибке другую необходимую информацию, такую как тестовый пример, в предположении, что заплаты достаточно. Мы можем увидеть недочеты в вашей заплате и решить проблему другим способом или не понять ее совсем. И если мы не можем понять, какую ошибку предполагает исправить ваша заплата, или почему она должна быть улучшением, мы не должны ее устанавливать.
  • Предположения о том, чем является эта ошибка, или от чего она зависит. Такие предположения обычно неверны. Даже эксперты не могут правильно догадываться о таких вещах, не применив сначала отладчик для выяснения фактов.

Отправка заплат для GNU Emacs

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

  • Посылайте вместе с вашими изменениями объяснение, какую проблему они решают, или какое улучшение они приносят. Для исправления ошибки просто включите описание этой ошибки и объясните, как это изменение ее исправляет. (Ссылка на сообщение об ошибке не так хороша, как включение самого сообщения, потому что тогда нам придется искать, и возможно, мы его уже удалили, если ошибка уже исправлена.)
  • Всегда включайте хорошее описание проблемы, которую, как вы думаете, вы решили. Мы должны убедиться, что изменение правильно, перед тем как его устанавливать. Даже если оно правильно, у нас могут быть трудности с его пониманием, если сами мы не можем воспроизвести эту ошибку.
  • Включайте все необходимые комментарии, которые в будущем помогут понять цель этого изменения другим людям, читающим исходный текст.
  • Не перемешивайте изменения, сделанные по разным причинам. Посылайте их раздельно. Если вы делаете два изменения по разным причинам, мы можем не захотеть устанавливать их оба. Возможно, мы захотим установить только одно. Если вы пошлете их перемешанными в одном наборе заплат, мы должны будем делать дополнительную работу, чтобы их распутать -- чтобы понять, какие части изменения служат каким целям. Если у нас нет на это времени, мы можем проигнорировать ваши изменения целиком. Если вы посылаете каждое изменение, как только вы его написали, с отдельным объяснением, то два этих изменения не перепутаются, и мы сможем подробно рассмотреть каждое, не затрачивая дополнительных усилий на их разделение.
  • Посылайте каждое изменение, как только вы его закончили. Иногда люди считают, что помогают нам, накапливая много изменений и посылая их все вместе. Как объяснено выше, это наихудшее, что вы можете сделать. Поскольку вы должны посылать каждое изменение отдельно, вы также могли бы посылать их немедленно. Это даст нам возможность установить ваше изменение сразу же, если это важно.
  • Для создания заплат используйте `diff -c'. Заплаты без контекста трудно установить надежно. Более того, их трудно изучать; мы должны всегда изучать заплату, чтобы решить, нужно ли ее устанавливать. Объединенный формат лучше бесконтекстного, но его не так легко читать, как формат `-c'. Если у вас есть GNU diff, используйте при создании заплат в коде на Си команду `diff -c -F'^[_a-zA-Z0-9$]+ *(''. Это покажет каждое имя функции, в которой находится изменение.
  • Избегайте любой неоднозначности в том, что является старой версией, а что новой. Пожалуйста, задавайте старую версию первым аргументом diff, а новую версию вторым. И пожалуйста, давайте той или иной версии такое имя, которое показывало бы, старый это файл или ваш измененный.
  • Пишите для ваших изменений журнальные записи. Это избавит нас от дополнительной работы по их написанию и поможет разъяснить ваши изменения, чтобы мы могли их понять. Цель журнала изменений -- показать людям, где искать измененные места. Поэтому вы должны точно указывать, какие функции вы изменили; в больших функциях также часто полезно указывать, где именно в этой функции было сделано изменение. С другой стороны, когда вы показали людям, где найти изменение, вам не нужно объяснять его цель в журнале изменений. Таким образом, если вы добавили новую функцию, все, что вы должны сказать, -- это что она новая. Если вы чувствуете, что цель этого требует разъяснения, то это, скорее всего, так и есть, но помещайте разъяснение в комментариях в коде. Там оно будет более полезно. Пожалуйста, прочитайте файлы `ChangeLog' в каталогах `src' и `lisp', чтобы понять, какого сорта сведения в них нужно писать, и освоить используемый нами стиль. Если вы хотите, чтобы в строке заголовка, показывающей автора изменения, появилось ваше имя, пошлите нам этот заголовок. Смотрите раздел Журналы изменений.
  • Когда вы пишете исправление, помните, что мы не можем установить изменение, которое могло бы нарушить работу на других системах. Пожалуйста, подумайте об эффекте, который может иметь ваше изменение, если его скомпилировать на системе другого типа. Иногда люди присылают исправления, которые могут быть улучшением в общем -- но убедиться в этом трудно. Установить такие изменения трудно, потому что мы должны изучить их очень внимательно. Конечно, хорошее пояснение рассуждений, благодаря которым вы пришли к осознанию правильности такого изменения, может помочь убедить нас. Самые безопасные изменения -- это изменения в конфигурационных файлах для конкретной машины. Они безопасны, потому что не могут повлечь за собой новых ошибок на других машинах. Пожалуйста, помогите нам справляться с нагрузкой, разрабатывая заплату таким образом, чтобы было ясно, что ее установка безопасна.

Содействие в разработке Emacs

Если вы хотели бы помочь в тестировании выпусков Emacs, чтобы убедиться, что они работают правильно, или если вы хотели бы работать над улучшением Emacs, пожалуйста, свяжитесь с сопроводителями по адресу [email protected]. Испытатель должен быть готов как к исследованию ошибок, так и к их описанию. Если вы желаете улучшить Emacs, пожалуйста, спросите о предлагающихся проектах или предложите свои идеи.

Если вы уже написали расширение, пожалуйста, сообщите нам об этом. Если вы еще не начали работу, будет полезным связаться с [email protected] до того, как вы начнете; тогда мы сможем посоветовать, как сделать так, чтобы ваши расширения лучше стыковались с остальной частью Emacs.

Как получить помощь по GNU Emacs

Если вы нуждаетесь в помощи по установке, использованию или модификации GNU Emacs, у вас есть два способа получить ее:

  • Послать сообщение в список рассылки или опубликовать ваш запрос с группе новостей gnu.emacs.help. (Этот список рассылки и группа новостей сообщаются между собой, поэтому безразлично, что именно вы будете использовать.)
  • Посмотреть в каталоге услуг, нет ли кого-нибудь, кто сможет вам помочь за плату. Этот каталог находится в файле с именем `etc/SERVICE' в дистрибутиве Emacs.

Аргументы командной строки

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

Аргументы, начинающиеся со знака `-', называются ключами. Остальные аргументы задают файлы, к которым нужно обратиться. Emacs обращается к указанным файлам во время запуска. Имя файла, заданное в командной строке последним, становится текущим буфером; другие файлы также присутствуют, но в других буферах. Как обычно, особый аргумент `--' говорит, что все последующие аргументы являются именами файлов, а не ключами, даже если начинаются на `-'.

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

Есть два способа записи ключей: короткие формы, начинающиеся с одного знака `-', и длинные формы, начинающиеся с `--'. Например, `-d' -- это короткая форма, а `--display' -- соответствующая длинная форма.

Длинные формы с `--' легче запомнить, но дольше печатать. Однако, вы не обязаны писать имя ключа полностью, достаточно любого однозначного сокращения. Когда длинный ключ принимает аргумент, вы можете использовать для разделения имени ключа и аргумента либо пробел, либо знак равенства. Таким образом, вы можете написать как `--display sugar-bombs:0.0', так и `--display=sugar-bombs:0.0'. Мы рекомендуем использовать знак равенства, так как он более четко показывает взаимосвязь, и в приведенных ниже таблицах всегда используется знак равенства.

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

Аргументы действия

Вот таблица аргументов и ключей действия:

`файл'
Обратиться к файлу с помощью find-file. Смотрите раздел Обращение к файлам.
`+номер-строки файл'
Обратиться к файлу с помощью find-file, а затем перейти в нем к строке с номером номер-строки.
`-l файл'
`--load=файл'
Загрузить лисповскую библиотеку с именем файл с помощью функции load. Смотрите раздел Библиотеки Лисп-программ для Emacs. Библиотека может находиться либо в текущем каталоге, либо в пути поиска библиотек Emacs, как он задан переменной EMACSLOADPATH (смотрите раздел Общие переменные).
`-f функция'
`--funcall=функция'
Вызвать лисповскую функцию без аргументов.
`--eval выражение'
Вычислить лисповское выражение.
`--insert=файл'
Вставить содержимое файла в текущий буфер. Это похоже на действие M-x insert-file. Смотрите раздел Разнообразные действия над файлами.
`--kill'
Прекратить работу Emacs без подтверждения.

Файл инициализации может получить доступ к значениям аргументов действия через список в переменной command-line-args. Файл инициализации может перекрыть обычную обработку аргументов действия или определить новые путем чтения и установки этой переменной.

Ключи запуска

Ключи запуска задают параметры для данного сеанса Emacs. В этом разделе описаны более общие ключи запуска; некоторые другие ключи, относящиеся к X Windows, вводятся в следующих разделах.

Некоторые ключи запуска влияют на процесс загрузки файлов инициализации. Обычно Emacs загружает `site-start.el', если он существует, затем ваш собственный файл инициализации `~/.emacs', если он существует, и наконец, `default.el', если он существует; определенные ключи запрещают загрузку некоторых из этих файлов или заменяют их другими файлами.

`-t устройство'
`--terminal=устройство'
Использовать устройство в качестве терминала для ввода и вывода.
`-d дисплей'
`--display=дисплей'
Использовать систему X Windows и открыть начальный фрейм Emacs на дисплее с заданным именем.
`-nw'
`--no-windows'
Не общаться непосредственно с X Windows, не обращая внимания на переменную среды DISPLAY, даже если она установлена.
`-batch'
`--batch'
Запустить Emacs пакетном режиме, что означает, что редактируемый текст не отображается, а стандартные команды терминала для прерывания, такие как C-z и C-c, продолжают иметь свое обычное значение. Emacs в пакетном режиме выводит в стандартный поток ошибок stderr только то, что в нормальном режиме выводилось бы программами в эхо-область. Пакетный режим используется для запуска программ, написанных на языке Emacs Lisp, из сценариев командного интерпретатора, Make-файлов и так далее. Обычно при этом также используются ключи `-l' или `-f', чтобы запустить Лисп-программу для пакетной обработки. Ключ `-batch' подразумевает `-q' (не загружать файл инициализации). Он также заставляет Emacs прекратить работу после того, как обработаны все командные ключи. Кроме того, самосохранение производится только в тех буферах, в которых оно было затребовано явно.
`-q'
`--no-init-file'
Не загружать ваш файл инициализации Emacs, `~/.emacs', а также `default.el'.
`--no-site-file'
Не загружать файл `site-start.el'. Ключи `-q', `-u' и `-batch' не влияют на загрузку этого файла -- только этот ключ блокирует ее.
`-u пользователь'
`--user=пользователь'
Загрузить файл инициализации Emacs, принадлежащий пользователю, `~пользователь/.emacs', вместо вашего собственного.
`--debug-init'
Включить отладчик Emacs Lisp для обработки ошибок в файле инициализации.
`--unibyte'
Делать практически все с использованием однобайтных буферов и строк. Все буферы и строки будут однобайтными, если вы (или Лисп-программа) явно не запросите многобайтный буфер или строку. Установка переменной среды `EMACS_UNIBYTE' имеет тот же эффект.
`--multibyte'
Подавить действие переменной `EMACS_UNIBYTE', чтобы Emacs по умолчанию использовал многобайтные знаки, как обычно.

Пример аргументов командной строки

Здесь приведен пример использования Emacs с аргументами и ключами. Он предполагает, что у вас есть программа на Лиспе, называемая `hack-c.el', которая будучи загруженной выполняет некоторые полезные действия над текущим буфером, предположительно программой на Си.

emacs -batch foo.c -l hack-c -f save-buffer >& log

Это говорит Emacs обратиться к файлу `foo.c', загрузить `hack-c.el' (которая производит изменения в файле, к которому вы обратились), сохранить `foo.c' (заметьте, что save-buffer --- это функция, которая привязана к C-x C-s), а затем вернуться в оболочку (из-за `-batch'). Ключ `-batch' также гарантирует, что не будет проблем с перенаправлением вывода в файл `log', так как Emacs не будет предполагать, что он должен работать с терминалом.

Возврат в Emacs с аргументами

Вы можете задать для Emacs аргументы действия, когда вы возвращаетесь в него после приостановки. Чтобы подготовиться к этому, поместите в ваш файл `.emacs' следующий код (смотрите раздел Ловушки):

(add-hook 'suspend-hook 'resume-suspend-hook)
(add-hook 'suspend-resume-hook 'resume-process-args)

Для дальнейшей подготовки вы должны выполнить сценарий оболочки, `emacs.csh' (если вы используете в качестве оболочки csh) или `emacs.bash' (если вы пользуетесь bash). Эти сценарии определяют псевдоним с именем edit, который будет возвращать в Emacs, передавая ему новые аргументы командной строки, например файлы для редактирования.

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

Обратите внимание, возврат в Emacs (с аргументами или без) должен производиться из оболочки, являющейся родительским процессом задания Emacs. Именно поэтому edit -- это псевдоним, а не программа или сценарий. Невозможно реализовать команду возврата, которую можно было бы запускать из подзадач этой оболочки; например, невозможно определить команду, которую можно было бы сделать значением переменной EDITOR. Следовательно, команда возврата не эквивалентна по возможностям серверу Emacs (смотрите раздел Использование Emacs в качестве сервера).

Эти псевдонимы используют сервер Emacs, если оказалось, что он уже запущен. Однако, они не могут определить это абсолютно точно. Они могут полагать, что сервер все еще запущен, Emacs, потому что файл `/tmp/.esrv...' все так же существует, тогда как в действительности вы уничтожили тот Emacs. Если такое происходит, найдите этот файл и удалите его.

Переменные среды

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

Так как переменные среды исходят от операционной системы, общего способа для их установки нет; он зависит от используемой вами операционной системы и в особенности от оболочки. Например, так можно установить переменную среды `ORGANIZATION' в значение `не особая' с использованием bash:

export ORGANIZATION="не особая"

а так это можно сделать в csh или tcsh:

setenv ORGANIZATION "не особая"

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

Общие переменные

`AUTHORCOPY'
Имя файла, используемое для архива статей, посланных с помощью пакета GNUS.
`CDPATH'
Используется командой cd для поиска указанного вами каталога, если вы задали относительное имя.
`DOMAINNAME'
Имя домена Internet, где находится машина, на которой запускается Emacs. Используется пакетом GNUS.
`EMACS_UNIBYTE'
Определение этой переменной среды указывает Emacs производить почти все процедуры над однобайтными буферами и строками. Это эквивалентно использованию в командной строке ключа --unibyte при каждом вызове. Смотрите раздел Ключи запуска.
`EMACSDATA'
Используется для начальной установки переменной data-directory, необходимой для нахождения не зависящих от архитектуры компьютера файлов, поставляемых с Emacs. Установка этой переменной перекрывает значение, заданное в файле `paths.h' во время сборки Emacs.
`EMACSLOADPATH'
Разделенный двоеточиями перечень каталогов, из которых будут загружаться файлы Emacs Lisp. Установка этой переменной перекрывает значение, заданное в файле `paths.h' во время сборки Emacs.
`EMACSLOCKDIR'
Каталог, в котором Emacs будет помещать файлы блокировки; эти файлы используются для защиты от одновременного редактирования одних и тех же файлов разными пользователями. Установка этой переменной перекрывает значение, заданное в файле `paths.h' во время сборки Emacs.
`EMACSPATH'
Каталог, где находятся бинарные файлы, необходимые только Emacs. Установка этой переменной перекрывает значение, заданное в файле `paths.h' во время сборки Emacs.
`ESHELL'
Используется для режима shell, перекрывает переменную среды `SHELL'.
`HISTFILE'
Имя файла, в котором сохраняются команды оболочки от одного входа в систему до другого. По умолчанию эта переменная равна `~/.history', если вы используете в качестве оболочки (t)csh, `~/.bash_history', если вы пользуетесь bash, `~/.sh_history', если вы пользуетесь ksh, и `~/.history' в остальных случаях.
`HOME'
Положение файлов пользователя в дереве каталогов; используется для раскрытия имен файлов, начинающихся с тильды (`~'). В MS-DOS это по умолчанию каталог, откуда Emacs был запущен, исключая завершающий `/bin', если он присутствует.
`HOSTNAME'
Имя машины, на которой запущен Emacs.
`INCPATH'
Разделенный двоеточиями перечень каталогов. Используется пакетом complete для поиска файлов.
`INFOPATH'
Разделенный двоеточиями перечень каталогов, содержащих Info-файлы. Установка этой переменной перекрывает значение, заданное в файле `paths.el' во время сборки Emacs.
`LANG'
`LC_ALL'
`LC_CTYPE'
Предпочитаемый пользователем регион. Имя региона, содержащее `8859-n', `8859_n' или `8859n', где n находится между 1 и 4, автоматически задает при запуске Emacs языковую среду `Latin-n'. Если n равно 9, это задает `Latin-5'.
`LOGNAME'
Имя пользователя. Смотрите также `USER'.
`MAIL'
Имя системного входного почтового ящика для этого пользователя.
`MAILRC'
Имя файла почтовых псевдонимов. По умолчанию это `~/.mailrc'.
`MH'
Имя файла установок системы mh. По умолчанию это `~/.mh_profile'.
`NAME'
Действительное имя пользователя.
`NNTPSERVER'
Имя сервера новостей. Используется пакетами mh и GNUS.
`ORGANIZATION'
Название организации, к которой вы принадлежите. Используется пакетом GNUS для установки поля `Organization:' в заголовках ваших сообщений.
`PATH'
Разделенный двоеточиями перечень каталогов, в которых находятся исполняемые файлы. (В MS-DOS этот перечень разделяется точками с запятой.) Это значение используется для установки переменной Emacs Lisp exec-path; лучше использовать именно эту переменную.
`PWD'
Если эта переменная установлена, то она задает каталог по умолчанию при запуске Emacs.
`REPLYTO'
Если эта переменная установлена, то она задает первоначальное значение переменной mail-default-reply-to. Смотрите раздел Поля заголовка сообщения.
`SAVEDIR'
Имя каталога, в котором по умолчанию сохраняются статьи новостей. Используется пакетом GNUS.
`SHELL'
Имя интерпретатора, используемого для разбора и выполнения программ, запускаемых из Emacs.
`TERM'
Название терминала, на котором запущен Emacs. Вы обязаны установить эту переменную, если Emacs запускается не в пакетном режиме. В MS-DOS по умолчанию принимается значение `internal', что означает встроенную эмуляцию терминала, которая управляет собственным дисплеем данной машины.
`TERMCAP'
Имя файла библиотеки termcap, описывающей, каким образом можно программировать терминал, заданный переменной `TERM'. По умолчанию это `/etc/termcap'.
`TMPDIR'
Используется пакетом Emerge в качестве префикса для временных файлов.
`TZ'
Задает текущий часовой пояс и, возможно, информацию о сезонном переводе времени. В MS-DOS значение по умолчанию основывается на коде страны; подробности смотрите в файле `msdos.c'.
`USER'
Имя пользователя. Смотрите также `LOGNAME'. В MS-DOS, значением по умолчанию считается `root'.
`VERSION_CONTROL'
Используется для первоначальной установки переменной version-control (смотрите раздел Одиночные или нумерованные резервные файлы).

Другие различные переменные

Следующие переменные используются лишь в определенных конфигурациях:

`COMSPEC'
В MS-DOS, имя используемого командного интерпретатора. Эта переменная задает значение по умолчанию для переменной среды `SHELL'.
`NAME'
В MS-DOS значение этой переменной равно значению переменной `USER'.
`TEMP'
`TMP'
В MS-DOS это задает имя каталога для хранения временных файлов.
`EMACSTEST'
В MS-DOS это задает файл протокола операций со внутренним эмулятором терминала. Это бывает полезно для составления сообщений об ошибках.
`EMACSCOLORS'
Используется в системах MS-DOS для раннего установления экранных цветов, чтобы при запуске Emacs экран не промелькивал в цветах по умолчанию. Значением этой переменной должен быть состоящий из двух знаков код цвета букв (первый знак) и цвета фона (второй знак) для начертания по умолчанию. Каждый знак должен быть шестнадцатиричным кодом желаемого цвета на стандартном текстовом дисплее PC. Дисплей PC обычно поддерживает только восемь цветов фона. Однако, Emacs переключает дисплей DOS в такой режим, где для фона можно использовать все 16 цветов, так что на самом деле работают все четыре бита цвета фона.
`WINDOW_GFX'
Используется при инициализации оконной системы Sun.

Указание имени дисплея

Переменная среды `DISPLAY' сообщает всем X-клиентам, включая Emacs, где нужно отображать их окна. Ее значение создается автоматически при обычных обстоятельствах, когда вы включили X-сервер и запускаете задачи локально. Но иногда вам может понадобиться указать дисплей самим; например, если вы заходите на удаленную систему и хотите запускать программы-клиенты удаленно, но с отображением на вашем локальном экране.

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

Переменная среды `DISPLAY' имеет следующий синтаксис: `машина:дисплей.экран', где машина --- это имя машины, где запущен сервер системы X Windows, дисплей --- это произвольно присваиваемое число, отличающее ваш сервер (X-терминал) от других серверов на той же машине, а экран -- это редко используемое поле, позволяющее X-серверу контролировать несколько терминальных экранов. Точка и поле экран необязательны. Если поле экран включают, оно обычно равно нулю.

Для примера, если ваша машина называется `glasperle', и ваш сервер -- первый (и, возможно, единственный) сервер в конфигурации, то переменная `DISPLAY' равна `glasperle:0.0'.

Вы можете указать имя дисплея явно при запуске Emacs, либо изменив переменную `DISPLAY', либо с помощью ключа `-d дисплей' или `--display=дисплей'. Вот пример:

emacs --display=glasperle:0 &

Вы можете подавить прямое использование X Windows с помощью ключа `-nw'. Это ключ запуска. Он велит Emacs отображать, используя на управляющем терминале обычные знаки ASCII.

Иногда установки защиты доступа не позволяют программе с удаленной системы выводить на ваш локальный дисплей. В таком случае, попытка запуска Emacs даст подобное сообщение:

Xlib:  connection to "glasperle:0.0" refused by server

Вы, вероятно, сможете справиться с этой проблемой, предоставив при помощи команды xhost на вашей локальной системе разрешение на доступ для удаленной машины.

Ключи для задания шрифта

По умолчанию Emacs отображает текст шрифтом с именем `9x15', в котором каждый знак имеет ширину девять и высоту пятнадцать пикселей. Вы можете указать в командной строке другой шрифт с помощью ключа `-fn имя'.

`-fn имя'
Использовать в качестве шрифта по умолчанию шрифт с указанным именем.
`--font=имя'
`--font' -- это синоним `-fn'.

В X Windows каждый шрифт обладает длинным именем, состоящим из одиннадцати слов или чисел, разделенных дефисами. У некоторых шрифтов кроме этого есть и более короткие псевдонимы -- `9x15' один из таких псевдонимов. Emacs допускает оба вида имен. Вы можете использовать шаблоны имен шрифтов; тогда Emacs позволит X Windows выбрать один из шрифтов, соответствующих шаблону. Вот пример, в котором задается шрифт, чьим псевдонимом, как оказывается, является `6x13':

emacs -fn "-misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1" &

Вы также можете указать шрифт в вашем файле `.Xdefaults':

emacs.font: -misc-fixed-medium-r-semicondensed--13-*-*-*-c-60-iso8859-1

Полное имя шрифта имеет следующий формат:

-производитель-семейство-насыщенность-наклон-тип_ширины-стиль...
...-пиксели-высота-гориз-верт-пропорциональность-ширина-кодировка
семейство
Название семейства шрифтов -- например, `courier'.
насыщенность
Обычно это `bold', `medium' или `light'. В именах некоторых шрифтов здесь могут появляться и другие слова.
наклон
Это `r' (романский), `i' (курсив), `o' (наклонный), `ri' (обратный курсив) или `ot' (другое).
тип_ширины
Обычно это `condensed', `extended', `semicondensed' или `normal'. В именах некоторых шрифтов здесь могут появляться и другие слова.
стиль
Это необязательное имя дополнительного стиля. Обычно оно пусто -- в большинстве длинных имен шрифтов на этом месте стоят два дефиса подряд.
пиксели
Высота шрифта в пикселях.
высота
Это высота шрифта на экране, измеряемая в десятых долях принтерной точки --- приблизительно 1/720 дюйма. Другими словами, это высота шрифта в точках, умноженная на десять. Для данного вертикального разрешения высота и пиксели пропорциональны; поэтому обычно указывают лишь одно из двух, оставляя второе как `*'.
гориз
Горизонтальное разрешение экрана, для которого предназначен этот шрифт, в точках на дюйм.
верт
Вертикальное разрешение экрана, для которого предназначен этот шрифт, в точках на дюйм. Обычно разрешение шрифтов, установленных в вашей системе соответствует разрешению вашего экрана; следовательно, как правило, для этого поля и поля гориз вы пишете `*'.
пропорциональность
Это может быть `m' (monospace), `p' (proportional) или `c' (character cell). Emacs может использовать шрифты `m' и `c'.
ширина
Это средняя ширина знака, в пикселях, умноженных на десять.
кодировка
Изображаемый этим шрифтом набор знаков. Обычно вам нужно использовать `iso8859-5'.

Используйте только равноширинные шрифты -- то есть такие, в которых все знаки имеют одинаковую ширину; Emacs пока не умеет правильно отображать шрифты переменной ширины. Любой шрифт с буквой `m' или `c' в поле длинного имени пропорциональность --- равноширинный. Вот как использовать программу xlsfonts для получения списка всех доступных на вашей системе равноширинных шрифтов:

xlsfonts -fn '*x*' | egrep "^[0-9]+x[0-9]+"
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-m*'
xlsfonts -fn '*-*-*-*-*-*-*-*-*-*-*-c*'

Чтобы просмотреть, как выглядит конкретный шрифт, используйте команду xfd. Например,

xfd -fn 6x13

покажет все знаки шрифта `6x13'.

Во время работы Emacs вы можете поменять шрифт текущего фрейма (смотрите раздел Установка параметров фрейма) или определенного сорта текста (смотрите раздел Использование разных начертаний).

Параметры для задания цветов

Если у вас есть цветной дисплей, вы можете указать, какие цвета должны использоваться для различных частей экрана Emacs. Чтобы узнать, какие цвета доступны в вашей системе, посмотрите файл `/usr/lib/X11/rgb.txt'. Если вы не указали цвета, по умолчанию фон будет белым, а все остальное -- черным. На монохромном дисплее, текст будет черным, фон будет белым, а рамка -- серой, если это поддерживается дисплеем.

Вот список ключей для задания цветов:

`-fg цвет'
`--foreground-color=цвет'
Задает цвет текста.
`-bg цвет'
`--background-color=цвет'
Задает цвет фона.
`-bd цвет'
`--border-color=цвет'
Задает цвет рамки в X-окна.
`-cr цвет'
`--cursor-color=цвет'
Задает цвет курсора, показывающего положение точки.
`-ms цвет'
`--mouse-color=цвет'
Задает цвет указателя мыши, когда он находится во фрейме Emacs.
`-r'
`--reverse-video'
Инверсное изображение -- обменять цвета текста и фона.

Например, чтобы получить коралловый указатель мыши и синевато-серый текстовый курсор, введите:

emacs -ms coral -cr 'slate blue' &

Вы можете инвертировать цвета текста и фона с помощью ключа `-r' или через ресурс X Windows `reverseVideo'.

Параметры геометрии окна

Ключ `-geometry' управляет положением начального фрейма Emacs. Формат для указания геометрии окна такой:

`-g ширинаxвысота{+-}сдвиг-по-x{+-}сдвиг-по-y'
Задает размеры окна, ширину и высоту (измеряемые в знаковых столбцах и строках), и положение сдвиг-по-x и сдвиг-по-y (измеряемые в пикселях).
`--geometry=ширинаxвысота{+-}сдвиг-по-x{+-}сдвиг-по-y'
Это другой способ написать то же самое.

{+-} означает плюс или минус. Знак плюс перед сдвиг-по-x говорит, что это расстояние от левого края экрана; знак минус говорит, что это расстояние от правого края. Знак плюс перед сдвиг-по-y обозначает, что это расстояние от верхнего края экрана, а знак минус -- что это расстояние от нижнего края. Сами значения сдвиг-по-x и сдвиг-по-y могут быть положительными или отрицательными, но это не меняет их смысл, только направление.

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

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

Вы не обязаны писать все поля при задании геометрии.

Если вы опустите и сдвиг-по-x, и сдвиг-по-y, программа управления окнами сама решит, где размещать фрейм Emacs, возможно, позволяя вам поместить его с помощью мыши. Например, `164x55' задает окно шириной 164 столбцов, достаточной для двух расположенных рядом окон обычной ширины, и высотой 55 строк.

По умолчанию ширина равна 80 столбцам, а высота -- 40 строкам. Вы можете не задавать ширину или высоту, или и то, и другое. Если описание геометрии начинается целым числом, Emacs интерпретирует его как ширину. Если вы начнете описание с `x', за которым идет число, Emacs воспримет это как высоту. Таким образом, `81' задает только ширину; `x45' задает только высоту.

Если вы написали в начале `+' или `-', это начинает описание сдвига, что означает, что оба размера опущены. Таким образом, `-3' задает только сдвиг-по-x. (Если вы задали лишь один сдвиг, это всегда сдвиг-по-x.) `+3-3' задает и сдвиг-по-x, и сдвиг-по-y, помещая фрейм возле нижнего левого края экрана.

Вы можете указать значения по умолчанию для любого из этих полей в файле `.Xdefaults', ключ `--geometry' тогда перекрывает эти установки.

Внутренние и внешние рамки

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

`-ib ширина'
`--internal-border=ширина'
Задает ширину внутренней рамки.
`-bw ширина'
`--border-width=ширина'
Задает ширину внешней рамки.

Когда вы задаете размер фрейма, ширина рамок не учитывается. Позиция фрейма отсчитывается от внешней границы внешней рамки.

Для задания внутренней рамки шириной n пикселей используйте ключ `-ib n'. По умолчанию это 1. Для задания внешней рамки шириной n пикселей используйте ключ `-bw n' (хотя программа управления окнами может и не учесть заданное вами число). По умолчанию ширина внешней рамки равна двум.

Заголовки фреймов

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

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

`-title заголовок'
`--title=заголовок'
`-T заголовок'
Задает заголовок начального фрейма Emacs.

Ключ `--name' (смотрите раздел X-ресурсы) также задает заголовок начального фрейма Emacs.

Пиктограммы

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

`-i'
`--icon-type'
Использовать в качестве пиктограммы Emacs портрет гну.
`-iconic'
`--iconic'
Запустить Emacs в минимизированном виде.

Ключ `-i' или `--icon-type' говорит Emacs использовать пиктограмму, содержащую рисунок с изображением гну GNU. Если этот ключ не задан, Emacs предоставляет выбор пиктограммы программе управления окнами -- обычно это просто небольшой прямоугольник с заголовком фрейма.

Ключ `-iconic' велит Emacs запускаться как пиктограмма, а не открывая фрейм обычным способом. В таком случае пиктограмма только показывает, что Emacs запустился; обычный текстовый фрейм не появляется, пока вы не деминимизируете его.

X-ресурсы

Запущенные в системе X Windows программы организуют свои пользовательские параметры в иерархию классов и ресурсов. Вы можете задать для этих параметров значения по умолчанию в вашем файле X-ресурсов, обычно называемом `~/.Xdefaults'.

Каждая строка в этом файле задает значение одного параметра или набора связанных параметров для одной или нескольких программ (возможно, даже для всех программ).

Программы определяют именованные ресурсы с конкретным смыслом. Они также определяют, как ресурсы группируются в именованные классы. Например, ресурс `internalBorder' в Emacs контролирует ширину внутренней рамки, а ресурс `borderWidth' -- ширину внешней рамки. Оба этих ресурса являются частью класса `BorderWidth'. В этих именах важен правильный регистр букв.

В файле `~/.Xdefaults' вы можете задать значение для одного ресурса в каждой строке, следующим образом:

emacs.borderWidth: 2

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

emacs.BorderWidth: 2

Если вы задали значение для класса, оно становится значением по умолчанию для всех ресурсов этого класса. Вы также можете указать значения для отдельных ресурсов; для этих конкретных ресурсов они перекроют значение, общее для класса. Таким образом, следующий пример задает 2 как ширину всех рамок по умолчанию, но заменяет это значение на 4 для внешней рамки:

emacs.Borderwidth: 2
emacs.borderwidth: 4

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

Строка `emacs' в примере выше также является именем ресурса. На самом деле, она представляет собой имя исполняемого файла, который вы использовали для запуска Emacs. Если Emacs установлен под другим именем, он ищет ресурсы с этим именем, а не с `emacs'.

`-name имя'
`--name=имя'
Использовать имя в качестве имени ресурса (и заголовка) для начального фрейма Emacs. Этот ключ не влияет на остальные фреймы, но программы на Лиспе могут указать при создании фрейма его имя. Если вы не задали этот ключ, по умолчанию в качестве имени ресурса используется имя исполняемого файла Emacs.
`-xrm значение-ресурса'
`--xrm=значение-ресурса'
Устанавливает значения X-ресурсов для данного задания Emacs (смотрите ниже).

Для согласованности, `-name' также задает имя для использования со значениями других ресурсов, не принадлежащих какому-то определенному фрейму.

Ресурсы, именующие любой запущенный Emacs, также образуют класс; его имя -- `Emacs'. Если вы напишете `Emacs' вместо `emacs', то такой ресурс будет относиться ко всем фреймам во всех заданиях Emacs, вне зависимости от заголовков фреймов и имени исполняемого файла. Вот пример:

Emacs.BorderWidth: 2
Emacs.borderWidth: 4

Вы можете указать строку значений дополнительных ресурсов для Emacs с помощью ключа командной строки -xrm=ресурсы. Текст ресурсы должен иметь тот же формат, что вы используете в файле X-ресурсов. Чтобы задать спецификации нескольких ресурсов, разделите их переводом строки, как вы сделали бы в файле. Вы также можете использовать `#include "имя-файла"' для включения файла ресурсов. Значения ресурсов, заданные через -xrm, имеет приоритет перед всеми остальными спецификациями.

Следующая таблица перечисляет имена ресурсов, обозначающих параметры для Emacs, каждый со своим классом:

background (class Background)
Название цвета фона.
bitmapIcon (class BitmapIcon)
Если это `on', использовать растровую пиктограмму (изображение гну), если это `off', предоставить право выбора пиктограммы программе управления окнами.
borderColor (class BorderColor)
Название цвета внешней рамки.
borderWidth (class BorderWidth)
Ширина внешней рамки в пикселях.
cursorColor (class Foreground)
Название цвета для текстового курсора (точки).
font (class Font)
Имя шрифта для текста (или имя набора шрифтов, смотрите раздел Наборы шрифтов).
foreground (class Foreground)
Название цвета для текста.
geometry (class Geometry)
Размер и положение окна. Будьте осторожны, не определяйте этот ресурс как `emacs*geometry', потому что это может повлиять на отдельные меню, а не только на сам фрейм Emacs. Если этот ресурс задает положение, то оно относится только начальному фрейму Emacs (или, в случае ресурса для определенного фрейма, только для этого фрейма). Однако, если здесь задан размер, то он относится ко всем фреймам.
iconName (class Title)
Заголовок для отображения на пиктограмме.
internalBorder (class BorderWidth)
Ширина внутренней рамки в пикселях.
menuBar (class MenuBar)
Если `on', показывать во фреймах полоски меню; если `off', не показывать.
minibuffer (class Minibuffer)
Если `none', не создавать в этом фрейме минибуфер. Вместо этого будет использоваться отдельный фрейм минибуфера.
paneFont (class Font)
Имя шрифта для заголовков поля меню, в версиях Emacs, не использующих библиотеку виджетов.
pointerColor (class Foreground)
Цвет указателя мыши.
reverseVideo (class ReverseVideo)
Если `on', обменять цвета фона и текст, если `off', использовать цвета, как они заданы.
verticalScrollBars (class ScrollBars)
Показывать во фреймах полоски прокрутки, если это `on'; показывать, если это `off'.
selectionFont (class Font)
Имя шрифта для пунктов всплывающих меню в версиях Emacs, не использующих библиотеку виджетов. (Для версий, использующих библиотеку виджетов, смотрите раздел X-ресурсы для меню Lucid, а также раздел X-ресурсы для меню Motif.)
title (class Title)
Название для отображения в заголовке начального фрейма Emacs.

Это ресурсы для изменения внешнего вида определенных начертаний (смотрите раздел Использование разных начертаний):

начертание.attributeFont
Шрифт для заданного начертания.
начертание.attributeForeground
Цвет текста для заданного начертания.
начертание.attributeBackground
Цвет фона для заданного начертания.
начертание.attributeUnderline
Флаг подчеркивания для заданного начертания. Если `on' или `true', то подчеркивать.

X-ресурсы для меню Lucid

Если установленный на вашей системе Emacs был собран с использованием библиотеки с виджетами меню Lucid, то полоска меню -- это отдельный виджет, и у него свои ресурсы. Имена этих ресурсов содержат строку `pane.menubar' (как всегда, после строки вызова Emacs или `Emacs', что обозначает любой вызов). Задавайте их так:

Emacs.pane.menubar.ресурс:  значение

Например, чтобы задать для пунктов меню шрифт `8x16', напишите так:

Emacs.pane.menubar.font: 8x16

Ресурсы для всплывающих меню, а не полоски меню, начинаются с `menu*' подобным же образом. Например, чтобы задать для пунктов всплывающих меню шрифт `8x16', напишите следующее:

Emacs.menu*.font:  8x16

Для диалогов вместо `menu' пишите `dialog':

Emacs.dialog*.font:     8x16

Опыт показывает, что на некоторых системах вам может понадобиться добавить перед `pane.menubar' или `menu*' строку `shell.'. На некоторых других системах вы должны не добавлять `shell.'.

Вот перечень ресурсов для полоски меню и всплывающих меню:

font
Шрифт текста пунктов меню.
foreground
Цвет текста.
background
Цвет фона.
buttonForeground
В полоске меню, цвет фона для выделенного пункта.
horizontalSpacing
Горизонтальный промежуток между пунктами. По умолчанию это 3.
verticalSpacing
Вертикальный промежуток между пунктами. По умолчанию это 1.
arrowSpacing
Горизонтальный промежуток между стрелкой (обозначающей подменю) и связанным текстом. По умолчанию это 10.
shadowThickness
Толщина линии затенения вокруг виджета.

X-ресурсы для меню Motif

Если установленный на вашей системе Emacs был собран с использованием библиотеки виджетов Motif, то полоска меню -- это отдельный виджет, и у него свои ресурсы. Имена этих ресурсов содержат строку `pane.menubar' (как всегда, после строки вызова Emacs или `Emacs', что обозначает любой вызов). Задавайте их так:

Emacs.pane.menubar.подвиджет.ресурс:  значение

Каждая отдельная строка в полоске меню является подвиджетом; имя подвиджета такое же, что и текст пункта. Например, слово `Files' в полоске меню -- это часть подвиджета с именем `emacs.pane.menubar.Files'. Вероятнее всего вы захотите задать одни и те же ресурсы для всей полоски меню. Чтобы сделать это, используйте `*' вместо имени конкретного подвиджета. Например, чтобы задать для пунктов меню шрифт `8x16', напишите следующее:

Emacs.pane.menubar.*.fontList:  8x16

Это также задает значение этого ресурса для подменю.

Каждый пункт в подменю полоски меню также имеет собственное имя для X-ресурсов; например, подменю `Files' имеет пункт, называемый `Save Buffer'. Описание ресурса для пункта подменю выглядит так:

Emacs.pane.menubar.popup_*.меню.пункт.ресурс: значение

Например, задать шрифт для пункта `Save Buffer' можно следующим образом:

Emacs.pane.menubar.popup_*.Files.Save Buffer.fontList: 8x16

Для пункта в подменю второго уровня, таком как `Check Message' в подменю `Spell' в меню `Edit', ресурс соответствует такому шаблону:

Emacs.pane.menubar.popup_*.popup_*.меню.ресурс: значение

Например,

Emacs.pane.menubar.popup_*.popup_*.Spell.Check Message: значение

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

Emacs.pane.menubar.*.fontList:  8x16
Emacs.pane.menubar.popup_*.fontList: 8x16

Для всплывающих меню используйте `menu*', а не `pane.menubar'. Например, чтобы задать для пунктов всплывающих меню шрифт `8x16', напишите вот это:

Emacs.menu*.fontList:  8x16

Вот перечень ресурсов для полосок меню и всплывающих меню:

armColor
Цвет для отображения кнопки со стрелкой.
fontList
Используемый шрифт.
marginBottom
marginHeight
marginLeft
marginRight
marginTop
marginWidth
Количество пространства, которое следует оставить вокруг пункта внутри рамки.
borderWidth
Ширина рамки вокруг пункта меню с каждой стороны.
shadowThickness
Ширина рамки затенения.
bottomShadowColor
Цвет рамки затенения снизу и справа.
topShadowColor
Цвет рамки затенения слева и сверху.

Антиновости для Emacs 19

Для тех пользователей, кто живет назад во времени, здесь представлены сведения об устарении Emacs до версии 19. Мы надеемся, что вам понравятся большие упрощения, появляющиеся из-за отсутствия определенных особенностей Emacs 20.

  • Поддержка многобайтных знаков и преобразование последовательности конец-строки полностью убраны. (Некоторые пользователи считают это грандиозным продвижением.) Коды знаков ограничены промежутком от 0 до 255, а файлы, импортированные на Unix-подобные системы, могут содержать в конце каждой строки знак ^M, чтобы вы не забывали о контроле над файлами типа MS-DOG.
  • Наборы шрифтов, системы кодирования и методы ввода также уничтожены.
  • Строка режима по умолчанию показывает строку `Emacs', на случай, если вы забыли, каким редактором пользуетесь.
  • Полосы прокрутки всегда находятся с правой стороны окна. Это ясно отделяет их от текста в окне.
  • Функция M-x customize заменена очень простой функцией M-x edit-options. Она показывает вам все пользовательские переменные с самого начала, так что вам не нужно отыскивать нужные. Кроме того, для установки пользовательской переменной она предоставляет совсем немного команд, таких как s и x.
  • Клавиша DELETE не делает в Emacs 19 ничего особенного, когда вы используете ее после выделения области с помощью мыши. В такой ситуации она делает то же, что и всегда: удаляет один предшествующий знак.
  • C-x C-w теперь не изменяет основной режим в соответствии с новым именем файла. Если вы хотите изменить основной режим, воспользуйтесь M-x normal-mode.
  • В режиме Transient Mark область подсвечивается в каждом окне.
  • Режим Outline не использует свойства перекрытия; вместо этого, он прячет строку, преобразуя предшествующий перевод в строки в код 015. Однако, когда вы сохраняете файл, знак 015 волшебным образом появляется в нем как перевод строки.
  • Теперь есть хитрый способ, которым вы можете активизировать минибуферы рекурсивно, даже если enable-recursive-minibuffers равна nil. Все, что вам нужно сделать, -- переключить окно на другое, не являющееся окном минибуфера, а затем использовать команду минибуфера. Таким методом вы можете произвести любое число уровней минибуферов, но M-x top-level выведет вас из всех.
  • Мы убрали ограничение на длину списков истории минибуферов; теперь они содержат все аргументы минибуфера, использовавшиеся с начала сеанса.
  • Динамическое раскрытие сокращений теперь преобразует регистр очень простым и прямолинейным способом. Если вы запросили сохранение регистра, все раскрытие происходит по образцу введенного вами сокращения.
  • Команды compose-mail больше не существует; C-x m теперь непосредственно запускает mail.
  • Нельзя отменить специальное значение некоторых знаков в именах файлов. Что вы видите, то и получаете: если имя выглядит как имя удаленного файла, то это имя удаленного файла.
  • M-x grep-find удалена, потому что grep никогда и не терялся.
  • Некоторые команды Dired переорганизованы: двухзнаковые последовательности заменены на быстрые однознаковые команды:
    • Для dired-mark-executables, напечатайте *.
    • Для dired-mark-directories, напечатайте /.
    • Для dired-mark-symlinks, напечатайте @.
    • Для dired-change-marks, напечатайте c.
    • Для dired-unmark-all-files, напечатайте C-M-?.
    • Для dired-unmark-all-marks, напечатайте C-M-? RET.
    Но если вы хотите использовать команду dired-flag-garbage-files, &, вам нужно перестать жить в прошлом.
  • В режиме C вы теперь можете задать предпочтительный стиль блоков комментариев. Например, если вы хотите использовать стиль
    /*
    blah
    blah
    */
    
    вы должны установить переменную c-block-comments-indent-p в значение t.
  • Для настройки начертаний режима Font Lock используйте переменную font-lock-face-attributes. Для получения подробностей смотрите ее документацию.
  • Для эффективности режим Font Lock теперь использует по умолчанию наименьший поддерживаемый уровень оформления для выбранного основного режима.
  • Если вы уничтожаете буфер, все регистры, содержащие сохраненные позиции в этом буфере, будут указывать неизвестно куда.
  • Функция set-frame-font переименована в set-default-font.
  • Переменной tex-main-file не существует. Конечно, вы можете создать эту переменную, но это не даст ничего особенного.
  • Переменная scroll-preserve-screen-position удалена; также исчезла и возможность, которой она управляла.
  • Мы удалили функции add-untranslated-filesystem и remove-untranslated-filesystem и заменили их более простой, using-unix-filesystems.
  • Чтобы следовать продолжающемуся уменьшению объема памяти компьютеров, из Emacs 19 исключены многие другие файлы и функции. Нет необходимости упоминать здесь их все. Если вы попытаетесь применить одну из них, вы получите сообщение об ошибке, говорящее, что она не определена или не имеет значения.

Emacs и MS-DOS

Этот раздел кратко описывает особенности использования Emacs под "операционной системой" MS-DOS (известной также как "MS-DOG"). Если вы соберете Emacs для MS-DOS, этот двоичный файл можно будет также запустить на Windows 3.X, Windows NT, Windows 9X или OS/2 как приложение DOS; сведения из данной главы относятся ко всем этим системам, если вы используете Emacs, который был скомпилирован для MS-DOS.

Заметьте, что возможно собрать Emacs специально для Windows NT или Windows 9X. Если вы сделаете так, большая часть главы будет неприменима к вашему случаю; тогда вы получите поведение, которое более близко к тому, что описано в остальной части руководства, и которое включает поддержку для длинных имен файлов, множественных фреймов, полосок прокрутки, меню для мыши и подпроцессов. Однако, раздел о текстовых и двоичных файлах все еще будет иметь силу. Также в конце этой главы есть два раздела, которые относятся исключительно к Windows NT и 9X.

Клавиатура и мышь в MS-DOS

Раскладки клавиатуры PC используют в качестве клавиши META левую клавишу ALT. Вы можете выбрать между двумя способами эмулирования клавиш SUPER и HYPER: использовать либо правый CTRL, либо правый ALT, установив переменные dos-hyper-key и dos-super-key, соответственно, в значение 1 или 2. Если ни dos-super-key, ни dos-hyper-key не равна 1, то по умолчанию правый ALT также отображается в клавишу META. Однако, если установлена KEYB.COM, программа для поддержки в MS-DOS многоязыковой клавиатуры, Emacs не будет отображать правый ALT в META, так как он используется для получения таких знаков, как ~ и @ в раскладках, отличных от раскладки US; в таком случае вы можете использовать в качестве клавиши META только левый ALT.

Переменная dos-keypad-mode -- это флаг, который управляет кодами, возвращаемыми клавишами дополнительной цифровой клавиатуры. Вы также можете определить клавишу ENTER с дополнительной клавиатуры как C-j, поместив в ваш файл `_emacs' следующую строку:

;; Делает так, чтобы Enter с дополнительной
;; клавиатуры действовал как C-j.
(define-key function-key-map [kp-enter] [?\C-j])

Клавиша, известная в Emacs как DEL (потому что таково ее назначение на большинстве рабочих станций), на PC известна как BS (забой). Поэтому специфичная для PC инициализация терминала изменяет отображение клавиши BS таким образом, чтобы она действовала как DEL; клавиша DEL отображается в C-d по тем же причинам.

Emacs, собранный для MS-DOS, распознает в качестве ключа выхода комбинацию C-BREAK, точно так же, как C-g. Это делается, потому что Emacs не может зарегистрировать нажатие C-g, если только он не готов к принятию ввода. Как следствие, вы не можете использовать C-g для остановки запущенной команды (смотрите раздел Выход и аварийное завершение). Напротив, C-BREAK можно уловить, как только вы ее набрали (как C-g на других системах), поэтому ее можно применять для остановки работающей команды и для аварийного выхода (смотрите раздел Аварийный выход).

Emacs поддерживает в MS-DOS мышь (только на терминале по умолчанию). Команды мыши работают как описано, включая те, что используют меню и полоску меню (смотрите раздел Полоска меню). Полоски прокрутки не работают в MS-DOS Emacs. Мыши на PC обычно имеют только две кнопки; они действуют как Mouse-1 и Mouse-2, но если вы нажмете их вместе, то они подействуют как Mouse-3.

Собранный для MS-DOS и запущенный под Windows Emacs поддерживает операции с буфером обмена. Команды, которые помещают текст в список уничтожений или восстанавливают текст из него, сначала проверяют буфер обмена, так же, как в X Windows (смотрите раздел Команды мыши для редактирования). В MS-DOS Emacs под Windows поддерживаются только первичное выделение и буфер вырезок; вторичное выделение всегда выглядит как пустое.

Доступ к буферу обмена реализован в Windows так, что длина текста, который вы можете в него поместить, ограничена количеством доступной Emacs свободной памяти DOS. Обычно в буфере может уместиться до 620KB текста, но этот предел зависит от конфигурации системы и будет меньше, если вы запустите Emacs как подпроцесс другой программы. Если уничтоженный текст не умещается, Emacs печатает сообщение об этом и не помещает этот текст в буфер обмена.

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

Переменная dos-display-scancodes, если она не равна nil, велит Emacs показывать ASCII-значение скан-кодов клавиатуры при каждом нажатии клавиши; эта возможность служит дополнением к команде view-lossage, она полезна для отладки.

Изображение в MS-DOS

В MS-DOS нельзя использовать вариации шрифтов, такие как курсив или жирный шрифт, но множественные начертания поддерживаются; каждое из них может определять цвета шрифта и фона. Следовательно, вы можете пользоваться всей функциональностью пакетов Emacs, которые используют шрифты (таких как font-lock, режим Enriched Text и других), определяя подходящие начертания как использующие различные цвета. Чтобы посмотреть, какие цвета и начертания доступны, и как они выглядят, запустите команду list-colors-display (смотрите раздел Установка параметров фрейма) и команду list-faces-display (смотрите раздел Использование разных начертаний).

Смотрите раздел Поддержка разных языков в MS-DOS, где описано, как Emacs отображает глифы и знаки, которые не поддерживаются встроенными шрифтами.

Множественные фреймы (смотрите раздел Фреймы и X Windows) поддерживаются в MS-DOS, но они перекрываются, так что в одно время вы можете видеть только один из них. Этот единственный фрейм занимает весь экран. Когда вы запускаете Emacs в сеансе DOS из-под MS-Windows, вы можете сделать так, чтобы видимый фрейм занимал не весь экран, но Emacs все равно не может показать более одного фрейма одновременно.

Команда mode4350 переключает между отображением 43 или 50 строк, в зависимости от вашей аппаратуры; команда mode25 переключает к размеру экрана по умолчанию, 80x25.

По умолчанию Emacs знает только как установить размер окна для 80-ти столбцов на 25, 28, 35, 40, 43 или 50 строк. Однако, если у вашего видеоадаптера есть особые видеорежимы, которые переключаю изображение в другие размеры, вы можете сделать так, чтобы Emacs поддерживал и их тоже. Когда вы просите Emacs изменить размер фрейма на n столбцов и m строк, он проверяет, есть ли переменная с именем screen-dimensions-nxm, и если она есть, использует ее значение (которое должно быть целым числом) как видеорежим, в который нужно переключиться. (Emacs переключается в этот видеорежим, вызывая функцию BIOS Set Video Mode со значением screen-dimensions-nxm в регистре AL.) Например, представим, что ваш адаптер переходит к размерам 66x80, когда его перевели в видеорежим 85. Тогда вы можете сделать так, чтобы Emacs поддерживал этот размер экрана, поместив в ваш файл `_emacs' следующее:

(setq screen-dimensions-66x80 85)

Поскольку Emacs способен в MS-DOS установить размер фрейма только к конкретным поддерживаемым размерам, он не может следовать любому возможному запросу на его изменение. Когда запрошен неподдерживаемый размер, Emacs выбирает следующий, больший, чем указанный. Например, если вы потребуете фрейм 36x80, вместо этого вы получите 40x80.

Переменные screen-dimensions-nxm используются, только если они точно совпадают с указанным размером; при поиске следующего большего размера они игнорируются. В примере выше, даже если ваш VGA-адаптер поддерживает размер 38x80, и вы определили переменную screen-dimensions-38x80 с соответствующим значением, вы тем не менее получите экран 40x80, когда потребуете сделать размер фрейма равным 36x80. Если вы хотите получить в этом случае размеры 38x80, вы можете сделать это, установив переменную с именем screen-dimensions-36x80 и тем же значением видеорежима, что и screen-dimensions-38x80.

Изменение размеров фрейма в MS-DOS приводит также к новым размерам и все остальные фреймы.

Имена файлов в MS-DOS

MS-DOS обычно использует для разделения единиц имени файла обратную косую черту, `\', а не обычную косую черту, как другие системы. Emacs под MS-DOS позволяет использовать и простую, и обратную косую черту, а также знает о буквах дисков в именах файлов.

Имена файлов в MS-DOS регистронезависимы и ограничены восемью знаками плюс необязательная точка и еще три знака. Emacs достаточно осведомлен об этих ограничениях, чтобы справляться с именами файлов, предназначенных для других операционных систем. К примеру, начальные точки `.' в имени файла недопустимы в MS-DOS, поэтому Emacs автоматически переводит их в подчерки `_'; так что ваш файл инициализации по умолчанию (смотрите раздел Файл инициализации, `~/.emacs') называется в MS-DOS `_emacs'. Излишние знаки перед или после точки обычно игнорируются самой MS-DOS; поэтому, если вы обращаетесь к файлу `LongFileName.EvenLongerExtension', вы без предупреждений получите `longfile.eve', но в строке режима Emacs все так же будет показывать это длинное имя файла. Во всех остальных отношениях вы сами должны заботиться об указании допустимых под MS-DOS имен файлов; описанное выше прозрачное преобразование действует только на имена файлов внутри Emacs. Упомянутые выше ограничения на имена файлов в MS-DOS делают конструирование имен резервных файлов почти невозможным (смотрите раздел Одиночные или нумерованные резервные файлы) без потери некоторых знаков из первоначального имени файла. Например, именем резервного файла для `docs.txt' будет `docs.tx~', даже если использован единственный резервный файл.

Если вы запускаете Emacs как приложение DOS под Windows 9X, вы можете включить поддержку длинных имен файлов. Если вы сделаете так, Emacs не станет усекать имена файлов или приводить их к нижнему регистру; напротив, он будет использовать имена файлов так, как вы их задали, без изменений. Чтобы задействовать поддержку длинных имен файлов, установите переменную среды `LFN' равной `y' перед запуском Emacs. К сожалению, Windows NT не позволяет программам DOS получать доступ к длинным именам файлов, так что собранный для MS-DOS Emacs будет видеть только их короткие псевдонимы в форме 8+3.

В MS-DOS нет понятия о начальном каталоге, поэтому в MS-DOS Emacs делает вид, что каталог, в котором он установлен -- это значение переменной среды `HOME'. То есть, если исполняемый файл Emacs, `emacs.exe', находится в каталоге `c:/utils/emacs/bin', то Emacs ведет себя так, как если бы `HOME' была установлена равной `c:/utils/emacs'. В частности, именно здесь Emacs ищет файл инициализации, `_emacs'. Помня это, вы можете использовать в именах файлов знак `~' как псевдоним начального каталога, как вы делали бы это в Unix. Вы также можете установить переменную среды `HOME' до запуска Emacs; ее значение перекроет описанное выше поведение по умолчанию.

Emacs обрабатывает в MS-DOS имя каталога `/dev' особым образом, из-за некоторых средств в библиотеках эмулятора из DJGPP, которые создают видимость, что в этом каталоге перечислены имена устройств ввода/вывода. Мы рекомендуем избегать использования на любом диске настоящего каталога с именем `/dev'.

Текстовые файлы и двоичные файлы

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

MS-DOS и MS-Windows обычно используют для разделения строк последовательность возврат каретки-прогон строки. (Прогон строки --- это тот же знак, что и перевод строки.) Следовательно, для удобного редактирования в Emacs необходимо преобразование этих последовательностей конец-строки (EOL). И обычно Emacs делает это: во время считывания файла он превращает возврат каретки-перевод строки в перевод строки, а во время записи -- перевод строки в возврат каретки-перевод строки. Это преобразование реализуется тем же механизмом, что управляет преобразованием кодов знаков из разных языков (смотрите раздел Системы кодирования).

Одним из следствий этого особого преобразования формата большинства файлов является то, что сообщаемая Emacs позиция знака (смотрите раздел Информация о позиции курсора) не соответствует информации о размере файла, известной операционной системе.

Некоторые виды файлов не должны преобразовываться, так как их содержимое не является на самом деле текстом. Следовательно, Emacs различает в MS-DOS некоторые файлы как двоичные и считывает и записывает их буквально. (Это различение -- не часть MS-DOS; оно делается только в Emacs.) Сюда включаются исполняемые файлы, сжатые архивы и так далее. Emacs решает, двоичный это файл или нет, по его имени: шаблоны имен, указывающих на двоичные файлы, определяются переменной file-name-buffer-file-type-alist. Обратите внимание, если имя файла соответствует одному из шаблонов для двоичных файлов в file-name-buffer-file-type-alist, Emacs использует систему кодирования no-conversion (смотрите раздел Системы кодирования), которая выключает все преобразования кодирования, а не только EOL.

Кроме того, если Emacs узнает из содержимого файла, что в нем в качестве разделителя строк используется перевод строки, а не возврат каретки-прогон строки, он не делает превращения при чтении или записи этого файла. Таким образом, вы можете редактировать в MS-DOS файлы с систем Unix или GNU без специальных усилий, и в них останутся знаки EOL в стиле Unix.

Вы можете обратиться к файлу и указать, нужно ли воспринимать его как текстовый или же как двоичный, с помощью команд find-file-text и find-file-binary. Преобразование EOL -- это часть более общего механизма преобразования системы кодирования, поэтому другой способ указать это же -- воспользоваться командами для задания системы кодирования (смотрите раздел Задание системы кодирования). Например, C-x RET c undecided-unix RET C-x C-f foobar.txt обратится к файлу `foobar.txt' без превращения EOL.

В строке режима показывается, использовалось ли для текущего буфера преобразование EOL. Обычно после буквы системы кодирования в начале строки режима появляется двоеточие. Если в этом буфере используется преобразование последовательности конец-строки MS-DOS, этот знак заменяется на обратную косую черту.

Если вы используете NFS или Samba для доступа к файловым системам, находящимся на компьютерах с Unix или GNU, Emacs не должен производить преобразование EOL для любых файлов в этих файловых системах -- даже если вы создаете новый файл. Чтобы затребовать это, обозначьте их как нетранслируемые файловые системы, вызвав функцию add-untranslated-filesystem. Она принимает один аргумент: имя файловой системы, включая букву диска, и, возможно, каталог. Например,

(add-untranslated-filesystem "Z:")

обозначает как нетранслируемую файловую систему диск Z, а

(add-untranslated-filesystem "Z:\\foo")

обозначает как нетранслируемую файловую систему каталог `\foo' на диске Z.

Чаще всего add-untranslated-filesystem пишется в файле `_emacs' или же в файле `site-start.el', чтобы все пользователи вашей системы получили от нее пользу.

Чтобы отменить действие add-untranslated-filesystem, используйте функцию remove-untranslated-filesystem. Эта функция принимает один аргумент, который должен быть такой же строкой, что была ранее передана add-untranslated-filesystem.

Печать в MS-DOS

Команды печати, такие как lpr-buffer (смотрите раздел Вывод твердой копии) и ps-print-buffer (смотрите раздел Печать через Postscript), могут работать в MS-DOS и MS-Windows, посылая вывод на порты принтера, если недоступна команда в стиле Unix lpr. Такое поведение контролируется теми же переменными, что управляют печатью через lpr в Unix (смотрите раздел Вывод твердой копии, смотрите раздел Переменные, управляющие печатью в Postscript), но MS-DOS и MS-Windows значения этих переменных по умолчанию отличаются от их значений по умолчанию в Unix.

Если вы хотите использовать ваш локальный принтер, печатающий обычным для DOS образом, то установите лисповскую переменную lpr-command в значение "" (это значение по умолчанию), а printer-name --- равной имени порта принтера -- например, "PRN", обычного порта локального принтера (это значение по умолчанию), или "LPT2", или "COM1", для последовательного принтера. Вы также можете установить printer-name равной имени файла, в этом случае "печатаемый" вывод на самом деле добавляется в конец этого файла. Если вы установите printer-name в значение "NUL", печатаемый вывод забывается (посылается в системное нулевое устройство) без предупреждений.

В MS-Windows, когда установлено сетевое программное обеспечение, вы можете также использовать принтер, предоставляемый другой машиной, установив printer-name равной UNC-имени разделяемого ресурса для этого принтера -- например, "//joes_pc/hp4si". (Здесь не имеет значения, пишете ли вы простые или обратные косые черты.) Чтобы выяснить имена разделяемых принтеров, запустите в командной подсказке DOS команду `net view' для получения перечня серверов и `net view имя-сервера', чтобы увидеть имена принтеров (и каталогов), предоставляемых этим сервером.

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

Команды print-buffer и print-region вызывают программу pr или используют особые переключатели программы lpr, чтобы создать на каждой напечатанной странице заголовок. Обычно в MS-DOS и MS-Windows нет этих программ, поэтому по умолчанию переменная lpr-headers-switches устанавливается так, что запросы на печать заголовков страниц игнорируются. Поэтому print-buffer и print-region дают тот же вывод, что и lpr-buffer и lpr-region, соответственно. Если у вас есть подходящая программа pr (например, из GNU Textutils), установите lpr-headers-switches равной nil; тогда Emacs будет вызывать pr для создания заголовков страниц и печатать полученный вывод, как указано переменной printer-name.

Наконец, если у вас есть подобие lpr, вы можете установить переменную lpr-command в значение "lpr". Тогда Emacs будет использовать для печати lpr, как и в других системах. (Если имя этой программы отличается от `lpr', установите lpr-command так, чтобы она указывала, где ее можно найти.) Когда lpr-command не равна "", переменная lpr-switches несет свой обычный смысл. Если значением переменной printer-name является строка, то она используется как значение ключа -P для lpr, как и в Unix.

Параллельный набор переменных, ps-lpr-command, ps-lpr-switches и ps-printer-name (смотрите раздел Переменные, управляющие печатью в Postscript), определяет, как нужно печатать PostScript-файлы. Эти переменные используются таким же способом, как соответствующие описанные выше переменные для печати не в PostScript. Таким образом, значение ps-printer-name используется в качестве имени устройства (или файла), на которое посылается вывод PostScript, так же, как printer-name используется для печати не в PostScript. (Это два различных набора переменных в случае, если у вас два принтера, подсоединенных к разным портам, и только один из них --- PostScript-принтер.)

Значение переменной ps-lpr-command равно по умолчанию "", что направляет вывод PostScript на порт принтера, заданный в ps-printer-name. Но ps-lpr-command можно также установить равной имени программы, воспринимающей PostScript-файлы. Это значит, что если у вас не PostScript-принтер, вы можете задать в этой переменной имя программы-интерпретатора PostScript (такой как Ghostscript). Любые переключатели, которые необходимо передать интерпретатору, указываются в переменной ps-lpr-switches. (Если значением ps-printer-name является строка, она будет добавлена к списку переключателей в качестве значения ключа -P. Скорее всего, это будет полезно, только если вы пользуетесь lpr, поэтому, если вы печатаете через интерпретатор, вам следует cделать ps-printer-name не строкой, чтобы она проигнорировалась.)

Например, чтобы использовать Ghostscript для печати на принтере Epson, подсоединенному к порту `LPT2', поместите в ваш файл `_emacs' такой код:

(setq ps-printer-name t)  ; Ghostscript не принимает -P
(setq ps-lpr-command "c:/gs/gs386")
(setq ps-lpr-switches '("-q" "-dNOPAUSE"
                        "-sDEVICE=epson"
                        "-r240x72"
                        "-sOutputFile=LPT2"
                        "-Ic:/gs"))

(Это предполагает, что Ghostscript установлен в каталоге `"c:/gs"'.)

Для обратной совместимости, если переменная dos-printer (dos-ps-printer) имеет значение, то оно перекрывает значение printer-name (ps-printer-name); это относится только к MS-DOS и MS-Windows.

Поддержка разных языков в MS-DOS

Emacs поддерживает в MS-DOS те же наборы знаков разных языков, что и в Unix, и на других платформах (смотрите раздел Поддержка разных языков), включая системы кодирования для преобразования между различными наборами знаков. Однако, из-за несовместимости между MS-DOS/MS-Windows и Unix у этой поддержки есть несколько специфичных для DOS аспектов, о которых пользователи должны знать. Эти аспекты описаны в данном разделе.

M-x dos-codepage-setup
Приводит экран Emacs и системы кодирования в соответствие с текущей кодовой страницей DOS.
M-x codepage-setup
Создает систему кодирования для конкретной кодовой страницы DOS.

По своему дизайну MS-DOS поддерживает один набор из 256 знаков в каждый момент времени, но дает вам выбрать из множества наборов знаков. Эти альтернативные наборы знаков известны как кодовые страницы DOS. Каждая кодовая страница включает все 128 знаков ASCII, но остальные 128 (с кодами от 128 до 255) изменяются от одной кодовой страницы к другой. Каждой кодовой странице DOS присвоен трехзначный номер, как 850, 862, etc.

В противоположность X Windows, которая позволяет вам использовать несколько шрифтов одновременно, в MS-DOS нельзя использовать несколько кодовых страниц в течение одного сеанса. Вместо этого, MS-DOS загружает одну кодовую страницу во время запуска, и чтобы изменить кодовую страницу, вы должны перезагрузить MS-DOS(16). Практически те же ограничения применяются к исполняемым файлам DOS в других системах, таких как MS-Windows.

Если вы вызываете Emacs в MS-DOS с ключом --unibyte (смотрите раздел Ключи запуска), Emacs не делает никаких преобразований знаков, не входящих в ASCII. Напротив, он считывает и записывает такие знаки буквально и буквально посылает их восьмибитные коды на дисплей. Таким образом, однобайтный Emacs поддерживает в MS-DOS текущую кодовую страницу, какой бы она не была, но не может представить никакие другие знаки.

Для многобайтной работы на MS-DOS, Emacs должен знать, какие знаки может отображать выбранная кодовая страница DOS. Поэтому он вскоре после старта посылает системе запрос о номере выбранной кодовой страницы и сохраняет этот номер в переменной dos-codepage. Некоторые системы возвращают 437, значение по умолчанию, даже если в действительности кодовая страница другая. (Обычно это происходит, если вы используете кодовую страницу, встроенную в дисплей.) Вы можете велеть Emacs использовать другую кодовую страницу, устанавливая в вашем файле инициализации переменную dos-codepage.

Многобайтный Emacs поддерживает только некоторые кодовые страницы DOS, те, что показывают восточные виды письма, как японская кодовая страница 932, и те, которые кодируют один из наборов знаков ISO 8859.

Дальневосточные кодовые страницы могут непосредственно отображать один из наборов знаков MULE для этих стран, поэтому Emacs просто подготавливает к применению подходящую систему кодирования терминала, которая поддерживается этой кодовой страницей. Описываемые в остальной части главы особые средства относятся в основном к кодовым страницам, кодирующим наборы знаков ISO 8859.

Для кодовых страниц, соответствующих одному из наборов знаков ISO 8859, Emacs узнает имя этого набора, основываясь на номере кодовой страницы. Emacs автоматически создает систему кодирования для поддержки чтения и записи файлов в текущей кодовой странице и использует эту систему кодирования по умолчанию. Имя этой системы кодирования --- cpnnn, где nnn -- это номер кодовой страницы.(17) (`c' с седилем) имеет в стандартном наборе символов Latin-1 код 231, но соответствующая кодовая страница 850 использует для этой буквы код 135.}

Все системы кодирования cpnnn используют в качестве мнемоники для строки режима букву `D' (от "DOS"). Поскольку во время запуска и система кодирования терминала, и система кодирования для ввода/вывода файлов устанавливаются в подходящее значение cpnnn, строка режима в MS-DOS обычно начинается `-DD\-'. Смотрите раздел Строка режима.

Так как кодовая страница также указывает и на то, какой вид письма вы используете, Emacs автоматически запускает set-language-environment, чтобы выбрать языковую среду для этой письменности (смотрите раздел Языковые среды).

Если буфер содержит знак, принадлежащий какому-то другому набору ISO 8859, не тому, что поддерживается выбранной кодовой страницей DOS, Emacs показывает его с помощью последовательности знаков ASCII. Например, если в текущей кодовой странице нет глифа для буквы ``o' (маленькой `o' с акцентом грав), она отображается как `{`o}', где фигурные скобки служат визуальным указанием на то, что это один знак. (Это может выглядеть странно с некоторыми знаками не из латиницы, а, например, из греческого или иврита; но это все же можно читать, если вы знаете язык.) Хотя знак может занимает на экране несколько столбцов, он на самом деле является одиночным знаком, и все команды Emacs понимают его как одиночный.

Не всем знакам из кодовых страниц DOS есть соответствия в ISO 8859 --- некоторые используются для других целей, например для псевдографики. В Emacs нет внутреннего представления для этих знаков, поэтому когда вы считываете файл, содержащий такие знаки, они превращаются в определенные знаковые коды, задаваемые переменной dos-unsupported-character-glyph.

Кроме ISO 8859, Emacs поддерживает много других наборов знаков, но он не может отображать их в MS-DOS. Поэтому, если в буфере появляется один из таких многобайтных знаков, Emacs для MS-DOS показывает их, как указано в переменной dos-unsupported-character-glyph; по умолчанию этим глифом является пустой треугольник. Чтобы увидеть действительный код такого знака и набор, к которому он принадлежит, используйте команду C-u C-x =. Смотрите раздел Информация о позиции курсора.

По умолчанию Emacs определяет систему кодирования для поддержки текущей кодовой страницы. Чтобы определить систему кодирования для какой-то другой кодовой страницы (например, чтобы обратиться к файлу, написанному на машине с DOS в другой стране), используйте команду M-x codepage-setup. Она запрашивает с возможностью завершения трехзначный номер кодовой страницы, а затем создает для нее систему кодирования. Тогда для чтения и записи файла вы можете применять эту новую систему кодирования, но тогда вы должны явно задавать ее командам работы с файлами (смотрите раздел Задание системы кодирования).

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

Подпроцессы в MS-DOS

Поскольку MS-DOS -- это однозадачная "операционная система", асинхронные подпроцессы недоступны. В частности, не работают режим Shell и его варианты. Также не работают большинство средств Emacs, использующих асинхронные подпроцессы, включая проверку правописания и GUD. Когда вы сомневаетесь, попробуйте и увидите; неработающие команды печатают сообщение об ошибке, говорящее, что асинхронные подпроцессы не поддерживаются.

Компиляция под Emacs с использованием M-x compile, поиск файлов с помощью M-x grep и показ различий между файлами с помощью M-x diff в действительности работают, запуская подчиненные процессы синхронно. Это означает, что вы не можете редактировать, пока подчиненный процесс не завершится.

Напротив, Emacs, скомпилированный как "родное" приложение Windows, поддерживает асинхронные подпроцессы. Смотрите раздел Подпроцессы в Windows 95 и NT.

Команды печати, такие как lpr-buffer (смотрите раздел Вывод твердой копии) и ps-print-buffer (смотрите раздел Печать через Postscript), работают в MS-DOS, посылая вывод на один из портов принтера. Смотрите раздел Печать в MS-DOS.

Когда вы запустили синхронный процесс в MS-DOS, убедитесь, что он завершился и не пытается читать ввод с клавиатуры. Если программа не завершится сама, вы не сможете прервать ее вручную, потому что MS-DOS не предоставляет общего способа прервать процесс. Иногда в таких случаях может помочь нажатие C-c или C-BREAK.

Доступ к файлам на других машинах не поддерживается в MS-DOS. Другие ориентированные на работу с сетью команды, такие как отправка почты, хождение по Web, удаленный вход в систему и другие, также не работают, если в MS-DOS не встроен доступ к сети через сетевой редиректор.

Dired в MS-DOS использует пакет ls-lisp, где на других платформах применяется системная команда ls. Поэтому Dired поддерживает в MS-DOS лишь некоторые из возможных ключей, которые вы можете перечислить в переменной dired-listing-switches. Работают ключи -A, -a, -c, -i, -r, -S, -s, -t и -u.

Подпроцессы в Windows 95 и NT

Emacs, скомпилированный как "родное" приложение Windows (в противоположность версии для DOS) включает полную поддержку асинхронных подпроцессов. В версии для Windows синхронные и асинхронные подпроцессы работают нормально как в Windows 95, так и в Windows NT, до тех пор, пока вы запускаете только 32-битные приложения Windows. Однако, если вы запускаете в подпроцессе приложение DOS, вы можете столкнуться с некоторыми проблемами или вообще не суметь запустить это приложение; а если вы одновременно запустили два приложения DOS в двух подпроцессах, вам, возможно, придется перезагрузить систему.

Поскольку стандартный интерпретатор команд (и большинство утилит командной строки) в Windows 95 являются приложениями DOS, эти проблемы весьма важны. Но мы ничего не можем с этим поделать, их может исправить только Microsoft.

Если вы запустили только один подпроцесс с приложением DOS, он должен работать, как ожидается, если только он "ведет себя хорошо" и не пытается получить прямой доступ к дисплею и не делает необычных действий. Если у вас есть программа отслеживания загрузки CPU, то она покажет, что машина загружена на 100%, даже если приложение DOS ничего не делает, но это просто пережиток того способа, которым эти программы измеряют загрузку CPU.

Вы должны завершить приложение DOS до того, как запустите любое другое в отдельном подпроцессе. Emacs не может прервать или завершить подпроцесс DOS. Единственный способ остановить такой подпроцесс --- дать его программе команду выхода.

Если вы попытаетесь одновременно запустить два приложения DOS в разных подпроцессах, второй будет приостановлен до завершения первого, даже если оба они асинхронные.

Если вы можете перейти в первый подпроцесс и велеть ему выйти, второй процесс должен нормально продолжить работу. Однако, если второй подпроцесс синхронный, зависнет сам Emacs до тех пор, пока не завершится первый подпроцесс. Если это не может случаться без пользовательского ввода, вам не останется ничего, кроме как перезагрузиться, если вы работаете на Windows 95. Если у вас Windows NT, вы можете использовать монитор процессов, чтобы уничтожить нужный экземпляр ntvdm (это уничтожит оба подпроцесса DOS).

Если вам приходится в такой ситуации перезагружать Windows 95, не используйте команду Shutdown в меню Start; это только подвесит систему. Вместо этого, нажмите CTL-ALT-DEL и выберите затем Shutdown. Обычно это работает, хотя и может занять несколько минут.

Использование системного меню в Windows

Emacs, собранный как "родное" приложение Windows, обычно выключает такое свойство Windows, что прижатие клавиши ALT вызывает меню. Так делается, потому что ALT работает в Emacs в качестве META. Часто при использовании Emacs пользователи временно нажимают клавишу META, а потом меняют решение; если это будет вызывать меню Windows, то смысл последующих команд изменится. Многие находят это неприятным.

Вы можете снова задействовать обработку прижатия клавиши ALT, принятую в Windows по умолчанию, установив w32-pass-alt-to-system в отличное от nil значение.

Манифест GNU

Приведенный ниже Манифест GNU был написан Ричардом Столменом в начале проекта GNU, чтобы призвать к сотрудничеству и поддержке. За первые несколько лет он был немного изменен с учетом новых разработок, но сейчас кажется лучшим оставить его неизменным, каким его знает большинство.

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

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

Что такое GNU? GNU это не UNIX!

GNU, что означает Gnu's Not Unix, -- это имя для полностью Unix-совместимой программной системы, которую я пишу, чтобы свободно передавать всем, кто сможет ею пользоваться.(18) Несколько добровольцев помогают мне. Крайне требуется вклад времени, денег, программ и оборудования.

На данный момент у нас уже есть текстовый редактор Emacs с языком Лисп для написания команд редактирования, отладчик, работающий на уровне исходного текста, совместимый с YACC генератор анализаторов, компоновщик и около 35-ти утилит. Оболочка (командный интерпретатор) почти завершена. Новый переносимый оптимизирующий компилятор Си скомпилировал сам себя и может быть выпущен в этом году. Начальное ядро существует, но для эмуляции Unix нужны еще многие возможности. Когда ядро и компилятор будут закончены, можно будет распространять систему GNU, пригодную для разработки программ. В качестве программы форматирования текста мы будем использовать TeX, но над nroff продолжается работа. Мы также будем использовать свободную, переносимую систему X Windows. После этого мы добавим переносимый Common Lisp, игру "Империя", электронную таблицу и сотни других вещей плюс диалоговую документацию. Мы надеемся в конце концов предоставить все полезное, что обычно поступает с системой Unix, и даже еще больше.

GNU сможет запускать программы Unix, но не будет идентична ей. Мы введем все удобные усовершенствования, основываясь на нашем опыте работы с другими операционными системами. В частности, мы планируем сделать поддержку длинных имен файлов, номеров версий файлов, защищенную от сбоев файловую систему, возможно, завершение имен файлов, поддержку терминально-независимого вывода и, в конце концов, возможно, основанную на Лиспе оконную систему, при помощи которой различные Лисп-программы и обычные программы Unix смогут совместно использовать экран. Как Си, так и Лисп будут доступны в качестве системных языков программирования. Мы постараемся обеспечить поддержку UUCP, MIT Chaosnet и протоколов связи Internet.

Изначально GNU нацелена на машины класса 68000/1600 с виртуальной памятью, так как на них ее легче всего запустить. Дополнительные усилия для запуска GNU на меньших машинах будут предоставлены тому, кто захочет использовать ее на них.

Чтобы избежать ужасной путаницы, пожалуйста, произносите `G' в слове `GNU', когда оно является именем данного проекта.

Почему я должен написать GNU

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

Чтобы я мог продолжать использовать компьютеры с чистой совестью, я решил собрать вместе достаточное количество свободных программ и получить возможность обходиться без какого-либо несвободного программного продукта. Я ушел из Лаборатории ИИ, чтобы у МТИ не было никаких законных оснований мешать мне раздавать GNU.

Почему GNU будет совместима с Unix

Unix не является моим идеалом системы, но она не так уж плоха. Ее основные черты, по-видимому, будут полезны, и я надеюсь восполнить пробелы Unix без того, чтобы разрушить ее основу. А система, совместимая с Unix, может быть удобна для освоения многим людям.

Каким образом GNU станет доступна

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

Почему многие программисты хотят помочь

Я встретил много программистов, которые заинтересовались GNU и захотели помочь.

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

Работая над GNU и используя ее, а не принадлежащие кому-либо программы, мы можем быть благожелательны ко всем и в то же время соблюсти закон. Кроме того, GNU служит вдохновляющим примером и знаменем, сплачивающим остальных вокруг нас для совместного использования программ. Это может дать нам ощущение гармонии, которое невозможно, если мы используем несвободный программный продукт. Для почти половины программистов, с которыми я разговаривал, это неоценимое счастье, которое деньги заменить не могут.

Каким образом вы можете внести свой вклад

Я прошу производителей компьютеров о пожертвованиях в виде денег или машин. Я прошу отдельных людей о вкладе программами или работой.

Одно из следствий того, что вы внесли свой вклад машинами, это то, что на них GNU будет запущена в кратчайшие сроки. Машины должны быть укомплектованными, готовыми к использованию системами, пригодными для использования в жилом помещении, и не должны нуждаться в слишком сложных системах охлаждения и питания.

Я нашел очень много программистов, готовых потратить часть своего рабочего времени для работы над GNU. Для большинства проектов такую распределенную работу с неполной занятостью очень трудно координировать; независимо написанные части, возможно, не заработают вместе. Но для частной задачи замещения Unix это проблема отсутствует. Полная система Unix содержит сотни утилит, каждая из которых документирована отдельно. Большинство интерфейсов фиксированы совместимостью с Unix. Если каждый сотрудник сможет написать совместимую замену для одной Unix-утилиты и сделает так, чтобы она работала вместо оригинала в системе Unix, тогда вместе эти утилиты будут работать надлежащим образом. Даже если позволить Мерфи создать несколько неожиданных проблем, объединение этих компонент будет осуществимой задачей. (Ядро требует более тесной взаимосвязи и будет разрабатываться небольшой компактной группой).

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

Почему все пользователи компьютеров получат выгоду

Как только GNU будет написана, каждый сможет получить хороший свободный программный продукт так же свободно, как воздух.(19)

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

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

Учебные заведения смогут обеспечить более мощную образовательную среду, поощряя всех студентов изучать и улучшать системные коды. Гарвардская компьютерная лаборатория раньше проводила следующую политику: никакая программа не могла быть установлена в системе, если все ее исходные коды не были предоставлены на всеобщее обозрение; и это фактически поддерживалось отказом устанавливать определенные программы. Это меня очень вдохновило.

Наконец, будут ликвидированы расходы на рассмотрение того, кто владеет системным программным продуктом, и что он вправе или не вправе делать с ним.

Соглашения о том, что люди должны платить за пользование программой, включая лицензирование копий, всегда влекут за собой громадные затраты для общества из-за громоздких механизмов, необходимых для подсчета того, сколько (то есть, за какие программы) должен платить человек. И только полицейское государство может заставить каждого подчиниться им. Рассмотрим космическую станцию, где производство воздуха должно стоить очень дорого: взимание с каждого живого существа платы за литр воздуха может быть справедливо, но ношение противогаза со счетчиком и день и ночь невыносимо, даже если каждый в состоянии заплатить по счету за воздух. А телевизионные камеры повсюду, чтобы следить, не снимаете ли вы противогаз, возмутительны. Лучше уж содержать завод по производству воздуха на средства от поголовного налога и сбросить противогазы.

Копирование всей или части программы присуще программисту как дыхание и также плодотворно. И оно должно быть столь же свободным.

Некоторые легко опровергаемые возражения против целей GNU

"Никто не будет ее использовать, если она будет бесплатной, так как это означает, что пользователь не сможет положиться ни на какое сопровождение."

"Вы должны будете назначить цену за программу, чтобы оплатить обеспечение сопровождения."

Если люди охотнее заплатят за GNU плюс обслуживание вместо получения GNU бесплатно и без обслуживания, то компания по обеспечению только обслуживания тех, кто получил GNU бесплатно, может стать прибыльной.(20)

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

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

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

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

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

"Бесполезно рекламировать программу, которую люди могут получить бесплатно."

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

С другой стороны, если многие получают GNU от своих друзей, и подобные фирмы не будут процветать, то это покажет, что реклама не так уж необходима для распространения GNU. Почему же сторонники свободного рынка не хотят позволить решить это ему самому?(21)

"Моей компания нужна собственная операционная система, чтобы получить преимущество в конкурентной борьбе."

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

Я хотел бы увидеть дальнейшее развитие GNU, поддерживаемое дарами от многих производителей и пользователей, это сократит затраты для каждого.(22)

"Разве программисты не заслуживают вознаграждения за свое творчество?"

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

"Может ли программист просить вознаграждение за свое творчество?"

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

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

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

"Не будут ли программисты голодать?"

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

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

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

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

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

"Разве люди не имеют права контролировать, как используется их творение?"

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

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

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

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

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

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

"Конкуренция заставляет все делать лучше и лучше."

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

Частный и засекреченный программный продукт -- это моральный эквивалент бегунов в кулачном бою. Досадно говорить об этом, но единственный рефери, который у нас есть, по всей видимости не возражает против драк. Он просто регулирует их ("На каждые 10 ярдов, которые вы пробежите, вы можете сделать один удар"). В действительности же он должен прекращать их и наказывать бегунов даже за попытку драки.

"Не прекратят ли все программировать без денежного вознаграждения?"

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

В действительности этот вопрос, несмотря на то, что он часто задается, не подходит к ситуации. Оплата программирования не исчезнет, просто она станет меньше. Так что правильно ставить вопрос следующим образом: будет ли кто-нибудь программировать за уменьшенное денежное вознаграждение? Мой опыт подсказывает мне, что такие люди найдутся.

В течение более чем десяти лет многие из лучших программистов работали в Лаборатории Искусственного Интеллекта, получая гораздо меньше денег, чем они могли бы иметь где-то еще. Они получили массу неденежных вознаграждений: славу и уважение, например. Кроме того, творчество --- это развлечение, само являющееся наградой.

В дальнейшем многие из них ушли, когда появился шанс делать столь же интересную работу за большие деньги.

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

"Нам отчаянно нужны программисты. Если они потребуют, чтобы мы прекратили помогать нашим соседям, то мы должны будем подчиниться."

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

"Программистам как-то же надо зарабатывать на жизнь."

На первый взгляд это правильно. Однако, существует много способов, которыми программист мог бы заработать на жизнь, не продавая права на использование программы. Сейчас этот путь привычен, так как он дает программистам и бизнесменам самые большие деньги, а не потому, что это единственный путь заработать на жизнь. Легко найти другие пути, если вы захотите найти их. Вот несколько примеров.

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

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

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

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

Все виды развития могут финансироваться с помощью налога на программный продукт:

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

Но если покупатель компьютера сделает пожертвование на развитие программного обеспечения сам, то он может получить кредит в уплату налога. Он может сделать денежное пожертвование на проект по своему выбору, причем выбор проекта часто объясняется тем, что он надеется воспользоваться его результатами. Он может получить кредит на любую сумму пожертвования вплоть до общей суммы налога, которую он должен заплатить.

Полная ставка налога может определяться голосованием налогоплательщиков, при этом налог определяется пропорционально сумме, с которой он берется.

Следствия:

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

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

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

Глоссарий

Абзац
Абзац -- это единица среднего размера в тексте на естественном языке. Существуют специальные команды для перемещения по абзацам и для действий с ними. Смотрите раздел Абзацы.
Аргумент по умолчанию
Значение аргумента по умолчанию -- это значение, которое будет предполагаться, если вы не зададите его сами. Когда для чтения аргумента используется минибуфер, аргумент по умолчанию будет использоваться, если вы просто набираете RET. Смотрите раздел Минибуфер.
Балансировка круглых скобок
В Emacs можно сбалансировать скобки автоматически или вручную. Ручная балансировка производится командами, используемыми для перемещения по сбалансированным выражениям (смотрите раздел Списки и s-выражения). Автоматическая балансировка производится при помощи мигания или подсвечивания скобки, которая соответствует только что вставленной. (смотрите раздел Автоматическое отображение парных скобок).
Блокирование файлов
Блокирование файлов нужно для выдачи предупреждения, когда вы начинаете изменять файл, который уже редактирует кто-то другой. Смотрите раздел Защита от одновременного редактирования.
Буфер
Буфер -- это основная единица редактирования; один буфер соответствует одному куску редактируемого текста. Вы можете иметь несколько буферов, но в каждый конкретный момент вы редактируете только один, `выбранный' буфер, хотя когда вы используете несколько окон (см.), несколько буферов могут быть видимыми. Чаще всего буферы обращаются (см.) к какому-либо файлу. Смотрите раздел Использование множества буферов.
Буфер только для чтения
Буфер только для чтения -- это такой буфер, чей текст вам не разрешается изменять. Обычно Emacs создает буферы, доступные только для чтения, когда они содержат текст, который имеет особое значение для Emacs; например, буферы Dired. Обращение к защищенному от записи файлу также создает буфер только для чтения. Смотрите раздел Использование множества буферов.
Верхний уровень
Верхний уровень -- это нормальное состояние Emacs, в котором вы редактируете текст файла, к которому обратились. Вы бываете на верхнем уровне, если вы не находитесь на уровне рекурсивного редактирования (см.), или в минибуфере (см.) или в середине команды. Вы можете вернуться на верхний уровень при помощи прерывания (см.) или выхода (см.). Смотрите раздел Выход и аварийное завершение.
Восстановление
Восстановление означает вставку прежде уничтоженного текста. Это может использоваться для отмены ошибочного уничтожения или для копирования или перемещения текста. В некоторых других системах это называется "вставкой". Смотрите раздел Восстановление.
Вставка
Вставка -- это копирование текста в буфер, либо с клавиатуры, либо из другого места в Emacs.
Вторичное выделение
Вторичное выделение -- это одно конкретное выделение (см.) в X Windows; некоторые приложения в X Window могут использовать его для передачи текста другим приложениям. В Emacs есть особые команды мыши для работы с вторичным выделением. Смотрите раздел Вторичное выделение.
Второстепенный режим
Второстепенный режим -- это необязательное средство Emacs, которое может быть включено или выключено независимо от всех других возможностей Emacs. Каждый второстепенный режим имеет команды включения и выключения. Смотрите раздел Второстепенные режимы.
Входной почтовый ящик
Входной почтовый ящик -- это файл, в который операционная система доставляет почту. Rmail перемещает почту из файлов входных почтовых ящиков в Rmail-файлы (см.), в которых почта затем хранится постоянно или до тех пор, пока она не будет явно удалена. Смотрите раздел Rmail-файлы и входные почтовые ящики.
Выбор
Выбор буфера делает его текущим (см.) буфером. Смотрите раздел Использование множества буферов.
Выделение
Система X Windows позволяет приложению определить именованные выделения, значениями которых является какой-то текст. Программа также может считывать выделения, которые установили другие программы. Это основной способ обмена текстом между оконными приложениями. В Emacs есть команды для работы с первичным (см.) и вторичным выделением (см.).
Выход
Выход -- это отмена частично набранной или запущенной команды с помощью C-g (или C-BREAK в MS-DOS). Смотрите раздел Выход и аварийное завершение.
Выравнивание
Выравниванием называют добавление дополнительных пробелов к строкам текста, чтобы сделать их точно определенной ширины. Смотрите раздел Заполнение текста.
Вычеркивание
Вычеркивание в Rmail-файле или буфере Dired -- это операция, которая в действительности удаляет сообщения или файлы, которые вы ранее пометили для удаления.
Глобальный
Глобальный означает "не зависящий от текущей среды, действующий на весь Emacs". Это противоположность локальному (см.). Конкретные примеры использования термина `глобальный' появятся ниже.
Глобальная переменная
Глобальное значение переменной (см.) действует во всех буферах, которые не имеют своих собственных локальных значений для этой переменной. Смотрите раздел Переменные.
Глобальная подстановка
Глобальная подстановка означает замену каждого экземпляра какой-то строки другой строкой по всему большому куску текста. Смотрите раздел Команды замены.
Глобальная таблица ключей
Глобальная таблица ключей (см.) содержит привязки ключей, которые действуют всегда, кроме случаев, когда они перекрываются локальными привязками в локальной таблице ключей основного режима (см.). Смотрите раздел Таблицы ключей.
Глобальное сокращение
Глобальное определение сокращения (см.) действует во всех основных режимах, которые не имеют локальных (см.) определений для тех же самых сокращений. Смотрите раздел Сокращения.
Глобальный список пометок
Глобальный список пометок записывает последовательность буферов, в которых вы недавно устанавливали метку. Во многих случаях вы можете использовать это для прохода по буферам, которые вы редактируете, или в которых вы находили теги. Смотрите раздел Глобальный список пометок.
Графический знак
Графические знаки -- это такие знаки, для которых определено изображение, а не только имя. Все не-Meta-знаки (см.), за исключением Control-знаков (см.), являются графическими. Они включают буквы, цифры, знаки пунктуации и пробелы; сюда не входят RET или ESC. В Emacs, ввод графического знака вставляет этот знак (в обычных режимах редактирования). Смотрите раздел Основные команды редактирования.
Заблокированная команда
Заблокированная команда -- это команда, которую вы не можете запустить без специального подтверждения. Обычной причиной блокирования команды, является то, что она может запутать начинающего пользователя. Смотрите раздел Блокирование команд.
Завершение
Завершение -- это то, что делает Emacs, когда он автоматически раскрывает сокращенное имя в полное имя. Завершение выполняется для аргументов минибуфера (см.), когда набор возможного допустимого ввода известен; например, для имен команд, буферов и файлов. Завершение осуществляется, когда набираются TAB, SPC или RET. Смотрите раздел Завершение.
Законченный ключ
Законченный ключ -- это последовательность ключей, которая полностью определяет одно действие, которое выполнит Emacs. Например, X, C-f и C-x m -- законченные ключи. Законченные ключи получают смысл после привязки (см.) к командам (см.). Таким образом, X обычно привязана к команде, которая вставляет в буфер `X'. C-x m обычно привязывается к команде, которая начинает составление почтового сообщения. Смотрите раздел Ключи.
Замена
Смотрите `глобальная подстановка'.
Захват файла
Emacs использует захват файлов, чтобы заметить, когда два разных пользователя начинают редактировать один файл одновременно. Смотрите раздел Защита от одновременного редактирования.
Знак
Знаки составляют содержимое буфера Emacs; смотрите раздел Наборы знаков для текста. Кроме того, последовательности ключей (см.), обычно составляются из знаков (однако они могут также включать и другие события ввода). Смотрите раздел Виды пользовательского ввода.
Знак новой строки
Смотрите `перевод строки'.
Измененный буфер
Буфер (см.) является измененным, если его текст изменялся с момента последнего сохранения (или с момента его создания, если он никогда не записывался). Смотрите раздел Сохранение файлов.
Именованная метка
Именованная метка -- это регистр (см.), используемый для записи позиции в буфере, чтобы вы могли переместить точку к этой позиции. Смотрите раздел Регистры.
Имя команды
Имя команды -- это имя лисповского символа, являющегося командой (смотрите раздел Ключи и команды). Вы можете вызвать любую команду по имени, используя M-x (смотрите раздел Запуск команд по имени).
Имя файла
Имя файла -- это название, по которому ссылаются на файл. Имена файлов бывают относительными и абсолютными; смысл относительного имени файла зависит от текущего каталога, но абсолютное имя ссылается на один и тот же файл вне зависимости от того, какой каталог является текущим. В системах GNU и Unix, абсолютное имя файла начинается с косой черты (корневого каталога), или с `~/' или `~пользователь/' (начальный каталог).
История выбранных буферов
Emacs хранит историю выбранных буферов, которая записывает, как давно выбирался каждый буфер Emacs. Это используется для определения того, какой буфер выбрать. Смотрите раздел Использование множества буферов.
История минибуфера
В истории минибуфера записан текст, который вы задавали ранее в качестве аргументов минибуфера, чтобы вы могли удобно использовать тот же самый текст еще раз. Смотрите раздел История минибуфера.
Каталог
Каталоги файлов -- это именованные группы в файловой системе, в которые вы можете помещать отдельные файлы или подкаталоги. Смотрите раздел Каталоги файлов.
Каталог по умолчанию
Когда вы задаете имя файла, не начинающееся с `/' или `~', то оно интерпретируется относительно каталога по умолчанию для текущего буфера. Смотрите раздел Минибуфер для имен файлов.
Команда
Команда -- это лисповская функция, специально определенная так, чтобы она могла служить в Emacs привязкой к ключу. Когда вы набираете последовательность ключей (см.), его привязка (см.) ищется в соответствующих таблицах ключей (см.), чтобы определить, какая команда должна быть запущена. Смотрите раздел Ключи и команды.
Комментарий
Комментарий -- это текст в программе, который предназначен только для людей, читающих программу, и который специально помечен таким образом, что он игнорируется во время загрузки программы и ее компиляции. Emacs предлагает специальные команды для создания, выравнивания и уничтожения комментариев. Смотрите раздел Управление комментариями.
Компиляция
Компиляция -- это процесс создания исполняемой программы из исходных кодов. В Emacs существуют команды для компиляции файлов с кодами на языке Emacs Lisp (смотрите раздел `Byte Compilation' в the Emacs Lisp Reference Manual) и программ на Си и других языках (смотрите раздел Запуск компиляторов в Emacs).
Компонент имени файла
Один компонент имени файла ссылается на файл, находящийся непосредственно в конкретном каталоге. В системах GNU и Unix, имя файлa --- это последовательность компонентов, разделенных косыми чертами. Например, `foo/bar' -- это имя файла, содержащее два компонента, `foo' и `bar'; оно ссылается на файл с именем `bar' в каталоге с именем `foo' в текущем каталоге.
Косвенный буфер
Косвенный буфер -- это буфер, который разделяет текст с другим буфером, называемым его базовым буфером. Смотрите раздел Косвенные буферы.
Курсор
Курсор -- это прямоугольник на экране, который показывает позицию, именуемую точкой (см.), где происходит вставка и удаление текста. Курсор находится на знаке, который идет вслед за точкой, или под ним. Часто люди говорят `курсор', когда, строго говоря, имеют в виду `точку'. Смотрите раздел Основные команды редактирования.
Локальный
Локальный означает `действующий только в каком-то отдельном контексте'. Уместный вид контекста -- это выполнение некоторой отдельной функции, отдельный буфер или отдельный основной режим. Этот термин противоположен термину `глобальный' (см.). Конкретные применения термина `локальный' в терминологии Emacs появятся ниже.
Локальная переменная
Локальное значение переменной (см.) применяется только к одному буферу. Смотрите раздел Локальные переменные.
Локальная таблица ключей
Локальная таблица ключей используется в отдельном основном режиме. Привязка ключей (см.) в текущей локальной таблице ключей перекрывает глобальные привязки тех же самых последовательностей ключей. Смотрите раздел Таблицы ключей.
Локальное сокращение
Определение локального сокращения действует, только если выбирается какой-то определенный основной режим. В этом основном режиме игнорируется любое глобальное определение для того же самого сокращения. Смотрите раздел Сокращения.
Макро клавиатуры
Макросы клавиатуры -- это способ определения новых команд Emacs из последовательностей уже существующих без необходимости написания программы на Лиспе. Смотрите раздел Клавиатурные макросы.
Метка
Метка указывает на позицию в тексте. Она определяет один конец области (см.), точка находится в другом конце области. Многие команды оперируют с текстом целиком от точки до метки. Каждый буфер имеет свою метку. Смотрите раздел Пометка и область.
Метод ввода
Метод ввода -- это система ввода текстовых знаков, не входящих в ASCII, путем набора последовательности ASCII-знаков (см.). Смотрите раздел Методы ввода.
Метод составления сообщений
Метод составления сообщений -- это программа, запускаемая в Emacs для редактирования и отправки почтового сообщения. Emacs позволяет вам выбирать из нескольких различных методов составления сообщений. Смотрите раздел Способы составления сообщений.
Минибуфер
Минибуфер -- это окно, которое появляется, когда это необходимо, внутри эхо-области (см.), он используется для чтения аргументов команд. Смотрите раздел Минибуфер.
Многобайтный знак
Многобайтный знак -- это знак, который занимает в буфере несколько позиций. Emacs использует многобайтные знаки для представления текста, не выражаемого через ASCII, поскольку число не-ASCII-знаков гораздо больше 256. Смотрите раздел Введение в наборы знаков разных языков.
Модифицированный буфер
Смотрите `измененный буфер'.
Набор знаков
Emacs поддерживает много наборов знаков, каждый из которых представляет некий алфавит или письменность. Смотрите раздел Поддержка разных языков.
Нажатие на кнопку
Нажатие на кнопку -- это вид события ввода, генерируемый, когда вы нажимаете кнопку мыши. Смотрите раздел Перепривязка кнопок мыши.
Настройка
Настройка -- это произведение мелких изменений в работе Emacs. Чаще всего она делается при помощи установки переменных (смотрите раздел Переменные) или при помощи перепривязки последовательностей ключей (смотрите раздел Таблицы ключей).
Область
Область -- это текст между точкой (см.) и меткой (см.). Многие команды оперируют с текстом в области. Смотрите раздел Пометка и область.
Обращение
Обращение к файлу означает загрузку его содержимого в буфер (см.), где его можно редактировать. Смотрите раздел Обращение к файлам.
Ограничение
Ограничение буфера -- это количество текста в начале или конца буфера, которое временно является невидимым или недоступным. Придание буферу ненулевого ограничения называется сужением (см.). Смотрите раздел Сужение.
Одновременное редактирование
Одновременное редактирование означает, что сразу два пользователя модифицируют один и тот же файл. Одновременное редактирование, если оно не замечено вовремя, может привести к потере работы одного из пользователей. Emacs обнаруживает все случаи одновременного редактирования и предупреждает одного из пользователей, чтобы он разобрался. Смотрите раздел Защита от одновременного редактирования.
Окно
Emacs делит фрейм (см.) на одно или несколько окон, каждое из которых в любой момент может показывать содержимое одного буфера (см.). Смотрите раздел Организация экрана, для основной информации о том, как Emacs использует экран. Смотрите раздел Множество окон, для информации о командах управления окнами.
Определение функции
Определение функции -- это список в программе на верхнем уровне скобок. Они получили такое название, так большинство подобных списков в программах на Лиспе -- это вызовы лисповской функции defun.(23) Смотрите раздел Определения функций.
Основной режим
Основные режимы Emacs -- это взаимоисключающие наборы параметров, каждый из которых настраивает Emacs для редактирования текста определенного вида. В идеале, каждый язык программирования имеет свой собственный основной режим. Смотрите раздел Основные режимы.
Отмена
Отмена означает выполнение вашего предыдущего редактирования в обратном направлении, при этом возвращается текст, существовавший ранее в этом сеансе редактирования. Смотрите раздел Отмена сделанных изменений.
Отмена особого смысла знака
Отмена особого смысла знака означает лишение знака присущего ему специального значения. В Emacs обычно это делается с помощью C-q. Что именно составляет специальное значение зависит от контекста и от условий. Например, "обыкновенный" знак, рассматриваемый как команда Emacs, вставляет сам себя; следовательно, в этом контексте специальный знак -- это любой знак, который обычно не вставляет себя (например, DEL), а отмена особого смысла делает его самовставляющимся, как если бы он не был специальным знаком. Отмена особого смысла допускается не во всех контекстах. Смотрите раздел Основные команды редактирования.
Отмена особого смысла в имени файла
Отмена особого смысла знаков в имени файла лишает такие конструкции как `$', `~' и `:' их специального значения. Смотрите раздел Буквальные имена файлов.
Отступ
Отступ означает пустое пространство в начале строки. В большинстве языков программирования сложились традиции по использованию отступов, нацеленные на то, чтобы сделать понятной структуру программы, и в Emacs есть специальные команды для настройки отступов. Смотрите раздел Отступы.
Ошибка
Ошибка появляется, когда команда Emacs не может выполниться при существующих условиях. Когда появляется ошибка, выполнение команды прекращается (если только команда не была запрограммирована как-то по-другому), и Emacs уведомляет об ошибке, печатая сообщение (см.). Все ранее набранное сбрасывается. После этого Emacs готов считывать другую команду редактирования.
Перестановка
Перестановка двух единиц текста означает помещение каждого из них на место, ранее занимаемое другим. Существуют команды Emacs для перестановки двух смежных знаков, слов, s-выражений (см.) или строк. (смотрите раздел Перестановка текста).
Первичное выделение
Первичное выделение -- это одно конкретное выделение (см.) в X Windows; именно это выделение используется большинством приложений в X Windows для передачи текста другим приложениям. Команды уничтожения устанавливают первичное выделение, а команды восстановления используют первичное выделение, когда это уместно. Смотрите раздел Удаление и уничтожение.
Первичный Rmail-файл
Ваш первичный Rmail-файл -- это файл с именем `RMAIL' в вашем начальном каталоге, куда Rmail записывает получаемую вами почту, если вы не задали имя другого файла. Смотрите раздел Чтение почты с помощью Rmail.
Перевод строки
Знаки Control-J в буфере ограничивают строки текста и называются поэтому переводами строки. Смотрите раздел Наборы знаков для текста.
Переменная
Переменная -- это объект в Лиспе, который может хранить произвольное значение. Emacs использует некоторые переменные для своих внутренних целей и имеет другие (известные как `пользовательские параметры' (см.)), для которых вы сами можете установить значения, чтобы управлять работой Emacs. Используемые в Emacs переменные, которыми вы, вероятно, заинтересуетесь, перечислены в указателе переменных в данном руководстве. Смотрите раздел Переменные, для более подробной информации о переменных.
Перемещение текста
Перемещение текста означает стирание его из одного места и вставку в другое. Обычно это делается при помощи уничтожения (см.) и последующего восстановления (см.). Смотрите раздел Удаление и уничтожение.
Перерисовка экрана
Перерисовка экрана -- это процесс корректировки изображения на экране согласно изменениям, произведенным в редактируемом тексте. Смотрите раздел Организация экрана.
Печатный знак ASCII
Печатные знаки ASCII включают латинские буквы, арабские цифры, пробел и следующие знаки пунктуации: `!@#$%^& *()_-+=|\~` {}[]:;"' <>,.?/'.
Подсветка
Подсветка текста означает отображение его с другим цветом шрифта и/или фона, чтобы он выделялся из остального текста в буфере.
Подсказка
Подсказка -- это текст, напечатанный для запроса ввода от пользователя. Вывод подсказки называется запросом. Подсказки Emacs всегда появляются в эхо-области (см.). Один из видов запроса происходит, когда для считывания аргумента используется минибуфер (смотрите раздел Минибуфер); эхо, появляющееся, когда вы останавливаетесь в середине набора многознаковой последовательности ключей -- это также один из видов подсказки (смотрите раздел Эхо-область).
Подстановка строк
Смотрите `глобальная подстановка'.
Поиск
Поиск означает перемещение точки к следующему месту, где встретилось заданное регулярное выражение или заданная строка. Смотрите раздел Поиск и замена.
Поиск слов
Поиск слов -- это поиск последовательности слов без учета пунктуации между ними. Смотрите раздел Поиск слов.
Полоска меню
Полоска меню -- это линия наверху фрейма Emacs. Она содержит слова, на которых вы можете щелкнуть мышью, чтобы получить меню. Полоска меню поддерживается только в X Windows. Смотрите раздел Полоска меню.
Полоска прокрутки
Полоска прокрутки -- это высокий узкий прямоугольник, находящийся с края окна. Вы можете использовать в нем команды мыши для прокрутки этого окна. Полоски прокрутки поддерживаются только в X Windows. Смотрите раздел Полоски прокрутки.
Пользовательский параметр
Пользовательский параметр -- это переменная (см.), которая существует для того, чтобы вы могли настраивать Emacs, присваивая ей новое значение. Смотрите раздел Переменные.
Последовательность ключей
Последовательность ключей (или коротко, ключ) -- это последовательность событий ввода (см.), которая имеет смысл как одна единица. Если последовательности ключей достаточно, чтобы определить одно действие, то это законченный ключ (см.), если нет, то это префиксный ключ (см.). Смотрите раздел Ключи.
Почта
Почта -- это сообщения, посылаемые одним пользователем другому через компьютерную систему, чтобы получатель прочитал их, когда ему будет удобно. В Emacs есть команды для составления и отправки почты, а также для чтения и редактирования почты, которую вы получили. Смотрите раздел Посылка почты. Смотрите раздел Чтение почты с помощью Rmail, о том, как читать почту.
Предложения
В Emacs есть команды для перемещения по предложениям и для их уничтожения. Смотрите раздел Предложения.
Преобразование регистра
Преобразование регистра означает перевод текста из верхнего регистра в нижний или наоборот. Смотрите раздел Команды преобразования регистра, чтобы узнать о командах преобразования регистра.
Прерывание
Прерывание означает выход из рекурсивного редактирования (см.). Для этого используются команды C-] и M-x top-level. Смотрите раздел Выход и аварийное завершение.
Префикс заполнения
Префикс заполнения -- это цепочка знаков, которая ожидается в начале каждой строки, когда произведено заполнение. Она не рассматривается как часть заполняемого текста. Смотрите раздел Заполнение текста.
Префиксный аргумент
Смотрите `числовой аргумент'.
Префиксный ключ
Префиксный ключ -- это последовательность ключей (см.), чья единственная функция -- это введение множества более длинных ключей. C-x -- это пример префиксного ключа; любая двухзнаковая последовательность, начинающаяся с C-x, также является допустимой последовательностью ключей. Смотрите раздел Ключи.
Привязка
Последовательность ключей прибретает свое значение в Emacs при получении привязки, которая является командой (см.), то есть Лисп-функцией, которая запускается, когда пользователь вводит эту последовательность. Смотрите раздел Ключи и команды. Настройка часто подразумевает перепривязку знака к другой командной функции. Привязки всех последовательностей ключей записываются в таблице ключей (см.). Смотрите раздел Таблицы ключей.
Привязывать
Привязать ключ значит изменить его привязку (см.). Смотрите раздел Интерактивное изменение привязок ключей.
Пробельные знаки
Пробельные знаки -- это любая последовательность форматирующих знаков (пробелов, табуляций, переводов строки и забоев).
Проведение мыши
Проведение мыши -- это вид события ввода, генерируемый, когда вы нажимаете кнопку мыши, перемещаете мышь и затем отпускаете кнопку. Смотрите раздел Перепривязка кнопок мыши.
Прокрутка
Прокрутка означает сдвигание текста в окне Emacs таким образом, чтобы можно было увидеть другую часть буфера. Смотрите раздел Управление изображением.
Прямоугольник
Прямоугольник состоит из текста в заданном диапазоне столбцов и в заданном диапазоне строк. Обычно вы задаете прямоугольник помещая точку в одном его углу, а метку в другом. Смотрите раздел Прямоугольники.
Пустые строки
Пустые строки -- это строки, которые содержат только пробельные знаки. Emacs имеет несколько команд для работы с пустыми строками в буфере.
Путь поиска
Путь поиска -- это список имен каталогов, которые нужно использовать для поиска файлов, предназначенных для определенных целей. Например, переменная load-path содержит путь поиска для нахождения файлов с лисповскими библиотеками. Смотрите раздел Библиотеки Лисп-программ для Emacs.
Разбор
Мы говорим, что определенные команды Emacs производят разбор слов или выражений в редактируемом тексте. В действительности, все, что они умеют -- это находить другой конец слова или выражения. Смотрите раздел Синтаксическая таблица.
Распечатка
То же, что и твердая копия.
Расширение
Расширение -- это уничтожение любого ограничения (см.) в текущем буфере; это противоположность сужению (см.). Смотрите раздел Сужение.
Регистры
Регистрами называют именованные гнезда, в которые можно записывать прямоугольники или позиции в тексте или буфере для последующего использования. Смотрите раздел Регистры.
Регулярное выражение
Регулярное выражение -- это образец, который может соответствовать различным строкам или кускам текста; например, `l[0-9]+' соответствует `l', за которой следует одна или несколько цифр. Смотрите раздел Синтаксис регулярных выражений.
Режим Overwrite
Режим Overwrite -- второстепенный режим. Когда он включен, обыкновенные знаки текста заменяют существующий текст после точки, а не выталкивают его вправо. Смотрите раздел Второстепенные режимы.
Резервная копия
Резервная копия файла сохраняет содержимое файла, которое тот имел перед текущим сеансом редактирования. Emacs автоматически создает резервную копию файла, чтобы помочь вам проследить или отменить изменения, в которых вы позже раскаялись. Смотрите раздел Резервные файлы.
Рекурсивное редактирование
Смотрите `уровень рекурсивного редактирования'.
Самовставляющийся знак
Знак является самовставляющимся, если печать этого знака вставляет его в буфер. Обычные печатные и пробельные знаки являются в Emacs самовставляющимися, за исключением случаев в некоторых основных режимах.
Самодокументирование
Самодокументирование -- это средство Emacs, которое может сказать вам, что делает каждая команда, или дать список всех команд, относящихся к заданной вами теме. Самодокументирование запрашивается с помощью клавиши запроса справки, C-h. Смотрите раздел Справка.
Самосохранение
Самосохранение -- это когда Emacs автоматически сохраняет содержимое буфера в файле с особым именем. Таким образом, если из-за ошибки системы или пользователя буфер будет потерян, его информация не пропадает. Смотрите раздел Самосохранение: защита от гибели.
Синтаксическая таблица
Синтаксическая таблица сообщает Emacs, какие знаки являются частью слова, какие уравновешивают друг как скобки и так далее. Смотрите раздел Синтаксическая таблица.
Синтаксический разбор
Смотрите `разбор'.
Система кодирования
Система кодирования -- это кодировка для представления текстовых знаков в файлах или потоках информации. Emacs умеет преобразовывать при чтении или записи текст во многих системах кодирования к нужной. Смотрите раздел Системы кодирования.
Событие ввода
Событие ввода представлет внутри Emacs одно действие, предпринятое пользователем за терминалом. События ввода включают набор знаков, нажатие функциональных клавиш, нажатие или отпускание кнопок мыши и переключение между фреймами Emacs. Смотрите раздел Виды пользовательского ввода.
Сокращение
Сокращение -- это текстовая строка, которая раскрывается в другую текстовую строку, когда появляется в буфере. Например, вы могли бы определить несколько букв как сокращение для длинной фразы, которую вы хотите вставлять часто. Смотрите раздел Сокращения.
Сообщение
Смотрите слово `почта'.
Сообщение об ошибке
Сообщение об ошибке -- это одиночная строка вывода, отображаемая Emacs, когда пользователь просит выполнить что-нибудь невозможное (например, уничтожить текст вперед, когда точка находится в конце буфера). Они появляются в эхо области и сопровождаются звуковым сигналом.
Сохранение
Сохранение буфера означает копирование его текста в файл, к которому обращался этот буфер. Таким способом текст в файле действительно изменяется в процессе редактирования в Emacs. Смотрите раздел Сохранение файлов.
Список
Список -- это, приблизительно, текстовая строка, начинающаяся с открывающей круглой скобки и заканчивающаяся соответствующей закрывающей скобкой. В режиме C и в других режимах, отличных от режима Lisp, группы, окруженные другими видами парных разделителей, соответствующих языку программирования, например фигурными скобками, также являются списками. Смотрите раздел Списки и s-выражения.
Список меток
Список меток используется для хранения нескольких последних позиций метки на случай, если вы захотите к ним вернуться. В каждом буфере свой собственный список меток; кроме того, есть единый глобальный список меток (см.). Смотрите раздел Список пометок.
Список уничтожений
Список уничтожений -- это место, куда записывается весь недавно уничтоженный вами текст. Вы можете вновь вставить любой из уничтоженных фрагментов текста, пока он находится в списке. Это называется восстановлением (см.). Смотрите раздел Восстановление.
Страница
Страница -- это единица текста, ограниченная знаками перевода страницы (ASCII control-L, код 014), идущими в начале строки. Предусмотрено несколько команд Emacs для перемещения через страницы и для действий с ними. Смотрите раздел Страницы.
Строка продолжения
Если строка текста длиннее, чем ширина окна, то при отображении она занимает больше одной экранной строки. Тогда мы говорим, что строка текста продолжается, а все используемые для этого экранные строки после первой называются строками продолжения. Смотрите раздел Основные команды редактирования.
Строка режима
Строка режима -- это строка внизу каждого окна (см.), которая выдает информацию о состоянии буфера, показанного в этом окне. Смотрите раздел Строка режима.
Строка
Строка -- это один из видов лисповских объектов, который содержит последовательность знаков. Многие переменные Emacs предназначены для хранения строк в качестве значений. Синтаксис Лиспа для строк состоит из последовательности знаков этой строки с `"' в начале и `"' в конце. Когда знак `"' является частью строки, его нужно записывать в виде `\"', a знак `\', являющийся частью строки, должен быть записан как `\\'. Все другие знаки, включая перевод строки, можно вставлять просто записывая их в строке; однако, также допускаются управляющие последовательности, принятые в Си, такие как `\n' для перевода строки или `\241', использующая восьмеричный код.
Сужение
Сужение означает создание ограничений (см.), позволяющих редактирование текущего буфера только для части текста. Часть текста, оказавшаяся снаружи, недоступна для пользователя до тех пор, пока границы не будут вновь раздвинуты, но эта недоступная часть текста все еще находится там, и записывая файл, вы записываете его полностью. Смотрите раздел Сужение.
Счетчик повторений
Смотрите `числовой аргумент'.
Таблица ключей
Таблица ключей -- это структура данных, которая записывает привязки (см.) ключей к командам, которые они запускают. Например, глобальная таблица ключей привязывает знак C-n к командной функции next-line. Смотрите раздел Таблицы ключей.
Таблица ключей второстепенного режима
Таблица ключей, принадлежащая второстепенному режиму и активная, когда включен этот режим. Таблицы ключей второстепенных режимов имеют преимущество перед локальными в буфере таблицами ключей, так же, как локальные таблицы ключей имеют преимущество перед глобальной. Смотрите раздел Таблицы ключей.
Таблица перевода клавиатуры
Таблица перевода клавиатуры -- это массив, который переводит коды знаков, приходящие с терминала, в коды знаков, которые будут составлять последовательности ключей. Смотрите раздел Перевод клавиатуры.
Таблица тегов
Таблица тегов -- это файл, который служит в качестве указателя определений функций в одном или нескольких файлах. Смотрите раздел Таблицы тегов.
Твердая копия
Твердая копия означает напечатанный вывод. В Emacs есть команды для создания твердой копии текста из буферов Emacs. Смотрите раздел Вывод твердой копии.
Текст
Есть два значения (смотрите раздел Команды для естественных языков):
  • Данные, состоящие из последовательности знаков, в противоположность двоичным числам, изображениям, графическим командам, исполняемым программам и тому подобному. Содержимое буфера Emacs -- это всегда текст в этом смысле.
  • Данные, написанные на естественном языке, в противоположность программам, или следующие стилистическими условностями естественного языка.
Текущая строка
Строка, в которой находится точка (смотрите раздел Точка).
Текущее определение функции
Определение функции (см.), в котором находится точка. Если точка находится между двумя определениями, то текущее определение -- это то, которое следует после точки. Смотрите раздел Определения функций.
Текущий абзац
Абзац, в котором находится точка. Если она находится между абзацами, то текущий абзаца -- это тот, который следует за точкой. Смотрите раздел Абзацы.
Текущий буфер
Текущий буфер в Emacs -- это буфер, на который действуют большинство команд редактирования. Вы можете выбрать любой буфер Emacs в качестве текущего. Смотрите раздел Использование множества буферов.
Точка
Точка -- это место в буфере, в котором происходит вставка или удаление. Считается, что точка находится между двумя знаками, а не на каком-то одном из них. Курсор (см.) терминала показывает положение точки. Смотрите раздел Основные команды редактирования.
Удаление
Удаление означает стирание текста без копирования его в список уничтожений (см.). Альтернатива этому -- уничтожение (см.). Смотрите раздел Удаление и уничтожение.
Удаление окон
Удаление окна означает устранение его с экрана. Другие окна расширяются, чтобы использовать освободившееся пространство. Удаленное окно нельзя вернуть, но реальный текст из-за этого не пропадает. Смотрите раздел Множество окон.
Удаление сообщений
Удаление сообщения обозначает его пометку для исключения из вашего почтового файла. Оно может быть отменено до того момента, пока вы не вычеркните (см.) удаленные файлы из Rmail-файла. Смотрите раздел Удаление сообщений.
Удаление файлов
Удаление файла означает стирание его из файловой системы. Смотрите раздел Разнообразные действия над файлами.
Уничтожение
Уничтожение означает стирание текста и запоминание его в списке уничтожений, чтобы вы могли восстановить (см.) его позднее. Некоторые другие системы называют это "вырезанием". Большинство Emacs команд для стирания текста делают именно уничтожение, как противоположность удалению (см.). Смотрите раздел Удаление и уничтожение.
Уничтожение заданий
Уничтожение задания (такого как вызов Emacs) означает прекращение его существования. Любые данные внутри этого задания, если они не были записаны в файл, пропадают. Смотрите раздел Выход и аварийное завершение.
Управление версиями
Системы управления версиями отслеживают несколько версий файла с исходными кодами. Они предоставляют более мощную альтернативу хранению резервных копий файлов (см.). Смотрите раздел Управление версиями.
Управляющий знак
Управляющий знак -- это знак, который вы вводите, прижав клавишу CTRL. У некоторых управляющих знаков есть также собственные клавиши, так что вы можете ввести их, не используя CTRL. Например, RET, TAB, ESC и DEL все являются управляющими знаками. Смотрите раздел Виды пользовательского ввода.
Управляющий знак ASCII
Управляющий знак ASCII -- это Control-версия заглавной буквы или Control-версия одного из этих знаков: `@[\]^_?'.
Уровень рекурсивного редактирования
Уровень рекурсивного редактирования -- это состояние, в котором часть исполнения команды вызывает запрос к пользователю для редактирования какого-нибудь текста. Это может быть тот же самый текст, к которому применялась команда, а может быть и другой. Строка режима показывает наличие рекурсивного редактирования при помощи квадратных скобок (`[' или `]'). Смотрите раздел Уровни рекурсивного редактирования.
Усечение
Усечение текстовых строк на дисплее означает отбрасывание в строке любого текста, который не вмещается в ширину окна. Смотрите также `строка продолжение'. Смотрите раздел Основные команды редактирования.
Файл сопровождения
Файл, в который Emacs записывает все знаки, набранные пользователем на клавиатуре. Файлы сопровождения используются для регистрации ввода при отладке ошибок Emacs. Emacs не создает файл сопровождения, пока вы не потребуете этого. Смотрите раздел Описание ошибок в Emacs.
Файл терминального протокола
Файл терминального протокола содержит запись всех знаков, посылаемых Emacs на терминал. Он используется для отслеживания неполадок при перерисовке экрана в Emacs. Emacs не создает файл терминального протокола, если вы не потребуете этого. Смотрите раздел Описание ошибок в Emacs.
Форматированный текст
Форматированный текст -- это текст, отображаемый с информацией форматирования во время редактирования. Информация форматирования включает шрифты, цвета и заданные поля. Смотрите раздел Редактирование форматированного текста.
Фрейм
Фрейм -- это прямоугольный блок окон Emacs. При старте в Emacs есть один фрейм, но вы можете создать новые. Вы можете поделить каждый фрейм на окна Emacs (см.). Если вы пользуетесь X Windows, все фреймы могут быть видимы одновременно. Смотрите раздел Фреймы и X Windows.
Функциональная клавиша
Функциональная клавиша -- это клавиша, которая посылает некий ввод, но не соответствует никакому знаку. Смотрите раздел Перепривязка функциональных клавиш.
Числовой аргумент
Числовой аргумент -- это число, заданное перед командой, чтобы изменить ее действие. Часто числовой аргумент служит в качестве счетчика повторов. Смотрите раздел Числовые аргументы.
Щелчок
Щелчок -- это вид события ввода, генерируемый, когда вы нажимаете кнопку мыши и отпускаете ее, не двигая мышь. Смотрите раздел Перепривязка кнопок мыши.
Электрик
Мы говорим, что знак является электрик-знаком, если обычно он бывает самовставляющимся (см.), но текущий основной режим (см.) переопределяет для каких-то дополнительных действий. Например, несколько основных режимов для языков программирования определяют некоторые знаки-разделители для создания в этой строке отступа или вставки еще одного или более перевода строки, помимо вставки самого этого знака.
Эхо
Эхо -- это подтверждение получения команд с помощью их показа (в эхо-области). Emacs никогда не повторяет однознаковые последовательности ключей; более длинные последовательности ключей повторяются, только если вы сделаете паузу, пока набираете их.
Эхо-область
Эхо-область -- это нижняя строка экрана, используемая для вывода эхо аргументов команд, для задавания вопросов и для печати кратких сообщений (включая сообщения об ошибках). Эти сообщения сохраняются в буфере `*Messages*', чтобы вы потом могли их просмотреть. Смотрите раздел Эхо-область.
Языковая среда
Ваш выбор языковой среды определяет принимаемые по умолчанию метод ввода (см.) и систему кодирования (см.). Смотрите раздел Языковые среды. Эти значения по умолчанию важны, если вы редактируете не-ASCII текст. (смотрите раздел Поддержка разных языков).
Alt
Alt -- это название бита-модификатора, который может присутствовать в знаке, введенном с клавиатуры. Чтобы сделать знак Alt-знаком, наберите его, прижав клавишу ALT. Таким знакам даются имена, начинающиеся с Alt- (для краткости обычно пишут A-). (Обратите внимание, на многих терминалах есть клавиша, помеченная как ALT, которая на самом деле работает как META.) Смотрите раздел Виды пользовательского ввода.
ASCII-знак
ASCII-знак -- это либо управляющий знак ASCII, либо печатный знак ASCII. Смотрите раздел Виды пользовательского ввода.
Auto Fill
Режим Auto Fill -- это второстепенный режим, в котором вставляемый вами текст автоматически разбивается на строки фиксированной длины. Смотрите раздел Заполнение текста.
C-
C- в имени знака -- это сокращение для Control. Смотрите раздел Виды пользовательского ввода.
C-M-
C-M- в имени знака -- это сокращение для Control-Meta. Смотрите раздел Виды пользовательского ввода.
Copyleft
Copyleft -- это уведомление, дающее обществу официальное разрешение на повторное распространение программы или иного произведения искусства. Copylefts используются программистами левых партий для поддержки свободы и сотрудничества, так же как copyrights используются программистами правых партий для повышения власти над другими людьми. Конкретная форма copyleft, используемая проектом GNU, называется Универсальной Общественной Лицензией GNU. Смотрите раздел УНИВЕРСАЛЬНАЯ ОБЩЕСТВЕННАЯ ЛИЦЕНЗИЯ GNU.
DEL
DEL -- это знак, запускающий команду, которая удаляет один знак текста. Смотрите раздел Основные команды редактирования.
Dired
Dired -- это средство Emacs, которое показывает содержимое каталога файлов и позволяет вам "редактировать каталог", выполняя действия над файлами в этом каталоге. Смотрите раздел Dired, редактор каталогов.
ESC
ESC -- это знак, используемый как префикс для набора Meta-знаков на клавиатурах, где нет клавиши META. В отличие от клавиши META (которая подобно SHIFT остается нажатой, пока набирается другой знак), ESC нажимается так же, как клавиша с буквой, и относится к знаку, набранному следом за ней.
HELP
HELP -- это название для C-h или F1 в Emacs. Вы можете набрать HELP в любое время, чтобы спросить, какой у вас есть выбор, или узнать, что делает та или иная команда. Смотрите раздел Справка.
Hyper
Hyper -- это имя бита-модификатора, который может иметь вводимый знак. Чтобы сделать знак Hyper-знаком, наберите его, прижав клавишу HYPER. Таким знакам дают имена, начинающиеся с Hyper- (обычно записывается как H- для краткости). Смотрите раздел Виды пользовательского ввода.
M-
M- в имени знака -- это сокращение от META, одной из клавиш-модификаторов, которая может сопровождать любой знак. Смотрите раздел Виды пользовательского ввода.
M-C-
M-C- в имени знака -- это сокращение для Control-Meta; это означает то же самое, что и C-M-. Если у вашего терминала нет реальной клавиши META, то вы набираете Control-Meta-знак при помощи ESC и соответствующего знака с Control. Смотрите раздел Виды пользовательского ввода.
M-x
M-x -- это последовательность ключей, которая используется для вызова команд Emacs по имени. Так вызываются команды, которые не привязаны к ключам. Смотрите раздел Запуск команд по имени.
Meta
Meta -- это имя бита-модификатора, который может иметь командный знак. Он присутствует в знаке, если тот набирается вместе с одновременным нажатием клавиши META. Таким знакам даются имена, начинающиеся с Meta- (для краткости обычно пишут M-). Например, M-< набирается при помощи одновременного нажатия META и набора < (на большинстве терминалов < набирается путем нажатия SHIFT и ,). Смотрите раздел Виды пользовательского ввода.
Meta-знак
Meta-знак -- это знак, чей знаковый код включает Meta-бит.
MULE
Под MULE понимают средства Emacs для редактирования не-ASCII-текста с использованием многобайтных знаков (см.). Смотрите раздел Поддержка разных языков.
Regexp
Смотрите `регулярное выражение'.
RET
RET -- это знак, который запускает команду, вставляющую в текст перевод строки. Он также используется для завершения большинства аргументов, считываемых из минибуфера (см.). Смотрите раздел Виды пользовательского ввода.
Rmail-файл
Rmail-файл -- это файл, содержащий текст в особом формате, используемый программой Rmail для хранения почты. Смотрите раздел Чтение почты с помощью Rmail.
S-выражение
S-выражение (или коротко, sexp) -- это основная синтаксическая единица Лиспа в ее текстуальной форме: или список, или атом. Многие команды Emacs работают с s-выражениями. Термин `s-выражение' обобщается для остальных языков помимо Лиспа как синтаксически распознаваемое выражение. Смотрите раздел Списки и s-выражения.
Super
Super -- это название бита-модификатора, который может присутствовать в знаке, введенном с клавиатуры. Чтобы сделать знак Super-знаком, наберите его, прижав клавишу SUPER. Таким знакам даются имена, начинающиеся с Super- (для краткости обычно пишут s-). Смотрите раздел Виды пользовательского ввода.
WYSIWYG
WYSIWYG означает `What you see is what you get'.(24) Emacs обычно обеспечивает редактирование WYSIWYG для файлов, состоящих из знаков; в режиме Enriched (смотрите раздел Редактирование форматированного текста) он предоставляет редактирование WYSIWYG для файлов, включающих информацию форматирования.

Указатель ключей (клавиш)

@anchor{Key Index} Быстрый переход: ! - " - # - $ - % - & - * - + - . - < - = - > - a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - q - r - s - t - u - v - w - x - z - ~

!

  • ! (Dired)

"

  • " (режим TeX)

#

  • # (Dired)

$

  • $ (Dired)

%

  • % C (Dired)
  • % d (Dired)
  • % H (Dired)
  • % l (Dired)
  • % m (Dired), % m (Dired)
  • % R (Dired)
  • % S (Dired)
  • % u (Dired)

&

  • & (Dired)

*

  • * ! (Dired)
  • * % (Dired)
  • * * (Dired)
  • * / (Dired)
  • * ? (Dired)
  • * @ (Dired)
  • * c (Dired)
  • * C-n (Dired)
  • * C-p (Dired)
  • * DEL (Dired)
  • * m (Dired)
  • * s (Dired)
  • * t (Dired)
  • * u (Dired)

+

  • + (Dired)

.

  • . (Dired)
  • . (Rmail)
  • . (режим Calendar)

<

  • < (Dired)
  • < (Rmail)

=

  • = (Dired)

>

  • > (Dired)
  • > (Rmail)

a

  • A (Dired)
  • a (Rmail)
  • a (режим Calendar)

b

  • B (Dired)
  • b (Rmail)
  • BS (MS-DOS)

c

  • C (Dired)
  • c (Rmail)
  • C-@
  • C-\
  • C-]
  • C-_
  • C-_ (Dired)
  • C-a
  • C-a (режим Calendar)
  • C-b
  • C-b (режим Calendar)
  • C-BREAK (MS-DOS)
  • C-c ' (режим Picture)
  • C-c . (режим Picture)
  • C-c / (режим Picture)
  • C-c : (режим C)
  • C-c ; (режим Fortran)
  • C-c < (GUD)
  • C-c < (режим Picture)
  • C-c > (GUD)
  • C-c > (режим Picture)
  • C-c @ (второстепенный режим Outline)
  • C-c \ (режим Picture)
  • C-c ^ (режим Picture)
  • C-c ` (режим Picture)
  • C-c C-\ (режим C)
  • C-c C-\ (режим Shell)
  • C-c C-a (режим C)
  • C-c C-a (режим Mail)
  • C-c C-a (режим Outline)
  • C-c C-a (режим Shell)
  • C-c C-b (режим Outline)
  • C-c C-b (режим Picture)
  • C-c C-b (режим Shell)
  • C-c C-b (режим TeX)
  • C-c C-c (редактирование позиций табуляции)
  • C-c C-c (редактирование сокращений)
  • C-c C-c (режим Mail)
  • C-c C-c (режим Outline)
  • C-c C-c (режим Shell)
  • C-c C-d (GUD)
  • C-c C-d (режим C)
  • C-c C-d (режим Outline)
  • C-c C-d (режим Picture)
  • C-c C-e (режим C)
  • C-c C-e (режим LaTeX)
  • C-c C-e (режим Outline)
  • C-c C-e (режим Shell)
  • C-c C-f (GUD)
  • C-c C-f (режим Outline)
  • C-c C-f (режим Picture)
  • C-c C-f (режим Shell)
  • C-c C-f (режим TeX)
  • C-c C-f C-b (режим Mail)
  • C-c C-f C-c (режим Mail)
  • C-c C-f C-f (режим Mail)
  • C-c C-f C-s (режим Mail)
  • C-c C-f C-t (режим Mail)
  • C-c C-i (GUD)
  • C-c C-i (режим Mail mode
  • C-c C-i (режим Outline)
  • C-c C-k (режим Outline)
  • C-c C-k (режим Picture)
  • C-c C-k (режим TeX)
  • C-c C-l (GUD)
  • C-c C-l (режим Calendar)
  • C-c C-l (режим Outline)
  • C-c C-l (режим Shell)
  • C-c C-l (режим TeX)
  • C-c C-n (GUD)
  • C-c C-n (режим C)
  • C-c C-n (режим Fortran)
  • C-c C-n (режим Outline)
  • C-c C-n (режим Shell)
  • C-c C-o (режим C)
  • C-c C-o (режим LaTeX)
  • C-c C-o (режим Outline)
  • C-c C-o (режим Shell)
  • C-c C-p (режим C)
  • C-c C-p (режим Fortran)
  • C-c C-p (режим Outline)
  • C-c C-p (режим Shell)
  • C-c C-p (режим TeX)
  • C-c C-q (режим C)
  • C-c C-q (режим Mail)
  • C-c C-q (режим Outline)
  • C-c C-q (режим TeX)
  • C-c C-r (GUD)
  • C-c C-r (режим Fortran)
  • C-c C-r (режим Mail)
  • C-c C-r (режим Shell)
  • C-c C-r (режим TeX)
  • C-c C-s (GUD)
  • C-c C-s (режим C)
  • C-c C-s (режим Mail)
  • C-c C-s (режим Outline)
  • C-c C-t (GUD)
  • C-c C-t (режим C)
  • C-c C-t (режим Mail)
  • C-c C-t (режим Outline)
  • C-c C-u (режим C)
  • C-c C-u (режим Outline)
  • C-c C-u (режим Shell)
  • C-c C-v (режим TeX)
  • C-c C-w (режим Fortran)
  • C-c C-w (режим Mail)
  • C-c C-w (режим Picture)
  • C-c C-w (режим Shell)
  • C-c C-x (режим Picture)
  • C-c C-y (режим Mail)
  • C-c C-y (режим Picture)
  • C-c C-z (режим Shell)
  • C-c RET (режим Shell)
  • C-c TAB (режим Picture)
  • C-c TAB (режим TeX)
  • C-c { (режим TeX)
  • C-c } (режим TeX)
  • C-d
  • C-d (Rmail)
  • C-d (режим Shell)
  • C-e
  • C-e (режим Calendar)
  • C-f
  • C-f (режим Calendar)
  • C-g
  • C-g (MS-DOS)
  • C-h
  • C-h a
  • C-h b
  • C-h c
  • C-h C
  • C-h C-\
  • C-h C-c
  • C-h C-d
  • C-h C-f
  • C-h C-h
  • C-h C-i
  • C-h C-k
  • C-h C-p
  • C-h C-w
  • C-h f
  • C-h F
  • C-h h
  • C-h I
  • C-h i
  • C-h k
  • C-h l
  • C-h L
  • C-h m
  • C-h n
  • C-h p
  • C-h s
  • C-h t
  • C-h w
  • C-j
  • C-j (MS-DOS)
  • C-j (TeX mode)
  • C-j (и основные режимы)
  • C-j (режим Fortran)
  • C-k
  • C-k (Gnus)
  • C-l
  • C-M-%
  • C-M-.
  • C-M-/
  • C-M-@
  • C-M-\
  • C-M-a
  • C-M-a (режим Fortran)
  • C-M-b
  • C-M-c
  • C-M-d
  • C-M-d (Dired)
  • C-M-DEL
  • C-M-e
  • C-M-e (режим Fortran)
  • C-M-f
  • C-M-h
  • C-M-h (режим C)
  • C-M-h (режим Fortran)
  • C-M-j
  • C-M-j (режим Fortran)
  • C-M-k
  • C-M-l
  • C-M-l (Rmail)
  • C-M-l (режим Shell)
  • C-M-n
  • C-M-n (Dired)
  • C-M-n (Rmail)
  • C-M-o
  • C-M-p
  • C-M-p (Dired)
  • C-M-p (Rmail)
  • C-M-q
  • C-M-q (режим C)
  • C-M-q (режим Fortran)
  • C-M-r
  • C-M-r (Rmail)
  • C-M-s
  • C-M-t, C-M-t
  • C-M-t (Rmail)
  • C-M-u
  • C-M-u (Dired)
  • C-M-v
  • C-M-w
  • C-M-x (режим Emacs-Lisp)
  • C-M-x (режим Lisp)
  • C-Mouse-2 (полоса прокрутки)
  • C-Mouse-3
  • C-n
  • C-n (Dired)
  • C-n (режим Calendar)
  • C-n (режим Gnus Group)
  • C-n (режим Gnus Summary)
  • C-o
  • C-o (Dired)
  • C-o (Rmail)
  • C-p
  • C-p (Dired)
  • C-p (режим Calendar)
  • C-p (режим Gnus Group)
  • C-p (режим Gnus Summary)
  • C-q
  • C-r
  • C-s
  • C-SPC
  • C-t
  • C-u
  • C-u - C-x ;
  • C-u C-@
  • C-u C-SPC
  • C-u C-x u
  • C-u TAB
  • C-v
  • C-v (режим Calendar)
  • C-w
  • C-x #
  • C-x $
  • C-x (
  • C-x )
  • C-x +
  • C-x -
  • C-x .
  • C-x 0
  • C-x 1
  • C-x 2
  • C-x 3
  • C-x 4
  • C-x 4 .
  • C-x 4 0
  • C-x 4 a
  • C-x 4 b
  • C-x 4 d
  • C-x 4 f
  • C-x 4 m
  • C-x 5
  • C-x 5 .
  • C-x 5 0
  • C-x 5 2
  • C-x 5 b
  • C-x 5 d
  • C-x 5 f
  • C-x 5 m
  • C-x 5 o
  • C-x 5 r
  • C-x 6 1
  • C-x 6 2
  • C-x 6 b
  • C-x 6 d
  • C-x 6 RET
  • C-x 6 s
  • C-x 8
  • C-x ;
  • C-x <
  • C-x < (режим Calendar)
  • C-x =
  • C-x >
  • C-x > (режим Calendar)
  • C-x [
  • C-x [ (режим Calendar)
  • C-x ]
  • C-x ] (режим Calendar)
  • C-x ^
  • C-x `
  • C-x a g
  • C-x a i g
  • C-x a i l
  • C-x a l
  • C-x b
  • C-x C-a (GUD)
  • C-x C-b
  • C-x C-c
  • C-x C-d
  • C-x C-e
  • C-x C-f
  • C-x C-k
  • C-x C-l
  • C-x C-n
  • C-x C-o
  • C-x C-p
  • C-x C-q
  • C-x C-q (управление версиями)
  • C-x C-r
  • C-x C-s
  • C-x C-SPC
  • C-x C-t
  • C-x C-u
  • C-x C-v
  • C-x C-w
  • C-x C-x
  • C-x C-z
  • C-x d
  • C-x DEL
  • C-x e
  • C-x ESC ESC
  • C-x f
  • C-x h
  • C-x k
  • C-x l
  • C-x m
  • C-x n d
  • C-x n d (режим Fortran)
  • C-x n n
  • C-x n p
  • C-x n w
  • C-x o
  • C-x q
  • C-x r +
  • C-x r b
  • C-x r d
  • C-x r f
  • C-x r i
  • C-x r j
  • C-x r k
  • C-x r l
  • C-x r m
  • C-x r n
  • C-x r o
  • C-x r r
  • C-x r s
  • C-x r SPC
  • C-x r t
  • C-x r w
  • C-x r y
  • C-x RET
  • C-x RET c
  • C-x RET C-\
  • C-x RET f
  • C-x RET k
  • C-x RET p
  • C-x RET t
  • C-x RET X
  • C-x RET x
  • C-x s
  • C-x SPC
  • C-x TAB
  • C-x TAB (режим Enriched)
  • C-x u
  • C-x v =
  • C-x v a
  • C-x v c
  • C-x v d
  • C-x v g
  • C-x v h
  • C-x v i
  • C-x v l
  • C-x v m
  • C-x v r
  • C-x v s
  • C-x v u
  • C-x v v
  • C-x v ~
  • C-x z
  • C-x }
  • C-y
  • C-z
  • C-z (X windows)

d

  • D (Dired)
  • d (Dired)
  • d (Rmail)
  • d (режим Calendar)
  • DEL
  • DEL (Dired)
  • DEL (Gnus)
  • DEL (MS-DOS)
  • DEL (Rmail)
  • DEL (и основные режимы)
  • DEL (режимы для программ)
  • DELETE
  • DOWN

e

  • e (Rmail)
  • ESC a
  • ESC e
  • ESC ESC ESC

f

  • f (Dired)
  • f (Rmail)
  • F1
  • F10
  • F2 1
  • F2 2
  • F2 b
  • F2 d
  • F2 RET
  • F2 s

g

  • g (Dired)
  • G (Dired)
  • g (Rmail)
  • g d (режим Calendar)
  • g m (режим Calendar)
  • g знак (режим Calendar)

h

  • H (Dired)
  • h (Rmail)
  • h (режим Calendar)
  • Help

i

  • i (Dired)
  • i (Rmail)
  • i a (режим Calendar)
  • i b (режим Calendar)
  • i c (режим Calendar)
  • i d (режим Calendar)
  • i m (режим Calendar)
  • i w (режим Calendar)
  • i y (режим Calendar)

j

  • j (Rmail)

k

  • k (Dired)
  • k (Rmail)

l

  • L (Dired)
  • l (Dired)
  • l (Rmail)
  • L (режим Gnus Group)
  • l (режим Gnus Group)
  • LEFT

m

  • m (Dired)
  • M (Dired)
  • m (Rmail)
  • M (режим Calendar)
  • m (режим Calendar)
  • M-!
  • M-$
  • M-$ (Dired)
  • M-%
  • M-'
  • M-(
  • M-)
  • M-*
  • M-,
  • M--
  • M-- M-c
  • M-- M-l
  • M-- M-u
  • M-.
  • M-/
  • M-1
  • M-:
  • M-;
  • M-<
  • M-< (режим Calendar)
  • M-=
  • M-= (Dired)
  • M-= (режим Calendar)
  • M->
  • M-> (режим Calendar)
  • M-? (режим Nroff)
  • M-? (режим Shell)
  • M-@
  • M-\
  • M-^
  • M-^ (режим Fortran)
  • M-`
  • M-a
  • M-a (режим Calendar)
  • M-b
  • M-c
  • M-d
  • M-DEL
  • M-Drag-Mouse-1
  • M-e
  • M-e (режим Calendar)
  • M-f
  • M-g b (режим Enriched)
  • M-g d (режим Enriched)
  • M-g i (режим Enriched)
  • M-g l (режим Enriched)
  • M-g M-g
  • M-g o (режим Enriched)
  • M-g u (режим Enriched)
  • M-h
  • M-i
  • M-j c (режим Enriched)
  • M-j f (режим Enriched)
  • M-j l (режим Enriched)
  • M-j r (режим Enriched)
  • M-j u (режим Enriched)
  • M-k
  • M-l
  • M-m
  • M-m (Rmail)
  • M-Mouse-1
  • M-Mouse-2
  • M-Mouse-3
  • M-n (Rmail)
  • M-n (история минибуфера)
  • M-n (режим Nroff)
  • M-n (режим Shell)
  • M-p (Rmail)
  • M-p (история минибуфера)
  • M-p (режим Nroff)
  • M-p (режим Shell)
  • M-q
  • M-q (режим C)
  • M-r
  • M-r (история минибуфера)
  • M-r (режим Shell)
  • M-s (Rmail)
  • M-s (история минибуфера)
  • M-S (режим Enriched)
  • M-s (режим Gnus Summary)
  • M-s (режим Shell)
  • M-s (режим Text)
  • M-SPC
  • M-t, M-t
  • M-TAB
  • M-TAB (буфер настройки)
  • M-TAB (режим Mail)
  • M-TAB (режим Picture)
  • M-TAB (режим Text)
  • M-u
  • M-v
  • M-v (режим Calendar)
  • M-w
  • M-x
  • M-y
  • M-z
  • M-{
  • M-{ (режим Calendar)
  • M-|
  • M-}
  • M-} (режим Calendar)
  • M-~
  • Mouse-1
  • Mouse-2
  • Mouse-2 (ссылки)
  • Mouse-3

n

  • n (Gnus)
  • n (Rmail)
  • NEXT

o

  • O (Dired)
  • o (Dired)
  • o (Rmail)
  • o (режим Calendar)

p

  • P (Dired)
  • p (Gnus)
  • p (Rmail)
  • p (режим Calendar)
  • p d (режим Calendar)
  • PRIOR

q

  • Q (Dired)
  • q (Rmail)
  • q (режим Calendar)
  • q (режим Gnus Group)
  • Q (резюме Rmail)
  • q (резюме Rmail)

r

  • R (Dired)
  • r (Rmail)
  • RET
  • RET (Dired)
  • RET (режим Occur)
  • RET (режим Shell)
  • RIGHT

s

  • S (Dired)
  • s (Dired)
  • s (Rmail)
  • s (режим Calendar)
  • S (режим Calendar)
  • s (режим Gnus Summary)
  • S-Mouse-1
  • S-TAB (буфер настройки)
  • S-TAB (режим Help)
  • SPC
  • SPC (Dired)
  • SPC (Gnus)
  • SPC (Rmail)
  • SPC (режим Calendar)

t

  • t (Rmail)
  • t (режим Calendar)
  • TAB
  • TAB (GUD)
  • TAB (буфер настройки)
  • TAB (завершение)
  • TAB (и основные режимы)
  • TAB (режим Help)
  • TAB (режим Shell)
  • TAB (режим Text)
  • TAB (режимы для программ)

u

  • u (Dired)
  • u (Rmail)
  • u (режим Calendar)
  • u (режим Gnus Group)
  • u (удаление в Dired)
  • UP

v

  • v (Dired)

w

  • w (Rmail)

x

  • x (Dired)
  • x (Rmail)
  • x (режим Calendar)

z

  • Z (Dired)

~

  • ~ (Dired)

Указатель команд и функций

@anchor{Command Index} Быстрый переход: 2 - a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - q - r - s - t - u - v - w - x - y - z

2

  • 2C-associate-buffer
  • 2C-dissociate
  • 2C-merge
  • 2C-newline
  • 2C-split
  • 2C-two-columns

a

  • abbrev-mode
  • abbrev-prefix-mark
  • abort-recursive-edit
  • add-change-log-entry-other-window
  • add-global-abbrev
  • add-mode-abbrev
  • add-name-to-file
  • add-untranslated-filesystem
  • american-calendar
  • append-next-kill
  • append-to-buffer
  • append-to-file
  • apply-macro-to-region-lines
  • appt-add
  • appt-delete
  • appt-make-list
  • apropos
  • apropos-command
  • apropos-documentation
  • apropos-value
  • apropos-variable
  • ask-user-about-lock
  • auto-compression-mode
  • auto-fill-mode
  • auto-lower-mode
  • auto-raise-mode
  • auto-save-mode

b

  • back-to-indentation
  • backward-char
  • backward-delete-char
  • backward-delete-char-untabify
  • backward-kill-sentence
  • backward-kill-sexp
  • backward-kill-word
  • backward-list
  • backward-page
  • backward-paragraph
  • backward-sentence
  • backward-sexp
  • backward-text-line
  • backward-up-list
  • backward-word
  • balance-windows
  • beginning-of-buffer
  • beginning-of-defun
  • beginning-of-fortran-subprogram
  • beginning-of-line
  • binary-overwrite-mode
  • blackbox
  • bookmark-delete
  • bookmark-insert
  • bookmark-insert-location
  • bookmark-jump, bookmark-jump
  • bookmark-load
  • bookmark-save
  • bookmark-set, bookmark-set
  • bookmark-write
  • buffer-menu

c

  • c-add-style
  • c-backslash-region
  • c-backward-conditional
  • c-backward-into-nomenclature
  • c-beginning-of-statement
  • c-end-of-statement
  • c-fill-paragraph
  • c-forward-conditional
  • c-forward-into-nomenclature
  • c-indent-command
  • c-indent-defun
  • c-indent-exp
  • c-indent-line
  • c-macro-expand
  • c-mark-function, c-mark-function
  • c-scope-operator
  • c-set-offset
  • c-set-style
  • c-show-syntactic-information
  • c-toggle-auto-hungry-state
  • c-toggle-auto-state
  • c-toggle-hungry-state
  • c-up-conditional
  • calendar
  • calendar-backward-day
  • calendar-backward-month
  • calendar-backward-week
  • calendar-beginning-of-month
  • calendar-beginning-of-week
  • calendar-beginning-of-year
  • calendar-count-days-region
  • calendar-cursor-holidays
  • calendar-end-of-month
  • calendar-end-of-week
  • calendar-end-of-year
  • calendar-forward-day
  • calendar-forward-month
  • calendar-forward-week
  • calendar-forward-year, calendar-forward-year
  • calendar-goto-astro-day-number
  • calendar-goto-chinese-date
  • calendar-goto-coptic-date
  • calendar-goto-date
  • calendar-goto-ethiopic-date
  • calendar-goto-french-date
  • calendar-goto-hebrew-date
  • calendar-goto-islamic-date
  • calendar-goto-iso-date
  • calendar-goto-julian-date
  • calendar-goto-mayan-long-count-date
  • calendar-goto-persian-date
  • calendar-goto-today
  • calendar-next-calendar-round-date
  • calendar-next-haab-date
  • calendar-next-tzolkin-date
  • calendar-other-month
  • calendar-phases-of-moon
  • calendar-previous-haab-date
  • calendar-previous-tzolkin-date
  • calendar-print-astro-day-number
  • calendar-print-chinese-date
  • calendar-print-coptic-date
  • calendar-print-day-of-year
  • calendar-print-ethiopic-date
  • calendar-print-french-date
  • calendar-print-hebrew-date
  • calendar-print-islamic-date
  • calendar-print-iso-date
  • calendar-print-julian-date
  • calendar-print-mayan-date
  • calendar-print-persian-date
  • calendar-sunrise-sunset
  • calendar-unmark
  • call-last-kbd-macro
  • capitalize-word
  • cd
  • center-line
  • change-log-mode
  • choose-completion
  • clean-buffer-list
  • clear-rectangle
  • codepage-setup
  • column-number-mode
  • comint-bol
  • comint-continue-subjob
  • comint-copy-old-input
  • comint-delchar-or-maybe-eof
  • comint-dynamic-complete
  • comint-dynamic-complete-variable
  • comint-dynamic-list-filename...
  • comint-dynamic-list-input-ring
  • comint-get-next-from-history
  • comint-interrupt-subjob
  • comint-kill-input
  • comint-kill-output
  • comint-magic-space
  • comint-next-input
  • comint-next-matching-input
  • comint-next-prompt
  • comint-previous-input
  • comint-previous-matching-input
  • comint-previous-prompt
  • comint-quit-subjob
  • comint-run
  • comint-send-input
  • comint-show-maximum-output
  • comint-show-output
  • comint-stop-subjob
  • comint-strip-ctrl-m
  • comint-truncate-buffer
  • comment-region
  • compare-windows
  • compile
  • compile (MS-DOS)
  • compile-goto-error
  • complete-symbol
  • compose-mail
  • compose-mail-other-frame
  • compose-mail-other-window
  • copy-file
  • copy-rectangle-to-register
  • copy-to-buffer
  • copy-to-register
  • count-lines-page
  • count-lines-region
  • count-matches
  • count-text-lines
  • cpp-highlight-buffer
  • create-fontset-from-fontset-spec
  • customize
  • customize-apropos
  • customize-browse
  • customize-changed-options
  • customize-customized
  • customize-face
  • customize-group
  • customize-option
  • customize-saved

d

  • dabbrev-completion
  • dabbrev-expand
  • dbx
  • debug_print
  • default-value
  • define-abbrevs
  • define-key
  • define-mail-abbrev
  • define-mail-alias
  • delete-backward-char
  • delete-blank-lines
  • delete-char
  • delete-file
  • delete-frame
  • delete-horizontal-space
  • delete-indentation
  • delete-matching-lines
  • delete-non-matching-lines
  • delete-other-windows
  • delete-rectangle
  • delete-whitespace-rectangle
  • delete-window
  • describe-bindings
  • describe-coding-system
  • describe-copying
  • describe-distribution
  • describe-function
  • describe-input-method
  • describe-key
  • describe-key-briefly
  • describe-language-environment
  • describe-mode
  • describe-no-warranty
  • describe-project
  • describe-syntax
  • desktop-save
  • diary
  • diary-anniversary
  • diary-block
  • diary-cyclic
  • diary-float
  • diary-mail-entries
  • diff
  • diff-backup
  • digit-argument
  • dired
  • dired-backup-diff
  • dired-change-marks
  • dired-clean-directory
  • dired-create-directory
  • dired-diff
  • dired-display-file
  • dired-do-byte-compile
  • dired-do-chgrp
  • dired-do-chmod
  • dired-do-chown
  • dired-do-compress
  • dired-do-copy
  • dired-do-copy-regexp
  • dired-do-delete
  • dired-do-hardlink
  • dired-do-hardlink-regexp
  • dired-do-kill-lines
  • dired-do-load
  • dired-do-print
  • dired-do-query-replace
  • dired-do-redisplay
  • dired-do-rename
  • dired-do-rename-regexp
  • dired-do-search
  • dired-do-shell-command
  • dired-do-symlink
  • dired-do-symlink-regexp
  • dired-do-toggle
  • dired-downcase
  • dired-expunge
  • dired-find-file
  • dired-find-file-other-window
  • dired-flag-auto-save-files
  • dired-flag-backup-files
  • dired-flag-file-deletion
  • dired-flag-files-regexp
  • dired-flag-garbage-files
  • dired-hide-all
  • dired-hide-subdir
  • dired-mark
  • dired-mark-directories
  • dired-mark-executables
  • dired-mark-files-containing-regexp
  • dired-mark-files-regexp
  • dired-mark-subdir-files
  • dired-mark-symlinks
  • dired-maybe-insert-subdir
  • dired-mouse-find-file-other-window
  • dired-next-dirline
  • dired-next-marked-file
  • dired-next-subdir
  • dired-other-frame
  • dired-other-window
  • dired-prev-dirline
  • dired-prev-marked-file
  • dired-prev-subdir
  • dired-sort-toggle-or-edit
  • dired-tree-down
  • dired-tree-up
  • dired-undo
  • dired-unmark
  • dired-unmark-all-files
  • dired-unmark-all-files-no-query
  • dired-unmark-backward
  • dired-upcase
  • dired-view-file
  • dirs
  • dirtrack-mode
  • disable-command
  • display-time
  • dissociated-press
  • do-auto-save
  • doctor
  • down-list
  • downcase-region
  • downcase-word
  • dunnet

e

  • edit-abbrevs
  • edit-kbd-macro
  • edit-picture
  • edit-tab-stops
  • edit-tab-stops-note-changes
  • edt-emulation-off
  • edt-emulation-on
  • eldoc-mode
  • electric-nroff-mode
  • emacs-lisp-mode
  • emacs-version
  • emerge-auto-advance-mode
  • emerge-buffers
  • emerge-buffers-with-ancestor
  • emerge-files
  • emerge-files-with-ancestor
  • emerge-skip-prefers-mode
  • enable-command
  • enable-flow-control
  • enable-flow-control-on
  • enable-local-eval
  • enable-local-variables
  • end-kbd-macro
  • end-of-buffer
  • end-of-defun
  • end-of-fortran-subprogram
  • end-of-line
  • enlarge-window
  • enlarge-window-horizontally
  • enriched-mode
  • european-calendar
  • eval-current-buffer
  • eval-defun
  • eval-expression
  • eval-last-sexp
  • eval-region
  • exchange-point-and-mark
  • execute-extended-command
  • exit-calendar
  • exit-recursive-edit
  • expand-abbrev
  • expand-mail-aliases
  • expand-region-abbrevs

f

  • facemenu-remove-all
  • facemenu-remove-props
  • facemenu-set-background
  • facemenu-set-bold
  • facemenu-set-bold-italic
  • facemenu-set-default
  • facemenu-set-face
  • facemenu-set-foreground
  • facemenu-set-italic
  • facemenu-set-underline
  • fast-lock-mode
  • fill-individual-paragraphs
  • fill-nonuniform-paragraphs
  • fill-paragraph
  • fill-region
  • fill-region-as-paragraph
  • find-alternate-file
  • find-dired
  • find-file
  • find-file-binary
  • find-file-literally
  • find-file-other-frame
  • find-file-other-window
  • find-file-read-only
  • find-file-read-only-other-frame
  • find-file-text
  • find-grep-dired
  • find-name-dired
  • find-tag
  • find-tag-other-frame
  • find-tag-other-window
  • find-tag-regexp
  • finder-by-keyword
  • flush-lines
  • flyspell-mode
  • font-lock-add-keywords
  • font-lock-fontify-block
  • font-lock-mode
  • format-find-file
  • fortran-auto-fill-mode
  • fortran-column-ruler
  • fortran-comment-region
  • fortran-indent-line
  • fortran-indent-new-line
  • fortran-indent-subprogram
  • fortran-join-line
  • fortran-mode
  • fortran-narrow-to-subprogram
  • fortran-next-statement
  • fortran-previous-statement
  • fortran-split-line
  • fortran-window-create
  • forward-char
  • forward-list
  • forward-page
  • forward-paragraph
  • forward-sentence
  • forward-sexp
  • forward-text-line
  • forward-word
  • frame-configuration-to-register

g

  • gdb
  • global-font-lock-mode
  • global-set-key
  • global-unset-key
  • gnus
  • gnus-group-exit
  • gnus-group-kill-group
  • gnus-group-list-all-groups
  • gnus-group-list-groups
  • gnus-group-next-group
  • gnus-group-next-unread-group
  • gnus-group-prev-group
  • gnus-group-prev-unread-group
  • gnus-group-read-group
  • gnus-group-unsubscribe-current-group
  • gnus-summary-isearch-article
  • gnus-summary-next-subject
  • gnus-summary-next-unread-article
  • gnus-summary-prev-page
  • gnus-summary-prev-subject
  • gnus-summary-prev-unread-article
  • gnus-summary-search-article-forward
  • gomoku
  • goto-char
  • goto-line
  • grep
  • grep (MS-DOS)
  • grep-find
  • gud-cont
  • gud-def
  • gud-down
  • gud-finish
  • gud-gdb-complete-command
  • gud-next
  • gud-refresh
  • gud-remove
  • gud-step
  • gud-stepi
  • gud-tbreak
  • gud-up

h

  • hanoi
  • help-command
  • help-for-help
  • help-next-ref
  • help-previous-ref
  • help-with-tutorial
  • hide-body
  • hide-entry
  • hide-leaves
  • hide-other
  • hide-sublevels
  • hide-subtree
  • highlight-changes-mode
  • holidays
  • hscroll-mode

i

  • iconify-or-deiconify-frame
  • ielm
  • increase-left-margin
  • increment-register
  • indent-for-comment
  • indent-new-comment-line
  • indent-region
  • indent-relative
  • indent-rigidly
  • indent-sexp
  • info
  • Info-goto-emacs-command-node
  • Info-goto-emacs-key-command-node
  • info-lookup-file
  • info-lookup-symbol
  • insert-abbrevs
  • insert-anniversary-diary-entry
  • insert-block-diary-entry
  • insert-cyclic-diary-entry
  • insert-diary-entry
  • insert-file
  • insert-kbd-macro
  • insert-monthly-diary-entry
  • insert-parentheses
  • insert-register
  • insert-weekly-diary-entry
  • insert-yearly-diary-entry
  • inverse-add-global-abbrev
  • inverse-add-mode-abbrev
  • isearch-backward
  • isearch-backward-regexp
  • isearch-forward
  • isearch-forward-regexp
  • ispell-buffer
  • ispell-complete-word
  • ispell-kill-ispell
  • ispell-message
  • ispell-region
  • ispell-word

j

  • jdb
  • jump-to-register
  • just-one-space

k

  • kbd-macro-query
  • keep-lines
  • keyboard-escape-quit
  • keyboard-translate
  • kill-all-abbrevs
  • kill-buffer
  • kill-buffer-and-window
  • kill-comment
  • kill-compilation
  • kill-line
  • kill-local-variable
  • kill-rectangle
  • kill-region
  • kill-ring-save
  • kill-sentence
  • kill-sexp
  • kill-some-buffers
  • kill-word

l

  • latex-mode
  • lazy-lock-mode
  • line-number-mode
  • lisp-complete-symbol
  • lisp-eval-defun
  • lisp-indent-line
  • lisp-interaction-mode
  • lisp-mode
  • list-abbrevs
  • list-bookmarks
  • list-buffers
  • list-calendar-holidays
  • list-coding-systems
  • list-command-history
  • list-directory
  • list-faces-display
  • list-holidays
  • list-input-methods
  • list-matching-lines
  • list-tags
  • list-text-properties-at
  • list-yahrzeit-dates
  • load
  • load-file
  • load-library
  • local-set-key
  • local-unset-key
  • lpr-buffer
  • lpr-region

m

  • mail-attach-file
  • mail-bcc
  • mail-cc
  • mail-complete
  • mail-fcc
  • mail-fill-yanked-message
  • mail-interactive-insert-alias
  • mail-send
  • mail-send-and-exit
  • mail-signature
  • mail-subject
  • mail-text
  • mail-to
  • mail-yank-original
  • mail-yank-region
  • make-frame-command
  • make-frame-on-display
  • make-indirect-buffer
  • make-local-variable
  • make-symbolic-link
  • make-variable-buffer-local
  • Man-fontify-manpage
  • manual-entry
  • mark-calendar-holidays
  • mark-defun
  • mark-diary-entries
  • mark-fortran-subprogram
  • mark-page
  • mark-paragraph
  • mark-sexp
  • mark-whole-buffer
  • mark-word
  • minibuffer-complete
  • minibuffer-complete-word
  • mode25
  • mode4350
  • modify-face
  • mouse-choose-completion
  • mouse-save-then-click
  • mouse-secondary-save-then-kill
  • mouse-set-point
  • mouse-set-region
  • mouse-set-secondary
  • mouse-start-secondary
  • mouse-yank-at-click
  • mouse-yank-secondary
  • move-past-close-and-reindent
  • move-to-window-line
  • mpuz, mpuz

n

  • name-last-kbd-macro
  • narrow-to-defun
  • narrow-to-page
  • narrow-to-region
  • negative-argument
  • newline
  • newline-and-indent
  • next-completion
  • next-error
  • next-history-element
  • next-line
  • next-matching-history-element
  • normal-mode
  • not-modified
  • nroff-mode
  • number-to-register

o

  • occur
  • open-dribble-file
  • open-line
  • open-rectangle
  • open-termscript
  • other-frame
  • other-window
  • outline-backward-same-level
  • outline-forward-same-level
  • outline-minor-mode
  • outline-mode
  • outline-next-visible-heading
  • outline-previous-visible-heading
  • outline-up-heading
  • overwrite-mode

p

  • paragraph-indent-text-mode
  • pdb
  • perldb
  • phases-of-moon
  • picture-backward-clear-column
  • picture-backward-column
  • picture-clear-column
  • picture-clear-line
  • picture-clear-rectangle
  • picture-clear-rectangle-to-register
  • picture-forward-column
  • picture-motion
  • picture-motion-reverse
  • picture-move-down
  • picture-move-up
  • picture-movement-down
  • picture-movement-left
  • picture-movement-ne
  • picture-movement-nw
  • picture-movement-right
  • picture-movement-se
  • picture-movement-sw
  • picture-movement-up
  • picture-newline
  • picture-open-line
  • picture-set-tab-stops
  • picture-tab
  • picture-tab-search
  • picture-yank-rectangle
  • picture-yank-rectangle-from-register
  • plain-tex-mode
  • point-to-register
  • pop-global-mark
  • pop-tag-mark
  • prefer-coding-system
  • prepend-to-buffer
  • previous-completion
  • previous-history-element
  • previous-line
  • previous-matching-history-element
  • print-buffer
  • print-buffer (MS-DOS)
  • print-region
  • print-region (MS-DOS)
  • ps-print-buffer
  • ps-print-buffer (MS-DOS)
  • ps-print-buffer-with-faces
  • ps-print-region
  • ps-print-region-with-faces
  • ps-spool-buffer
  • ps-spool-buffer (MS-DOS)
  • ps-spool-buffer-with-faces
  • ps-spool-region
  • ps-spool-region-with-faces
  • pwd

q

  • quail-set-keyboard-layout
  • query-replace
  • query-replace-regexp
  • quietly-read-abbrev-file
  • quoted-insert

r

  • re-search-backward
  • re-search-forward
  • read-abbrev-file
  • recenter
  • recover-file
  • recover-session
  • redraw-calendar
  • remove-untranslated-filesystem
  • rename-buffer
  • rename-file
  • repeat
  • repeat-complex-command
  • replace-regexp
  • replace-string
  • report-emacs-bug
  • reposition-window
  • resize-minibuffer-mode
  • revert-buffer
  • revert-buffer (Dired)
  • rlogin
  • rlogin-directory-tracking-mode
  • rmail
  • rmail-add-label
  • rmail-beginning-of-message
  • rmail-bury
  • rmail-continue
  • rmail-delete-backward
  • rmail-delete-forward
  • rmail-edit-current-message
  • rmail-expunge
  • rmail-first-message
  • rmail-forward
  • rmail-get-new-mail
  • rmail-input
  • rmail-kill-label
  • rmail-last-message
  • rmail-mail
  • rmail-mode
  • rmail-next-labeled-message
  • rmail-next-message
  • rmail-next-undeleted-message
  • rmail-output
  • rmail-output-body-to-file
  • rmail-output-to-rmail-file
  • rmail-previous-labeled-message
  • rmail-previous-message
  • rmail-previous-undeleted-message
  • rmail-quit
  • rmail-reply
  • rmail-resend
  • rmail-retry-failure
  • rmail-save
  • rmail-search
  • rmail-show-message
  • rmail-summary
  • rmail-summary-by-labels
  • rmail-summary-by-recipients
  • rmail-summary-by-topic
  • rmail-summary-quit
  • rmail-summary-wipe
  • rmail-toggle-header
  • rmail-undelete-previous-message
  • rot13-other-window
  • run-lisp

s

  • save-buffer
  • save-buffers-kill-emacs
  • save-some-buffers
  • scroll-bar-mode
  • scroll-calendar-left
  • scroll-calendar-left-three-months
  • scroll-calendar-right
  • scroll-calendar-right-three-months
  • scroll-down
  • scroll-left
  • scroll-other-window
  • scroll-right
  • scroll-up
  • sdb
  • search-backward
  • search-forward
  • select-frame-by-name
  • self-insert
  • send-invisible
  • server-edit
  • set-background-color
  • set-border-color
  • set-buffer-file-coding-system
  • set-buffer-process-coding-system
  • set-comment-column
  • set-cursor-color
  • set-fill-column
  • set-fill-prefix
  • set-foreground-color
  • set-frame-font
  • set-frame-name
  • set-goal-column
  • set-input-method
  • set-justification-center
  • set-justification-full
  • set-justification-left
  • set-justification-none
  • set-justification-right
  • set-keyboard-coding-system
  • set-language-environment
  • set-mark-command
  • set-mouse-color
  • set-next-selection-coding-system
  • set-rmail-inbox-list
  • set-selection-coding-system
  • set-selective-display
  • set-terminal-coding-system
  • set-variable
  • set-visited-file-name
  • setq-default
  • shell
  • shell-backward-command
  • shell-command
  • shell-command-on-region
  • shell-forward-command
  • shell-pushd-dextract
  • shell-pushd-dunique
  • shell-pushd-tohome
  • show-all
  • show-all-diary-entries
  • show-branches
  • show-children
  • show-entry
  • show-paren-mode
  • show-subtree
  • shrink-window-if-larger-than-buffer
  • slitex-mode
  • sort-columns
  • sort-fields
  • sort-lines
  • sort-numeric-fields
  • sort-pages
  • sort-paragraphs
  • split-line
  • split-window-horizontally
  • split-window-vertically
  • spook
  • standard-display-8bit
  • start-kbd-macro
  • string-rectangle
  • substitute-in-file-name
  • substitute-key-definition
  • sunrise-sunset
  • suspend-emacs
  • switch-to-buffer
  • switch-to-buffer-other-frame
  • switch-to-buffer-other-window
  • switch-to-completions

t

  • tab-to-tab-stop
  • tabify
  • tags-apropos
  • tags-loop-continue
  • tags-query-replace
  • tags-search
  • telnet
  • tex-bibtex-file
  • tex-buffer
  • tex-close-latex-block
  • tex-file
  • tex-insert-braces
  • tex-insert-quote
  • tex-kill-job
  • tex-latex-block
  • tex-mode
  • tex-print
  • tex-recenter-output-buffer
  • tex-region
  • tex-show-print-queue
  • tex-terminate-paragraph
  • tex-validate-region
  • tex-view
  • text-mode
  • tmm-menubar
  • toggle-input-method
  • toggle-scroll-bar
  • top-level
  • transient-mark-mode
  • transpose-chars
  • transpose-lines
  • transpose-sexps, transpose-sexps
  • transpose-words, transpose-words
  • turn-on-font-lock

u

  • undigestify-rmail-message
  • undo
  • unexpand-abbrev
  • unforward-rmail-message
  • universal-argument
  • universal-coding-system-argument
  • unrmail
  • untabify
  • up-list
  • upcase-region
  • upcase-word

v

  • vc-annotate
  • vc-cancel-version
  • vc-create-snapshot
  • vc-diff
  • vc-directory
  • vc-dired-mark-locked
  • vc-dired-toggle-terse-mode
  • vc-insert-headers
  • vc-merge
  • vc-next-action
  • vc-print-log
  • vc-register
  • vc-rename-file
  • vc-retrieve-snapshot
  • vc-revert-buffer
  • vc-toggle-read-only, vc-toggle-read-only
  • vc-update-change-log
  • vc-version-other-window
  • vi-mode
  • view-buffer
  • view-diary-entries
  • view-emacs-FAQ
  • view-emacs-news
  • view-file
  • view-hello-file
  • view-lossage
  • view-register
  • vip-mode
  • viper-mode
  • visit-tags-table

w

  • what-cursor-position
  • what-line
  • what-page
  • where-is
  • which-function-mode
  • widen
  • widget-backward
  • widget-complete
  • widget-forward
  • window-configuration-to-register
  • word-search-backward
  • word-search-forward
  • write-abbrev-file
  • write-file
  • write-region

x

  • xdb

y

  • yank
  • yank-pop
  • yank-rectangle
  • yow

z

  • zap-to-char

Указатель переменных

@anchor{Variable Index} Быстрый переход: a - b - c - d - e - f - g - h - i - j - k - l - m - n - o - p - r - s - t - u - v - w - x

a

  • abbrev-all-caps
  • abbrev-file-name
  • abbrev-mode
  • adaptive-fill-first-line-regexp
  • adaptive-fill-function
  • adaptive-fill-mode
  • adaptive-fill-regexp
  • ange-ftp-default-user
  • appt-display-diary
  • appt-issue-message
  • apropos-do-all
  • auto-coding-alist
  • auto-mode-alist
  • auto-save-default
  • auto-save-interval
  • auto-save-list-file-prefix
  • auto-save-timeout
  • auto-save-visited-file-name

b

  • backup-by-copying
  • backup-by-copying-when-linked
  • backup-by-copying-when-mismatch
  • backup-enable-predicate
  • baud-rate
  • blink-matching-delay
  • blink-matching-paren
  • blink-matching-paren-distance
  • bookmark-save-flag
  • bookmark-search-size
  • buffer-file-coding-system
  • buffer-read-only

c

  • c-basic-offset
  • c-comment-only-line-offset
  • c-comment-start-regexp
  • c-default-style
  • c-hanging-comment-ender-p
  • c-hanging-comment-starter-p
  • c-hungry-delete-key
  • c-mode-hook
  • c-mode-map
  • c-offsets-alist
  • c-special-indent-hook
  • c-strict-syntax-p
  • c-style-alist
  • c-syntactic-context
  • calendar-daylight-savings-ends
  • calendar-daylight-savings-ends-time
  • calendar-daylight-savings-starts
  • calendar-daylight-time-offset
  • calendar-daylight-time-zone-name
  • calendar-latitude
  • calendar-location-name
  • calendar-longitude
  • calendar-standard-time-zone-name
  • calendar-time-zone
  • calendar-week-start-day
  • case-fold-search
  • case-replace
  • change-major-mode-with-file-name
  • coding
  • colon-double-space
  • comint-completion-addsuffix
  • comint-completion-autolist
  • comint-completion-fignore
  • comint-completion-recexact
  • comint-input-autoexpand
  • comint-input-ignoredups
  • comint-prompt-regexp
  • comint-scroll-show-maximum-output
  • comint-scroll-to-bottom-on-input
  • comint-scroll-to-bottom-on-output
  • command-history
  • command-line-args
  • comment-column
  • comment-end
  • comment-indent-function
  • comment-line-start
  • comment-line-start-skip
  • comment-multi-line
  • comment-padding
  • comment-start
  • comment-start-skip
  • compare-ignore-case
  • compilation-scroll-output
  • compile-command
  • completion-auto-help
  • completion-ignored-extensions
  • ctl-arrow
  • ctl-x-4-map
  • ctl-x-map
  • current-input-method

d

  • dabbrev-abbrev-char-regexp
  • dabbrev-abbrev-skip-leading-regexp
  • dabbrev-case-fold-search, dabbrev-case-fold-search
  • dabbrev-case-replace
  • dabbrev-check-all-buffers
  • dabbrev-limit
  • dbx-mode-hook
  • default-buffer-file-coding-system
  • default-directory
  • default-enable-multibyte-characters
  • default-input-method
  • default-justification
  • default-major-mode
  • delete-auto-save-files
  • delete-old-versions
  • desktop-enable
  • desktop-files-not-to-save
  • diary-file
  • diary-hook
  • diary-mail-days
  • diff-switches
  • dired-chown-program
  • dired-copy-preserve-time
  • dired-garbage-files-regexp
  • dired-kept-versions
  • dired-listing-switches
  • dired-listing-switches (MS-DOS)
  • display-time -24hr-format
  • dos-codepage
  • dos-display-scancodes
  • dos-hyper-key
  • dos-keypad-mode
  • dos-printer
  • dos-ps-printer
  • dos-super-key
  • dos-unsupported-character-glyph
  • double-click-time

e

  • echo-keystrokes
  • emacs-lisp-mode-hook
  • emerge-combine-versions-template
  • emerge-startup-hook
  • enable-multibyte-characters, enable-multibyte-characters
  • enable-recursive-minibuffers
  • enriched-fill-after-visiting
  • enriched-translations
  • eol-mnemonic-dos
  • eol-mnemonic-mac
  • eol-mnemonic-undecided
  • eol-mnemonic-unix
  • esc-map
  • european-calendar-style
  • exit-language-environment-hook
  • explicit-shell-file-name

f

  • fast-lock-cache-directories
  • fast-lock-minimum-size
  • fast-lock-save-others
  • file-coding-system-alist
  • file-name-buffer-file-type-alist
  • file-name-coding-system
  • file-name-handler-alist
  • fill-column
  • fill-prefix
  • find-file-existing-other-name
  • find-file-hooks
  • find-file-not-found-hooks
  • find-file-run-dired
  • find-file-visit-truename
  • find-ls-option
  • find-tag-marker-ring-length
  • font-lock-beginning-of-syntax-function
  • font-lock-mark-block-function
  • font-lock-maximum-decoration
  • font-lock-maximum-size
  • font-lock-support-mode
  • fortran-analyze-depth
  • fortran-break-before-delimiters
  • fortran-check-all-num...
  • fortran-column-ruler
  • fortran-comment-indent-char
  • fortran-comment-indent-style
  • fortran-comment-line-extra-indent
  • fortran-comment-region
  • fortran-continuation-indent
  • fortran-continuation-string
  • fortran-do-indent
  • fortran-electric-line-number
  • fortran-if-indent
  • fortran-line-number-indent
  • fortran-minimum-statement-indent...
  • fortran-structure-indent
  • fortran-tab-mode-default

g

  • gdb-mode-hook
  • gud-xdb-directories

h

  • help-map
  • highlight-nonselected-windows
  • highlight-wrong-size-font
  • history-length

i

  • indent-tabs-mode
  • indent-tabs-mode (режим Fortran)
  • inferior-lisp-program
  • inhibit-eol-conversion
  • initial-major-mode
  • input-method-highlight-flag
  • input-method-verbose-flag
  • insert-default-directory
  • interpreter-mode-alist
  • inverse-video
  • isearch-mode-map
  • ispell-dictionary

j

  • jdb-mode-hook

k

  • kept-new-versions
  • kept-old-versions
  • kill-buffer-hook
  • kill-ring
  • kill-ring-max
  • kill-whole-line

l

  • latex-block-names
  • latex-mode-hook
  • latex-run-command
  • lazy-lock-defer-contextually
  • lazy-lock-defer-on-scrolling
  • lazy-lock-defer-time
  • lazy-lock-minimum-size
  • lazy-lock-stealth-lines
  • lazy-lock-stealth-time
  • lazy-lock-stealth-verbose
  • line-number-display-limit
  • lisp-body-indent
  • lisp-indent-offset
  • lisp-interaction-mode-hook
  • lisp-mode-hook
  • lisp-mode-map
  • list-directory-brief-switches
  • list-directory-verbose-switches
  • load-path
  • lpr-add-switches
  • lpr-command (MS-DOS)
  • lpr-commands
  • lpr-headers-switches
  • lpr-headers-switches (MS-DOS)
  • lpr-switches
  • lpr-switches (MS-DOS)

m

  • mail-abbrevs
  • mail-aliases
  • mail-archive-file-name
  • mail-default-reply-to
  • mail-from-style
  • mail-mode-hook
  • mail-personal-alias-file
  • mail-self-blind
  • mail-setup-hook
  • mail-signature
  • mail-user-agent
  • mail-yank-prefix
  • make-backup-files
  • Man-fontify-manpage-flag
  • mark-even-if-inactive
  • mark-ring
  • mark-ring-max
  • message-log-max
  • midnight-hook
  • midnight-mode
  • minibuffer-local-completion-map
  • minibuffer-local-map
  • minibuffer-local-must-match-map
  • minibuffer-local-ns-map
  • minibuffer-scroll-overlap
  • mode-line-inverse-video
  • mode-specific-map
  • mouse-scroll-min-lines
  • mouse-yank-at-point
  • muddle-mode-hook

n

  • next-line-add-newlines
  • next-screen-context-lines
  • no-redraw-on-reenter
  • nroff-mode-hook

o

  • outline-level
  • outline-minor-mode-prefix
  • outline-mode-hook
  • outline-regexp

p

  • page-delimiter
  • paragraph-separate
  • paragraph-start
  • parens-require-spaces
  • pdb-mode-hook
  • perldb-mode-hook
  • picture-mode-hook
  • picture-tab-chars
  • plain-tex-mode-hook
  • print-region-function (MS-DOS)
  • printer-name
  • printer-name (MS-DOS)
  • ps-font-family
  • ps-font-info-database
  • ps-font-size
  • ps-landscape-mode
  • ps-lpr-command
  • ps-lpr-command (MS-DOS)
  • ps-lpr-switches
  • ps-lpr-switches (MS-DOS)
  • ps-number-of-columns
  • ps-page-dimensions-database
  • ps-paper-type
  • ps-print-color-p
  • ps-print-header
  • ps-printer-name
  • ps-printer-name (MS-DOS)

r

  • read-quoted-char-radix
  • require-final-newline
  • revert-without-query
  • rlogin-explicit-args
  • rmail-decode-mime-charset
  • rmail-delete-after-output
  • rmail-delete-message-hook
  • rmail-dont-reply-to-names
  • rmail-edit-mode-hook
  • rmail-file-coding-system
  • rmail-file-name
  • rmail-highlighted-headers
  • rmail-ignored-headers
  • rmail-mail-new-frame
  • rmail-mode-hook
  • rmail-movemail-flags
  • rmail-output-file-alist
  • rmail-pop-password
  • rmail-pop-password-required
  • rmail-preserve-inbox
  • rmail-primary-inbox-list
  • rmail-redisplay-summary
  • rmail-retry-ignored-headers
  • rmail-secondary-file-directory
  • rmail-secondary-file-regexp
  • rmail-summary-line-count-flag
  • rmail-summary-window-size

s

  • same-window-buffer-names
  • same-window-regexps
  • save-abbrevs
  • scheme-mode-hook
  • scroll-conservatively
  • scroll-margin
  • scroll-preserve-screen-position
  • sdb-mode-hook
  • search-slow-speed
  • search-slow-window-lines
  • selective-display-ellipses
  • sendmail-coding-system, sendmail-coding-system
  • sentence-end
  • sentence-end-double-space
  • server-temp-file-regexp
  • server-window
  • set-language-environment-hook
  • shell-cd-regexp
  • shell-command-default-error-buffer
  • shell-command-execonly
  • shell-command-regexp
  • shell-completion-fignore
  • shell-file-name
  • shell-input-ring-file-name
  • shell-popd-regexp
  • shell-prompt-pattern
  • shell-pushd-regexp
  • shell-set-directory-error-hook
  • slitex-mode-hook
  • slitex-run-command
  • sort-fold-case
  • special-display-buffer-names
  • special-display-frame-alist
  • special-display-regexps
  • split-window-keep-point
  • standard-fontset-spec
  • standard-indent
  • suggest-key-bindings

t

  • tab-stop-list
  • tab-width
  • tags-file-name
  • tags-table-list
  • term-file-prefix
  • term-setup-hook
  • tex-bibtex-command
  • tex-default-mode
  • tex-directory
  • tex-dvi-print-command
  • tex-dvi-view-command
  • tex-main-file
  • tex-mode-hook
  • tex-run-command
  • tex-shell-hook
  • tex-show-queue-command
  • tex-start-options-string
  • text-mode-hook
  • track-eol
  • truncate-lines
  • truncate-partial-width-windows

u

  • undo-limit
  • undo-strong-limit
  • unibyte-display-via-language-environment
  • user-mail-address

v

  • vc-command-messages
  • vc-comment-alist
  • vc-consult-headers
  • vc-default-back-end
  • vc-default-init-version
  • vc-directory-exclusion-list
  • vc-dired-recurse
  • vc-dired-terse-display
  • vc-follow-symlinks
  • vc-handle-cvs
  • vc-header-alist
  • vc-initial-comment
  • vc-keep-workfiles
  • vc-log-mode-hook
  • vc-make-backup-files, vc-make-backup-files
  • vc-mistrust-permissions
  • vc-path
  • vc-static-header-alist
  • vc-suppress-confirm
  • version-control
  • visible-bell

w

  • w32-pass-alt-to-system
  • which-func-modes
  • window-min-height
  • window-min-width

x

  • x-cut-buffer-max
  • xdb-mode-hook

Обсудить данную тему на нашем форуме "Все о Linux"