Почти все сообщения, отображаемые в области вывода, также записываются
в буфер *Messages*, чтобы пользователь мог на них сослаться.
Это включает все сообщения, выводимые с помощью
message. По умолчанию этот буфер доступен только для чтения и
использует основной режим messages-buffer-mode. Ничто не
предотвращает удаление буфера *Messages*, но следующий
отображаемый в нем сообщение воссоздаст его. Любой код Lisp, которому
необходимо напрямую обращаться к буферу *Messages* и
который хочет убедиться в его существовании, должен использовать функцию
messages-buffer.
Эта функция возвращает буфер *Messages*. Если он
не существует, она создает его и переключает в режим messages-buffer-mode.
Эта переменная указывает, сколько строк сохранять в буфере *Messages*.
Значение t означает, что нет ограничений на количество
сохраняемых строк. Значение nil полностью отключает
журналирование сообщений. Вот как отобразить сообщение и предотвратить его
журналирование:
(let (message-log-max) (message …))
Эта переменная содержит имя буфера, в который должны записываться
сообщения, и по умолчанию это *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
не требуют ничего особенного для активации функции объединения журнала
сообщений. Она работает всякий раз, когда два последовательных сообщения
журналируются и имеют общий префикс, оканчивающийся на «...».