20.3 输入函数

本节描述与读取操作相关的 Lisp 函数和变量。

在以下函数中,stream(stream)代表输入流(参见 上一节)。如果 streamnil 或被省略,则默认使用 standard-input 的值。

若读取操作遇到未终止的列表、向量或字符串,会触发 end-of-file 错误。

Function: read &optional stream

该函数从 stream 读取一个文本形式的 Lisp 表达式,并将其作为 Lisp 对象返回。 这是基础的 Lisp 输入函数。

Function: read-from-string string &optional start end

该函数从 string 中的文本读取第一个文本形式的 Lisp 表达式。 它返回一个 cons 单元,其 CAR 是该表达式,CDR 是一个整数, 表示字符串中剩余下一个字符的位置(即第一个未被读取的字符)。

若提供了 start 参数,则从字符串的索引 start 处开始读取 (第一个字符的索引为 0)。若指定了 end 参数,则读取操作会强制在该索引之前停止, 如同字符串的剩余部分不存在一样。

例如:

(read-from-string "(setq x 55) (setq y 5)")
     ⇒ ((setq x 55) . 11)
(read-from-string "\"A short string\"")
     ⇒ ("A short string" . 16)

;; Read starting at the first character.
(read-from-string "(list 112)" 0)
     ⇒ ((list 112) . 10)
;; Read starting at the second character.
(read-from-string "(list 112)" 1)
     ⇒ (list . 5)
;; Read starting at the seventh character,
;;   and stopping at the ninth.
(read-from-string "(list 112)" 6 8)
     ⇒ (11 . 8)
Function: read-positioning-symbols &optional stream

该函数像 read 一样从 stream 读取一个文本表达式, 但会额外将读取到的符号定位到其在 stream 中出现的位置。 出于效率考虑,仅符号 nil 不会被定位。 See 带位置信息的符号。 该函数由字节编译器(byte compiler)使用。

Variable: standard-input

该变量保存默认输入流——当 stream 参数为 nil 时, read 函数会使用此流。其默认值为 t,表示使用迷你缓冲区(minibuffer)。

Variable: read-circle

若该变量值非 nil,则启用对循环结构(circular structures) 和共享结构(shared structures)的读取功能。See 循环对象的读取语法。 其默认值为 t

在批处理模式下对 Emacs 进程的标准输入/输出流进行读写时, 有时需要确保任意二进制数据都能被原样读写,且/或不执行换行符与 CR-LF 对之间的转换。 此问题仅存在于 MS-Windows 和 MS-DOS 系统,POSIX 主机无此问题。 以下函数允许你控制 Emacs 进程任意标准流的 I/O 模式。

Function: set-binary-mode stream mode

stream 切换为二进制或文本 I/O 模式。 若 modenil,则切换为二进制模式,否则切换为文本模式。 stream 的取值可以是 stdinstdoutstderr。 该函数会作为副作用刷新 stream 中所有待输出的数据, 并返回 stream 之前的 I/O 模式值。 在 POSIX 主机上,该函数始终返回非 nil 值,且除了刷新待输出数据外不执行任何操作。

Function: readablep object

该谓词用于判断 object 是否具有 可读语法(readable syntax), 即能否被 Emacs Lisp 读取器(reader)写出后再读回。 若不能,该函数返回 nil;若可以, 该函数返回 object 的打印表示形式(通过 prin1 函数生成,see 输出函数)。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© 2025 Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike