42.4.3 Сообщения журнала в *Messages*

Почти все сообщения, отображаемые в области вывода, также записываются в буфер *Messages*, чтобы пользователь мог на них сослаться. Это включает все сообщения, выводимые с помощью message. По умолчанию этот буфер доступен только для чтения и использует основной режим messages-buffer-mode. Ничто не предотвращает удаление буфера *Messages*, но следующий отображаемый в нем сообщение воссоздаст его. Любой код Lisp, которому необходимо напрямую обращаться к буферу *Messages* и который хочет убедиться в его существовании, должен использовать функцию messages-buffer.

Функция: messages-buffer

Эта функция возвращает буфер *Messages*. Если он не существует, она создает его и переключает в режим messages-buffer-mode.

Параметр пользователя: message-log-max

Эта переменная указывает, сколько строк сохранять в буфере *Messages*. Значение t означает, что нет ограничений на количество сохраняемых строк. Значение nil полностью отключает журналирование сообщений. Вот как отобразить сообщение и предотвратить его журналирование:

(let (message-log-max)
  (message …))
Переменная: messages-buffer-name

Эта переменная содержит имя буфера, в который должны записываться сообщения, и по умолчанию это *Messages*. Некоторые пакеты могут найти полезным временно перенаправить вывод в другой буфер (возможно, чтобы позже записать буфер в файл журнала), и они могут привязать эту переменную к другому имени буфера. (Обратите внимание, что этот буфер (если он еще не существует) будет создан и помещен в messages-buffer-mode.)

Чтобы сделать *Messages* более удобным для пользователя, функция журналирования объединяет последовательные одинаковые сообщения. Она также объединяет последовательные связанные сообщения для двух случаев: вопрос, за которым следует ответ, и серия сообщений о ходе выполнения.

Вопрос, за которым следует ответ, имеет два сообщения, подобные тем, что генерируются y-or-n-p: первое — «question», а второе — «question...answer». Первое сообщение не несет дополнительной информации сверх того, что содержится во втором, поэтому журналирование второго сообщения отбрасывает первое из журнала.

Серия сообщений о ходе выполнения имеет последовательные сообщения, подобные тем, что генерируются make-progress-reporter. Они имеют вид «base...how-far», где base одинаков каждый раз, а how-far меняется. Журналирование каждого сообщения в серии отбрасывает предыдущее, при условии, что они являются последовательными.

Функции make-progress-reporter и y-or-n-p не требуют ничего особенного для активации функции объединения журнала сообщений. Она работает всякий раз, когда два последовательных сообщения журналируются и имеют общий префикс, оканчивающийся на «...».