Emacs lisp,如何动态创建引用表达式,包括像`?1`这样的特殊字符?
Emacs lisp, how to dynamically create quoted expression including special chars like `?1`?
我想动态创建一个字符列表以用于 read-char-choice
。从这个 answer 的类似问题中,如何以不带引号的值作为选项以编程方式构建列表,?1
使用函数。我最终得到的函数是
(defun prompt-list (name-list)
"docstring"
(let ((names name-list)
(name-num 1)
(choice-list (list)))
(dolist (x names)
(add-to-list 'choice-list
`(,name-num ;; in that part how to create the ?1, ?2 but dynamically
,x (lambda () (setq project-headers x))))
(setq name-num (+ 1 name-num)))
choice-list))
当我尝试 运行 它时 returns 错误:Format specifier doesn’t match argument type
。
根据我的理解,它需要一个 char 类型,所以我的问题是如何以编程方式生成 char 类型?
?1
是字符 '1'
的读取语法,它的整数值为 49。您可以使用读取语法来初始化 name-num
变量,而不是使用整数 1:
(defun prompt-list (name-list)
"docstring"
(let ((names name-list)
(name-num ?1)
(choice-list (list)))
(dolist (x names)
(add-to-list 'choice-list `(,name-num
,x (lambda () (setq project-headers ',x)))
t)
(setq name-num (+ 1 name-num)))
choice-list))
有几点需要注意:
- 您希望在设置
project-headers
时使用 ,x
,而不仅仅是 x
,因为后者在调用 lambda
时将无效。
- 你想在构建时附加到
choice-list
,这就是上面 add-to-list
的最后一个 t
参数所做的,否则你的 read-char-choice
提示将是以相反的顺序。
我想动态创建一个字符列表以用于 read-char-choice
。从这个 answer 的类似问题中,如何以不带引号的值作为选项以编程方式构建列表,?1
使用函数。我最终得到的函数是
(defun prompt-list (name-list)
"docstring"
(let ((names name-list)
(name-num 1)
(choice-list (list)))
(dolist (x names)
(add-to-list 'choice-list
`(,name-num ;; in that part how to create the ?1, ?2 but dynamically
,x (lambda () (setq project-headers x))))
(setq name-num (+ 1 name-num)))
choice-list))
当我尝试 运行 它时 returns 错误:Format specifier doesn’t match argument type
。
根据我的理解,它需要一个 char 类型,所以我的问题是如何以编程方式生成 char 类型?
?1
是字符 '1'
的读取语法,它的整数值为 49。您可以使用读取语法来初始化 name-num
变量,而不是使用整数 1:
(defun prompt-list (name-list)
"docstring"
(let ((names name-list)
(name-num ?1)
(choice-list (list)))
(dolist (x names)
(add-to-list 'choice-list `(,name-num
,x (lambda () (setq project-headers ',x)))
t)
(setq name-num (+ 1 name-num)))
choice-list))
有几点需要注意:
- 您希望在设置
project-headers
时使用,x
,而不仅仅是x
,因为后者在调用lambda
时将无效。 - 你想在构建时附加到
choice-list
,这就是上面add-to-list
的最后一个t
参数所做的,否则你的read-char-choice
提示将是以相反的顺序。