Отображение сообщений в области эха
В этом разделе описаны стандартные функции для отображения сообщений в области эха.
- Функция: message format-string &rest arguments
-
Эта функция отображает сообщение в области эха. format-string — это строка формата, а arguments — объекты для спецификаторов формата, как в функции
format-message(см. Форматирование строк). Полученная строка формата отображается в области эха; если она содержит свойства текстаface, она отображается с указанными начертаниями (см. Начертания). Строка также добавляется в буфер *Messages*, но без свойств текста (см. Запись сообщений в *Messages*).Как правило, обратный апостроф и апостроф в строке формата преобразуются в соответствующие парные типографские кавычки, например,
"Missing `%s'"может превратиться в"Missing ‘foo’". О том, как управлять этим преобразованием или отключить его, см. Стиль кавычек в тексте.В пакетном режиме сообщение выводится в стандартный поток ошибок с последующим символом новой строки.
Если
inhibit-messageне равноnil, сообщение не отображается в области эха, а только записывается в «*Messages*».Если format-string равно
nilили пустой строке,messageочищает область эха; если область эха была автоматически расширена, она возвращается к обычному размеру. Если активен минибуфер, его содержимое немедленно снова отображается на экране.(message "Reverting `%s'..." (buffer-name)) -| Reverting ‘subr.el’... ⇒ "Reverting ‘subr.el’..."
---------- Echo Area ---------- Reverting ‘subr.el’... ---------- Echo Area ----------
Чтобы автоматически отображать сообщение в области эха или во всплывающем буфере в зависимости от его размера, используйте
display-message-or-buffer(см. ниже).Предупреждение: Если вы хотите использовать собственную строку сообщения без изменений, не пишите просто
(message string). Если string содержит «%», «`» или «'», форматирование строки может измениться, что приведёт к нежелательным результатам. Вместо этого используйте(message "%s" string).
Следующие средства позволяют пользователям и программам на Lisp управлять отображением сообщений в области эха.
- Переменная: set-message-function
-
Если значение этой переменной не равно
nil, оно должно быть функцией с одним аргументом — текстом сообщения для отображения в области эха. Эту функцию вызываютmessageи связанные с ней функции. Если функция возвращаетnil, сообщение отображается в области эха обычным образом. Если функция возвращает строку, в области эха отображается эта строка вместо исходного сообщения. Если функция возвращает любое другое значение, не равноеnil, это означает, что сообщение уже обработано, поэтомуmessageничего не отображает в области эха.Значение по умолчанию вызывает
set-minibuffer-message, описанную ниже.
- Переменная: clear-message-function
-
Если значение этой переменной не равно
nil, оно должно быть функцией без аргументов;messageи связанные с ней функции вызывают её, когда аргумент-сообщение равенnilили пустой строке, чтобы очистить область эха.Обычно эта функция вызывается при поступлении следующего события ввода после отображения сообщения в области эха. Предполагается, что функция очищает сообщение, отображённое соответствующей функцией, указанной в
set-message-function, но это необязательно. Если функция должна оставить область эха неочищенной, она должна вернуть символdont-clear-message; любое другое значение приведёт к очистке области эха.Значение по умолчанию — функция, которая очищает сообщение, отображённое в активном минибуфере.
- Параметр пользователя: set-message-functions
-
Значение этого параметра пользователя — список функций, вызываемых для обработки отображения сообщений в области эха. Каждая функция вызывается с одним аргументом — текстом сообщения для отображения. Если функция возвращает строку, эта строка заменяет исходное сообщение, а следующая функция в списке вызывается с новым текстом сообщения. Если функция возвращает
nil, следующая функция в списке вызывается с тем же текстом; если последняя функция в списке возвращаетnil, текст сообщения отображается в области эха. Если функция возвращает значение, не равноеnilи не являющееся строкой, считается, что сообщение обработано, и остальные функции списка не вызываются.Ниже описаны три полезные функции, которые можно включить в список — значение этого параметра.
- Функция: set-minibuffer-message message
-
Эта функция отображает message в области эха, когда минибуфер не активен, и в конце минибуфера, когда он активен. Однако если у какого-либо символа текста, показанного в активном минибуфере, есть свойство текста
minibuffer-message(см. Свойства со специальным значением), сообщение будет отображено перед первым символом с этим свойством.По умолчанию эта функция является единственным элементом списка в
set-message-functions.
- Функция: inhibit-message message
Если сообщение message для области эха соответствует любому регулярному выражению в списке — значении параметра пользователя
inhibit-message-regexps, эта функция подавляет отображение сообщения и возвращает значение, не равноеnilи не являющееся строкой. Поэтому, если эта функция находится в спискеset-message-functions, остальные функции списка не будут вызваны, когда message соответствует регулярным выражениям изinhibit-message-regexps. Чтобы соответствующее message никогда не отображалось, поместите эту функцию первым элементом списка вset-message-functions.
- Функция: set-multi-message message
Эта функция накапливает несколько сообщений для области эха, выданных одно за другим, и возвращает их в виде одной строки, в которой отдельные сообщения разделены символами новой строки. Можно накопить до
multi-message-maxпоследних сообщений. Накопленные сообщения отбрасываются, если с момента выдачи первого сообщения прошло болееmulti-message-timeoutсекунд.
- Переменная: inhibit-message
Если значение этой переменной не равно
nil,messageи связанные с ней функции не отображают сообщения в области эха, а также не очищают предыдущие сообщения в области эха, когдаmessageвызывается с аргументомnilили пустым аргументом. Однако сообщения для области эха по-прежнему записываются в буфер *Messages*.
- Макрос: with-temp-message message &rest body
Эта конструкция временно отображает сообщение в области эха во время выполнения body. Она отображает message, выполняет body, а затем возвращает значение последней формы тела, восстанавливая предыдущее содержимое области эха.
- Функция: message-or-box format-string &rest arguments
-
Эта функция отображает сообщение, как
message, но может вывести его в диалоговом окне вместо области эха. Если эта функция вызывается в команде, запущенной с помощью мыши, — точнее, еслиlast-nonmenu-event(см. Информация от цикла команд) равноnilили является списком, — для отображения сообщения используется диалоговое окно или всплывающее меню. В противном случае используется область эха. (Этот же критерий применяется вy-or-n-pдля аналогичного выбора; см. Запросы с ответом «да» или «нет».)Можно принудительно использовать мышь или область эха, связав
last-nonmenu-eventс подходящим значением на время вызова.
- Функция: message-box format-string &rest arguments
-
Эта функция отображает сообщение, как
message, но при любой возможности использует диалоговое окно (или всплывающее меню). Если использовать диалоговое окно или всплывающее меню невозможно, поскольку терминал их не поддерживает,message-boxиспользует область эха, какmessage.
- Функция: display-message-or-buffer message &optional buffer-name action frame
-
Эта функция отображает сообщение message, которое может быть строкой или буфером. Если оно короче максимальной высоты области эха, определяемой
max-mini-window-height, оно отображается в области эха с помощьюmessage. В противном случае для его отображения во всплывающем буфере используетсяdisplay-buffer.Возвращает либо строку, показанную в области эха, либо, если использовался всплывающий буфер, окно, в котором она отображалась.
Если message — строка, необязательный аргумент buffer-name задаёт имя буфера, используемого для её отображения во всплывающем буфере; по умолчанию это *Message*. Если message — строка, отображённая в области эха, не определено, вставляется ли её содержимое в буфер в любом случае.
Необязательные аргументы action и frame используются так же, как в
display-buffer, и применяются только при отображении буфера.
- Функция: current-message
Эта функция возвращает сообщение, отображаемое в данный момент в области эха, или
nil, если такого сообщения нет.
Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Displaying-Messages.html