Emacs для начинающих

       

Вывод результатов проверки


После того, как команда nsgml отредактирована, и нажата клавиша Enter, PSGML разбивает экран пополам, чтобы создать новое окно для буфера под названием *sgml validation*. Вид команды, выполняющей проверку, отобразится в этом окне.

Если в окне минибуфера появится слово "done", то это означает, что программа проверки не нашла ошибок в тексте документа.

Если же ошибки все-таки обнаружены, то программа проверки перечислит их в окне буфера *sgml validation*. PSGML отсортирует сообщения и позволит быстро найти ошибки, обнаруженные в тексте. Рассмотрим пример. Добавим две ошибки к совершенно правильному тексту и посмотрим как будут выглядеть сообщения об ошибках.

Ниже приводится текст документа, который полность соответствует DocBook DTD, за исключением двух пунктов. Во-первых, в элемент emphasis помещен беспризорный открывающий тэг <sect1>, а во-вторых, в элемент <para> вставлен недопустимый атрибут hair со значением red:

<!DOCTYPE chapter PUBLIC "-//Davenport//DTD DocBook V2.4.1//EN"> <chapter> <title>Gone Whalin </title> <sect1> <title>The Carpet-Bag</title> <para>I stuffed a <emphasis>shirt<sect1></emphasis> or two into my old carpet-bag, <emphasis>tucked</emphasis> it under my arm, and <emphasis>started</emphasis> for Cape Horn and the Pacific.</para> <para hair=red>Quitting the good city of old Manhatto, I duly arrive in New Bedford.</para> <para>It was on a Saturday night in December.</para>

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

nsgmls:whalin.sgm:6:43:E: document type does not allow element "SECT1" here nsgmls:whalin.sgm:6:54:E: "SECT1" not finished but containing element ended nsgmls:whalin.sgm:6:54:E: end tag for "SECT1" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:6:37: start tag was here nsgmls:whalin.sgm:9:15:E: there is no attribute "HAIR" nsgmls:whalin.sgm:11:57:E: end tag for "SECT1" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:4:1: start tag was here nsgmls:whalin.sgm:11:57:E: end tag for "CHAPTER" omitted, but OMITTAG NO was specified nsgmls:whalin.sgm:2:0: start tag was here


Данные сообщения об ошибках дают два полезных урока, связанных с программированием вообще:

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

next-error (комбинация C-x ') - команда Emacs, осуществляющая переход в строку, где была обнаружена ошибка. Эта команда не является специфической командой PSGML. Она используется программистами для обнаружения строк в их исходном тексте программ, в которых компилятор нашел ошибки. По команде next-error курсор переходит в окно документа и перемещается в строку, содержащую ошибку. При этом в окне буфера сообщений об ошибках, *sgml validation*, соответствующее сообщение становится первым в списке (см. рис. Поиск ошибок в тексте с помощью команды .).

Поиск ошибок в тексте с помощью команды next-error.
Посторонний тэг sect1 стал причиной пяти сообщений об ошибках, а атрибут hair - только одной. Сообщение без буквенного кода кода после второго номера не является самостоятельным сообщением об ошибке, а несет в себе дополнительную информацию для предыдущей ошибки. Последовательно нажимая C-x ' можно отследить все "множественные" ошибки.
Если ошибок больше нет, и при этом нажать C-x ', то в окне минибуфера появится сообщение:

No_more_errors
Содержание раздела