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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

он задает два вопроса, перед тем как вернуться к тому, чем он был занят:

1  Виртуальная память исчерпана. (Прим. переводчика)

Auto-save?  (y  or  n)

Abort  (and  dump  core)?  (y  or  n)

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

Ответ 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-hBREAKдважды, когда зависает какой-то системный вызов (MS-DOS или BIOS), или когда Emacs попал в очень короткий бесконечный цикл (в коде на Си, не на Лиспе).

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

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

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

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

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

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

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

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

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

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

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

действия, но неполадка исправляется сама, если вы наберете C-l,  то это случай непра-

вильного обновления изображения.

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

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

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

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

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

Если диалоговая строка документации функции или переменной не согласуется  с руко-

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

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

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

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

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

‘Сегодня я себя прекрасно чувствую’.  Наилучший способ описать эту ошибку — приве-

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

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

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

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