7

私は Emacs Lisp パッケージに取り組んでおり、追加したい特定の機能の 1 つは、その場で関数を定義する機能です。それらは同じ命名規則に従いますが、それらのすべてを手動で宣言する必要がなくなるのに役立ちます.

例を挙げると、起動する実行可能ファイルの名前を引数に取る exec という基本的な関数があります。

(def exec (cmd)
    (async-shell-command cmd "buffer"))

同時に、この特定のケースでは、使用したい実行可能ファイルのリストを知っています。より正確には、時間の経過とともに変化する可能性があるため、それらのリストを取得する方法を知っています。次の実行可能ファイルのリストが与えられた場合、私がやりたいことは次のとおりです。

("a" "b" "c")

それらを繰り返し処理し、それぞれに対して exec-[executable] - exec-a、exec-b、exec-c という名前の関数を作成します。

残念ながら、defun は NAME 引数を評価しないため、関数名を動的に作成することはできません。

PS。exec コマンドはそれ自体で十分completing-readです。提供された実行可能ファイルのリストを使用しますが、上記を追加すると便利だと思いました。

4

1 に答える 1

8

どのように'試合

(dolist (name name-list)
  (defalias (intern (concat "exec-" name))
   `(lambda () ,(format "Run %s via `exec'." name) (interactive) (exec ,name))))
于 2012-10-03T18:51:21.750 に答える