get-register获取寄存器值的问题

输入 C-x r n a, 将寄存器 a 赋值为0, 通过 M-x view-register 查看到,

但是,通过 M-: 执行 (get-register 'a) 得到的值确实 nil, 为什么?

请教大家,谢谢!

因为 get-register 的参数是 字符码 而不是符号。 你要这样用

(get-register 97)
;; => 0

确实如此,哪里有文档说明类似的用法吗?

比如,这里的 reg 到底要提供什么样类型的值,character? symbol?

 -- Function: get-register reg
     This function returns the contents of the register REG, or ‘nil’ if
     it has no contents.

view-register 从函数的源码里面可以看出它用了个专门的函数把字母转数字,这个函数比较复杂,而且不能直接调用,不过转换标准应该就是 ASCII 码。

C-h S get-register (info-lookup-symbol) 查看 (elisp) Registers

Each register is named by a single character … The object NAME is a character (an integer) identifying the register.

为何我这里 用 C-h S get-register找不到对应的解释,敲下回车提示 No match 需要设置什么文档路径吗?

C-h S (info-lookup-symbol) 是一个跟 Major Mode 有关的命令,只有在 emacs-lisp-modelisp-interaction-modehelp-mode 等跟 Emacs 有关的 Major mode 下,才会查阅的是跟 Emacs 有关的文档。在 c-mode 下查阅的是 GNU C Library Reference Manual。

2 个赞

学习了:grinning:,补充一个,使用 M-x info-apropos get-register 也能方便查到对应的文档。

1 个赞

忽然发现 ? 后面跟一个字符会返回字符的编码:

?只
;; => 21482

?a
;; =>97

?^@ ; 用 `C-q C-@' 输入
;; => 0

所以用 (get-register ?a) 就能得到符合预期的结果了。

1 个赞