Emacs 如何动态定义菜单项-大括号中的内容是什么?

Emacs 如何动态定义菜单项-大括号中的内容是什么?,emacs,elisp,Emacs,Elisp,不清楚这里的一些基本语法定义键接受一组输入,其中一个在方括号内。那是什么构造?如何动态生成方括号内的内容 在简单的情况下,我可以显示如下所示的一项菜单: (flet ((ok (&optional p1 &rest args) t)) (setq menu-1 (make-sparse-keymap "Title")) (define-key menu-1 [menu-1-ok-event] `(menu-item "OK" ok

不清楚这里的一些基本语法<代码>定义键接受一组输入,其中一个在方括号内。那是什么构造?如何动态生成方括号内的内容

在简单的情况下,我可以显示如下所示的一项菜单:

(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-ok-event]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-event-ok]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (define-key menu-1 [menu-1-event-1]
    `(menu-item "This is line 1"
                nil
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
  (while (< n 5)
   (define-key menu-1 [(dynamic-thing n)]
    `(menu-item (format "This is line %d" n)
                nil
                :keys ""
                :visible t
                :enable t)))
我可以像这样插入其他菜单项:

(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-ok-event]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-event-ok]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (define-key menu-1 [menu-1-event-1]
    `(menu-item "This is line 1"
                nil
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
  (while (< n 5)
   (define-key menu-1 [(dynamic-thing n)]
    `(menu-item (format "This is line %d" n)
                nil
                :keys ""
                :visible t
                :enable t)))
但是如果我想动态生成方括号中的东西呢?如果我想要这样的东西怎么办:

(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-ok-event]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
(flet ((ok (&optional p1 &rest args) t))
  (setq menu-1 (make-sparse-keymap "Title"))
  (define-key menu-1 [menu-1-event-ok]
    `(menu-item "OK"
                ok 
                :keys ""
                :visible t
                :enable t))
  (define-key menu-1 [menu-1-event-1]
    `(menu-item "This is line 1"
                nil
                :keys ""
                :visible t
                :enable t))
  (x-popup-menu t menu-1))
  (while (< n 5)
   (define-key menu-1 [(dynamic-thing n)]
    `(menu-item (format "This is line %d" n)
                nil
                :keys ""
                :visible t
                :enable t)))
…但这不起作用。结果总是“实习生”

什么是方括号?我对语法不熟悉

这些是
[foo-bar]
的语法糖(引用(矢量foo-bar))
;这是字面意思。要构造需要计算元素的向量,请显式使用内置函数;它的工作原理类似于
list

(define-key menu-1 (vector (format "menu-1-event-%d" n)) …
这一章也可能有所帮助