Решение  частых проблем – ЧАСТЬ 1

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

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

C-g

C-hBREAK(MS-DOS)

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

C-]              Прервать самый глубокий уровень рекурсивного редактирования  и  отменить команду, которая его запустила (abort-recursive-edit).

hESCi hESCi hESCi

Выход или прерывание, в зависимости от того, что подходит в этот момент

(keyboard-escape-quit).

M-x top-level

Прервать все работающие в данный момент уровни рекурсивного редактиро-

вания.

C-x u          Отменить ранее сделанное изменение в содержимом  буфера (undo).

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

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

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

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

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

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

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

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

Команда hESCi hESCi hESCi  (keyboard-escape-quit) может совершить и выход, и прерывание. Этот ключ был определен, потому что во многих программах для PC для “выхода” используется hESCi. Он может отменить числовой аргумент, очистить выделенную область или выйти из замены с подтверждением, как 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-]  — обыкновенный ключ и имеет смысл только благодаря привязке  в таблице ключей.  См. Раздел 30.12 [Рекурсивное  редактирование],  с. 338.

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

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

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

32.2.1  Если hDELi  не удаляет

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

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

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

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

Если в строке режима вокруг круглых скобок есть квадратные скобки ‘[…]’, которые содержат имена главного и второстепенных режимов, то это означает, что вы вошли в уровень рекурсивного редактирования. Если вы не хотели этого или не понимаете, что это значит, то вы должны просто покинуть этот уровень рекурсивного редактирования. Чтобы

это сделать, наберите M-x top-level.  Это называется возвратом к верхнему уровню. См.

Раздел 30.12 [Рекурсивное  редактирование],  с. 338.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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