20.6 Переменные, влияющие на вывод

Переменная: standard-output

Значение этой переменной является потоком вывода по умолчанию — потоком, который используют функции печати, когда аргумент stream равен nil. По умолчанию используется t, что означает вывод в область эхо.

Переменная: print-quoted

Если это значение не nil, это означает печать цитируемых форм с использованием сокращённого синтаксиса чтения, например, (quote foo) печатается как 'foo, а (function foo) как #'foo. По умолчанию — t.

Переменная: print-escape-newlines

Если эта переменная не nil, то символы новой строки в строках печатаются как ‘\n’, а символы перевода страницы — как ‘\f’. Обычно эти символы печатаются как фактические переводы строк и страниц.

Эта переменная влияет на функции печати prin1 и print, которые печатают с кавычками. Она не влияет на princ. Вот пример с использованием prin1:

(prin1 "a\nb")
     -| "a
     -| b"
     ⇒ "a
b"

(let ((print-escape-newlines t))
  (prin1 "a\nb"))
     -| "a\nb"
     ⇒ "a
b"

Во втором выражении локальная привязка print-escape-newlines действует во время вызова prin1, но не во время печати результата.

Переменная: print-escape-control-characters

Если эта переменная не nil, управляющие символы в строках печатаются как последовательности с обратной косой чертой функциями печати prin1 и print, которые печатают с кавычками. Если и эта переменная, и print-escape-newlines не равны nil, то последняя имеет приоритет для новых строк и переводов страниц.

Переменная: print-escape-nonascii

Если эта переменная не nil, то однобайтовые не-ASCII символы в строках безусловно печатаются как последовательности с обратной косой чертой функциями печати prin1 и print, которые печатают с кавычками.

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

Переменная: print-escape-multibyte

Если эта переменная не nil, то многобайтовые не-ASCII символы в строках безусловно печатаются как последовательности с обратной косой чертой функциями печати prin1 и print, которые печатают с кавычками.

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

Переменная: print-charset-text-property

Эта переменная управляет печатью текстового свойства ‘charset’ при печати строки. Значение должно быть nil, t или default.

Если значение равно nil, текстовые свойства charset никогда не печатаются. Если t, они всегда печатаются.

Если значение равно default, печатать текстовые свойства charset, только если существует “неожиданное” свойство charset. Для символов ascii все наборы символов считаются “ожидаемыми”. В противном случае ожидаемое свойство charset символа определяется char-charset.

Переменная: print-length

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

Если значение равно nil (по умолчанию), то ограничения нет.

(setq print-length 2)
     ⇒ 2
(print '(1 2 3 4 5))
     -| (1 2 ...)
     ⇒ (1 2 ...)
Переменная: print-level

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

Пользовательская опция: eval-expression-print-length
Пользовательская опция: eval-expression-print-level

Это значения для print-length и print-level, используемые eval-expression и, косвенно, многими интерактивными командами вычисления (см. Вычисление выражений Emacs Lisp в Руководстве GNU Emacs).

Эти переменные используются для обнаружения и сообщения о циклических и разделяемых структурах:

Переменная: print-circle

Если не nil, эта переменная включает обнаружение циклических и разделяемых структур при печати. См. Синтаксис чтения для циклических объектов.

Переменная: print-unreadable-function

По умолчанию Emacs печатает нечитаемые объекты как ‘#<...>"’. Например:

(prin1-to-string (make-marker))
     ⇒ "#<marker in no buffer>"

Если эта переменная не nil, она должна быть функцией, которая будет вызываться для обработки печати этих объектов. Функция будет вызвана с двумя аргументами: объектом и флагом noescape, используемым функциями печати (см. Функции вывода).

Функция должна возвращать либо nil (печатать объект как обычно), либо строку (которая будет напечатана), либо любой другой объект (не печатать объект). Например:

(let ((print-unreadable-function
       (lambda (object escape) "hello")))
  (prin1-to-string (make-marker)))
     ⇒ "hello"
Переменная: print-gensym

Если не nil, эта переменная включает обнаружение неинтернированных символов (см. Создание и интернирование символов) при печати. Когда это включено, неинтернированные символы печатаются с префиксом ‘#:’, который указывает читателю Lisp создать неинтернированный символ.

Переменная: print-continuous-numbering

Если не nil, это означает непрерывную нумерацию между вызовами печати. Это влияет на номера, печатаемые для меток ‘#n=’ и ссылок ‘#m#’. Не устанавливайте эту переменную с помощью setq; её следует только временно связывать со значением t с помощью let. Когда вы это делаете, следует также связать print-number-table с nil.

Переменная: print-number-table

Эта переменная содержит вектор, используемый внутри механизма печати для реализации возможности print-circle. Не используйте её, кроме как для связывания с nil, когда вы связываете print-continuous-numbering.

Переменная: float-output-format

Эта переменная определяет, как печатать числа с плавающей точкой. По умолчанию — nil, что означает использование самого короткого вывода, который представляет число без потери информации.

Для более точного управления форматом вывода вы можете поместить строку в эту переменную. Строка должна содержать спецификацию с ‘%’ для использования в функции C sprintf. О дополнительных ограничениях на то, что можно использовать, смотрите в строке документации переменной.

Переменная: print-integers-as-characters

Когда эта переменная не nil, целые числа, представляющие графические базовые символы, будут печататься с использованием синтаксиса символов Lisp (см. Базовый синтаксис символов). Другие числа печатаются обычным способом. Например, список (4 65 -1 10) будет напечатан как ‘(4 ?A -1 ?\n)’.

Более точно, значения, печатаемые в синтаксисе символов, — это те, которые представляют символы, принадлежащие к общим категориям Unicode Letter, Number, Punctuation, Symbol и Private-use (см. Свойства символов), а также управляющие символы, имеющие собственный синтаксис экранирования, например, новая строка.

Пользовательская опция: pp-default-function

Эта пользовательская переменная определяет функцию, используемую pp для улучшения форматирования вывода. По умолчанию используется pp-fill, которая пытается найти хороший баланс между скоростью и созданием естественно выглядящего вывода, укладывающегося в fill-column. Предыдущим значением по умолчанию было pp-28, которая обычно быстрее, но создаёт вывод, который выглядит менее естественно и менее компактен.