0

独自のコンパイル プラグイン用の動的メニューを作成しようとしていますが、壁にぶつかっています。これは私が現時点で持っているコードです:

(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」というサブメニューを作成し、そこにエントリを入力することです。しかし、エントリは作成されません。どんな助けでも大歓迎です。

4

2 に答える 2

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))))))))))
于 2013-09-03T00:19:19.210 に答える
0

このようなものを探しているのではないかと思いますが、コードをもっと見ないとわかりません。macroexpandに渡す適切な引数のセットを取得するまで、 etc.を使用して、これを自分でデバッグできるはずですeasy-menu-define

Wrt Stefanのコードでは、これにより、mapcar前述のように欠落している2番目の引数が追加され、前の逆引用符が削除されます(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))))
于 2013-10-26T16:38:10.767 に答える