@李。我正在尝试使用lisp反应堆。基本上,这个lisp反应器保存在一个lisp文件中,包含了我的很多通用代码。我想在命令行中使用特定函数时调用这个lisp reactor。因此,在该命令运行时,已经设置了图层和捕捉设置等变量,但一旦该命令被取消或结束,我想在启动该命令之前将其设置回原始设置。我只希望这个反应堆在接到命令后能正常工作。这是我一直在使用的lisp reactor代码。感谢ronjonp在以下时间编写此代码:http://www.theswamp.org/index.php?topic=16519.5;wap2
(if (not *rjp-lispReactors*) (setq *rjp-lispReactors*(vlr-lisp-reactor nil '((:vlr-lispWillStart . strtlsp) (:vlr-lispCancelled . cncllsp) )) ) (princ))(defun strtlsp (calling-reactor strtlspInfo / stlisp) (setq stlisp (strcase (nth 0 strtlspInfo) T)rjp-varlist nilrjp-varlist (mapcar '(lambda (x) (cons x (getvar x))) '("apbox" "aperture" "attdia" "attmode" "aunits" "autosnap" "blipmode" "cecolor" "celtscale" "clayer" "cmddia" "cmdecho" "dimassoc" "dragmode" "edgemode" "elevation" "expert" "fillmode" "gridmode" "gripsize" "highlight" "ltscale" "orthomode" "osmode" "osnapcoord" "plinewid" "snapang" "snapmode" "textsize" ) ) ) (princ "LISP START"))(defun cncllsp (calling-reactor cncllspInfo /) (mapcar '(lambda (x) (vl-catch-all-apply 'setvar (list (car x) (cdr x)) ) ) rjp-varlist ) (princ "\n <<Lisp cancelled...>>"))
我看到反应堆确实启动了,因为我看到打印的消息LISP start,但每当我按esc取消功能时,消息LISP CANCELED不会打印出来,并且设置不会恢复到启动时。无论如何,我可以修改这个代码来专门做到这一点?我也尝试过使用命令反应器,但使用它们有点不可靠,而且它只能在整个lisp文件中使用,因为它正在等待调用命令。所以我不知道我应该做什么,如果我甚至应该使用lisp反应堆或没有。