这里不清楚一些基本语法。 define-key
接受一组输入,其中一个输入在方括号内。这个结构是什么?如何动态生成方括号内的内容?
在简单的情况下,我可以显示如下的单项菜单:
(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)))
我试过
(define-key menu-1 [(intern (format "menu-1-event-%d" n))]
...
..但是没有用。结果总是“实习生”。 ???
方括号是什么?语法对我来说并不熟悉。
答案 0 :(得分:4)
这些是vectors。 [foo bar]
是(quote (vector foo bar))
的语法糖;这是一个文字。要构造一个需要评估元素的向量,请明确使用vector
内置函数;它就像list
。
(define-key menu-1 (vector (format "menu-1-event-%d" n)) …
关于menu keymaps的章节也可能有所帮助。