Andrew1979 发表于 2022-7-5 16:59:35

使用UNDO命令

我编写了一些代码,在LISP运行之前在“UNDO”命令中设置“Mark”。我的程序按预期工作,但如果有人使用该程序绘制一些东西,然后决定键入“u”,然后输入enter,他们需要多次按enter键/空格键才能返回到LISP命令启动之前的状态。
 
我的问题是,有没有办法让用户只按一次“u”键和“enter”键就可以回到程序启动之前的状态?
我知道他们可以先键入“undo”然后键入“back”,但我希望用户只需键入“u”即可。我认为我的代码应该可以工作,但实际上不行。用户必须多次按enter键才能回到起点。
 
有什么想法吗?
 
这是代码当前工作方式的一部分:
 

(defun getVariables ()
(command "undo" "mark")
(command "undo" "begin")
(setq temperr *error*)
(setq *error* CCerror)
(setq CColdlayer    (getvar "clayer"))
(setq CColdpickbox    (getvar "pickbox"))
(setq CColdcmdecho    (getvar "cmdecho"))
(setq CColdosmode    (getvar "osmode"))
(setq CColdorthomode    (getvar "orthomode"))
(setvar "cmdecho" 0)
(setvar "osmode" 1)
)

(defun setVariables ()
(setvar "pickbox" 0)
(setvar "osmode" 0)
(setvar "blipmode" 0)
)

(defun Restore ()
(setvar "clayer" CColdlayer)
(setvar "pickbox" CColdpickbox)
(setvar "cmdecho" CColdcmdecho)
(setvar "osmode" CColdosmode)
(setvar "orthomode" CColdorthomode)
(command "undo" "end")
)

Andrew1979 发表于 2022-7-5 17:26:22

我想我已经解决了这个问题。上面的代码工作正常。我所做的是在每个不同绘图函数的末尾调用(还原)函数,而不是将其添加到调用所有其他函数以使程序工作的主函数中。。。。。如果这有道理的话。
 
不过,我现在遇到的新问题是,“u”命令返回到程序的开头,但命令提示符显示:
 

Command: U
GROUP (Lisp Expression) (Lisp Expression) (Lisp Expression) (Lisp Expression

 
如何隐藏即将出现的(Lisp表达式)???

David Bethel 发表于 2022-7-5 17:34:56

虽然有vl\uCal启动撤消组,但这是普通版本:
 

(defun SetUndo ()
(and (zerop (getvar "UNDOCTL"))
   (command "_.UNDO" "_ALL"))
(and (= (logand (getvar "UNDOCTL") 2) 2)
   (command "_.UNDO" "_CONTROL" "_ALL"))
(and (= (logand (getvar "UNDOCTL")8)
   (command "_.UNDO" "_END"))
(command "_.UNDO" "_GROUP"))

 
那么您的*错误*应该包含:
 

(setqolderr *error*
   *error* (lambda (msg)
               (while (> (getvar "CMDACTIVE") 0)
                      (command))
               (and (/= msg "quit / exit abort")
                  (princ (strcat "\nError: *** " msg " *** ")))
               (and (= (logand (getvar "UNDOCTL")8)
                  (command "_.UNDO" "_END" "_.U"))
               (restore))

Andrew1979 发表于 2022-7-5 17:54:53

谢谢你,我明天会调查的。

MJLM 发表于 2022-7-5 18:04:58

我也有同样的问题
我正在使用分组撤消。在我的defun函数中,我从
 
以下是我的*错误*函数
 
一切都很好,只是当我按“u”时,我感到很恼火
(Lisp表达式)多次。我无法从上面的例子中找到解决方案。任何人都可以帮助抑制这种情况吗?
页: [1]
查看完整版本: 使用UNDO命令