该变量的值为默认输出流——即当 stream 参数为 nil 时,打印函数所使用的输出流。
默认值为 t,表示在回显区(echo area)中显示。
若该变量值非 nil,则表示使用简化的读取器语法(reader syntax)打印带引号的形式,例如 (quote foo) 会打印为
'foo,而 (function foo) 会打印为 #'foo。默认值为 t。
若该变量值非 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"
在第二个表达式中,prin1 调用期间 print-escape-newlines 的局部绑定生效,但在打印结果时不生效。
若该变量值非 nil,则带引号打印的函数 prin1 和 print 会将字符串中的控制字符打印为反斜杠序列。
若该变量与 print-escape-newlines 均非 nil,则后者对换行符和换页符优先生效。
若该变量值非 nil,则带引号打印的函数 prin1 和 print 会将字符串中的单字节非 ASCII 字符
无条件打印为反斜杠序列。
当输出流为多字节缓冲区或指向多字节缓冲区的标记时,无论该变量取值如何,上述函数都会将单字节非 ASCII 字符 打印为反斜杠序列。
若该变量值非 nil,则带引号打印的函数 prin1 和 print 会将字符串中的多字节非 ASCII 字符
无条件打印为反斜杠序列。
当输出流为单字节缓冲区或指向单字节缓冲区的标记时,无论该变量取值如何,上述函数都会将多字节非 ASCII 字符 打印为反斜杠序列。
该变量控制打印字符串时 ‘charset‘ 文本属性的输出行为。其取值应为 nil、t 或 default。
若取值为 nil,则从不打印 charset 文本属性;若为 t,则始终打印该属性。
若取值为 default,则仅当存在 “非预期(unexpected)” 的 charset 属性时才打印该属性。对于 ASCII 字符,所有字符集均被视为
“预期的(expected)”;其他情况下,字符的预期 charset 属性由 char-charset 函数给出。
该变量的值为打印任意列表、向量或布尔向量时的最大元素数量。若待打印对象的元素数量超过该值,则会使用省略号缩写输出。
若取值为 nil(默认值),则无元素数量限制。
(setq print-length 2)
⇒ 2
(print '(1 2 3 4 5))
⊣ (1 2 ...)
⇒ (1 2 ...)
该变量的值为打印时括号和方括号的最大嵌套深度。任何嵌套深度超过该限制的列表或向量都会使用省略号缩写输出。
取值为 nil(默认值)时表示无嵌套深度限制。
这两个变量分别为 eval-expression 函数所使用的 print-length 和 print-level 值,
因此也间接作用于许多交互式求值命令(see Evaluating Emacs Lisp Expressions in The GNU Emacs Manual)。
以下变量用于检测并报告循环结构和共享结构:
默认情况下,Emacs 会将不可读对象打印为 ‘#<...>’。例如:
(prin1-to-string (make-marker))
⇒ "#<marker in no buffer>"
若该变量值非 nil,则其应为一个函数,用于处理这些不可读对象的打印逻辑。该函数会接收两个参数:待打印对象,以及
打印函数使用的 noescape 标志(see 输出函数)。
该函数的返回值可以是:nil(按默认方式打印对象)、字符串(直接打印该字符串),或其他任意对象(不打印该对象)。例如:
(let ((print-unreadable-function
(lambda (object escape) "hello")))
(prin1-to-string (make-marker)))
⇒ "hello"
若取值非 nil,则该变量启用打印时对未注册符号(see 创建与编入符号)的检测功能。启用该功能后,
未注册符号会以 ‘#:’ 为前缀打印,该前缀会告知 Lisp 读取器生成一个未注册符号。
若取值非 nil,则表示在多次打印调用间使用连续编号。这会影响 ‘#n=’ 标签和 ‘#m#’ 引用的打印编号。
请勿使用 setq 设置该变量;应仅通过 let 将其临时绑定为 t。绑定该变量时,还应将 print-number-table
绑定为 nil。
该变量持有一个向量,供打印功能内部用于实现 print-circle 特性。除非在绑定 print-continuous-numbering 时将其绑定为
nil,否则不应直接使用该变量。
该变量指定浮点数的打印格式。默认值为 nil,表示使用能无信息丢失表示该数字的最短输出形式。
若要更精确地控制输出格式,可将该变量设为一个字符串。该字符串应包含 C 函数 sprintf 所用的 ‘%’ 格式说明符。
关于格式说明符的使用限制,详见该变量的文档字符串。
当该变量值非 nil 时,代表可打印图形基础字符的整数会使用 Lisp 字符语法打印(see 基本字符语法),
其他数字则按常规方式打印。例如,列表 (4 65 -1 10) 会被打印为 ‘(4 ?A -1 ?\n)’。
更精确地说,以下值会以字符语法打印:属于 Unicode 通用类别(Letter、Number、Punctuation、Symbol、Private-use)的字符 (see Character Properties),以及拥有专属转义语法的控制字符(如换行符)。
该用户变量指定 pp 函数用于美化输出的底层函数。默认使用 pp-fill,该函数会在速度与生成自然易读且适配
fill-column 宽度的输出之间取得平衡。此前的默认值为 pp-28,该函数速度更快,但生成的输出可读性较差且不够紧凑。