Debugging Emacs lisp,如何动态创建包含特殊字符(如“?1”)的引用表达式?

Debugging Emacs lisp,如何动态创建包含特殊字符(如“?1”)的引用表达式?,debugging,emacs,Debugging,Emacs,我想动态地创建一个字符列表,用于读取字符选择。从这个类似的问题来看,如何以编程方式构造列表,将未引用的值作为选项,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

我想动态地创建一个字符列表,用于读取字符选择。从这个类似的问题来看,如何以编程方式构造列表,将未引用的值作为选项,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))

当我尝试运行它时,它返回错误:格式说明符与参数类型不匹配。 据我所知,它需要一个字符类型,所以我的问题是如何以编程方式生成字符类型?

?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))
有几件事需要注意:

您希望在设置项目头时使用x,而不仅仅是x,因为在调用lambda时,后者将无效。 您希望在构建选择列表时将其追加到选择列表中,这是要添加到上面列表中的最后一个t参数所做的,否则,您的read char选择提示将按相反顺序进行。