我正在尝试为自己的编译插件创建一个动态菜单,但我已经碰壁了。这是我目前的代码:
(defun mme-tools-create-menu ()
(easy-menu-define mme-tools-menu erlang-mode-map "MME-Tools-Menu"
'("MME-Tools"
("Current Subsystem"
["Run gmake" mme-tools-build]
["Build beams" mme-tools-build-beam]
["Run Posttest" mme-tools-build-posttest]
["Run Move" mme-tools-build-move])
("Build Subsystem")))
(dolist (path mmepaths)
(if (string-match "code" path)
(let* ((ss (file-name-base path))
(uss (upcase ss)))
(easy-menu-add-item mme-tools-menu '("Build Subsystem")
[uss (mme-tools-build-path-subsystem " -j10 beam" (getenv ss))])))))
我想要的代码是创建一个名为“Build Subsystem”的子菜单,并用条目填充它。但是没有创建条目。任何帮助,将不胜感激。
答案 0 :(得分:1)
我建议你做点什么
(easy-menu-define mme-tools-menu erlang-mode-map "MME-Tools-Menu"
`("MME-Tools"
("Current Subsystem"
["Run gmake" mme-tools-build]
["Build beams" mme-tools-build-beam]
["Run Posttest" mme-tools-build-posttest]
["Run Move" mme-tools-build-move])
("Build Subsystem"
,@(mapcar (lambda (path)
(when (string-match "code" path)
(let* ((ss (file-name-base path))
(uss (upcase ss)))
(vector uss `(mme-tools-build-path-subsystem " -j10 beam" (getenv ',ss))))))))))
答案 1 :(得分:0)
我怀疑你可能正在寻找这样的东西,但是如果没有看到更多的代码就很难知道。您应该能够使用macroexpand
等自己进行调试,直到获得一组适当的参数传递给easy-menu-define
。
Wrt Stefan的代码,如你所提到的,这会添加缺少的mapcar
秒arg,它会在(mme-tools-build-path-subsystem...)
之前删除反引号(只是猜测)。
(easy-menu-define
mme-tools-menu
erlang-mode-map "MME-Tools-Menu"
`("MME-Tools"
("Current Subsystem"
["Run gmake" mme-tools-build]
["Build beams" mme-tools-build-beam]
["Run Posttest" mme-tools-build-posttest]
["Run Move" mme-tools-build-move])
("Build Subsystem"
,@(mapcar (lambda (path)
(when (string-match "code" path)
(let* ((ss (file-name-base path))
(uss (upcase ss)))
(vector uss
(mme-tools-build-path-subsystem
" -j10 beam" (getenv ',ss))))))
mmepaths))))