Emacs Lisp - 使用变量/变量名称声明函数

时间:2012-10-03 17:50:25

标签: emacs

我正在开发一个Emacs Lisp软件包,我想添加的一个特殊功能是能够动态定义函数 - 它们将遵循相同的命名约定,但它将帮助我不必声明每一个他们手动。

举一个例子,我有一个名为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和提供的可执行文件列表,但我认为上面的内容会很好。

1 个答案:

答案 0 :(得分:5)

怎么'回合

(dolist (name name-list)
  (defalias (intern (concat "exec-" name))
   `(lambda () ,(format "Run %s via `exec'." name) (interactive) (exec ,name))))