我终于尝试学习 elisp,但还没有集中精力如何将未知的参数列表动态映射到变量。
这是一个工作函数,它将最多三个参数传递给启动进程。但我想将无限数量的参数传递给该函数。
(defun create-drush-buffer (command &rest a)
(if (locate-dominating-file default-directory "includes/bootstrap.inc")
(progn
(setq opt1 (car a))
(setq opt2 (cadr a))
(setq opt3 (caddr a))
(setq allopt (concat opt1 " " opt2 " " opt3))
(setq b-name (concat "*drush " command " " allopt "*"))
(if (buffer-live-p b-name)
(switch-to-buffer b-name)
(setq d-buffer (get-buffer-create b-name))
(with-current-buffer d-buffer
(goto-char (point-min))
(view-mode 1)
(hl-line-mode 1)
(if opt3
(start-process "drush" (current-buffer) drupal-drush-program
command
opt1
opt2
opt3)
(if opt2
(start-process "drush" (current-buffer)
drupal-drush-program
command
opt1
opt2)
(if opt1
(start-process "drush" (current-buffer)
drupal-drush-program
command
opt1)
(start-process "drush" (current-buffer)
drupal-drush-program
command))))
(shrink-window-if-larger-than-buffer))
(switch-to-buffer d-buffer)))
(message (concat default-directory " is not a drupal project"))))
这是我想使用 create-drush-buffer 的调用函数的示例。
(defun drush-sql-sync ()
(interactive)
(create-drush-buffer
"sql-sync"
"-y"
"-d"
"-v"
"@cu.wstage1-education"
"@cu.local-education"))
我怎样才能实现这一点并减少我的代码的冗余?任何有关代码的帮助,甚至引导我查阅相关文档,都很感激。
您可以使用apply
:
(应用函数和其余参数)
使用剩余的参数调用 FUNCTION,使用最后一个参数作为列表
参数。然后返回FUNCTION返回的值。因此,(应用 '+ 1 2 '(3
4)) 返回 10。
这样,你就可以调用start-process
使用类似的东西:
(apply 'start-process "drush" (current-buffer)
drupal-drush-program
command
a)
作为旁注,您不应该使用创建临时变量setq
,因为这会创建或修改全局变量(如果不存在具有该名称的本地变量)。相反,使用let
.
祝您的 elisp 项目好运!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)