乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 87|回复: 4

[编程交流] 使用UNDO命令

[复制链接]

52

主题

156

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 16:59:35 | 显示全部楼层 |阅读模式
我编写了一些代码,在LISP运行之前在“UNDO”命令中设置“Mark”。我的程序按预期工作,但如果有人使用该程序绘制一些东西,然后决定键入“u”,然后输入enter,他们需要多次按enter键/空格键才能返回到LISP命令启动之前的状态。
 
我的问题是,有没有办法让用户只按一次“u”键和“enter”键就可以回到程序启动之前的状态?
我知道他们可以先键入“undo”然后键入“back”,但我希望用户只需键入“u”即可。我认为我的代码应该可以工作,但实际上不行。用户必须多次按enter键才能回到起点。
 
有什么想法吗?
 
这是代码当前工作方式的一部分:
 
  1. [color=red]([color=royalblue]defun[/color][/color] getVariables [color=red]()[/color]
  2. [color=red]([/color][color=royalblue]command[/color] [color=magenta]"undo" "mark"[/color][color=red])[/color]
  3. [color=red]([/color][color=royalblue]command[/color] [color=magenta]"undo" "begin"[/color][color=red]) [/color]
  4. [color=red]([/color][color=royalblue]setq[/color] temperr *error*[color=red])[/color]
  5. [color=red]([/color][color=royalblue]setq[/color] *error* CCerror)  
  6. [color=red]([/color][color=royalblue]setq[/color] CColdlayer    [color=red]([/color][color=royalblue]getvar[/color][color=magenta] "clayer"[/color][color=red]))[/color]
  7. [color=red]([/color][color=royalblue]setq[/color] CColdpickbox   [color=red] ([/color][color=royalblue]getvar[/color][color=magenta] "pickbox"[/color][color=red]))[/color]
  8. [color=red]([/color][color=royalblue]setq[/color] CColdcmdecho    [color=red]([/color][color=royalblue]getvar[/color] [color=magenta]"cmdecho"[/color][color=red]))[/color]
  9. [color=red]([/color][color=royalblue]setq[/color] CColdosmode    [color=red]([/color][color=royalblue]getvar[/color] [color=magenta]"osmode"[/color]))
  10. [color=red]([/color][color=royalblue]setq[/color] CColdorthomode    [color=red]([/color][color=royalblue]getvar[/color] [color=magenta]"orthomode"[/color][color=red]))[/color]
  11. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"cmdecho"[/color] [color=seagreen]0[/color][color=red])[/color]
  12. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"osmode"[/color] [color=seagreen]1[/color][color=red])[/color]  
  13. [color=red]  )[/color]
  14. [color=red]([/color][color=royalblue]defun[/color] setVariables [color=red]()[/color]
  15. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"pickbox"[/color] [color=seagreen]0[/color][color=red]) [/color]
  16. [color=red]([/color][color=royalblue]setvar[/color][color=magenta] "osmode"[/color] [color=seagreen]0[/color][color=red])[/color]
  17. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"blipmode"[/color] [color=seagreen]0[/color][color=red])[/color]
  18. [color=red])[/color]
  19. [color=red]([/color][color=royalblue]defun[/color] Restore [color=red]()[/color]
  20. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"clayer"[/color] CColdlayer[color=red])[/color]
  21. [color=red]([/color][color=royalblue]setvar[/color][color=magenta] "pickbox"[/color] CColdpickbox[color=red])[/color]
  22. [color=red]([/color][color=royalblue]setvar [/color][color=magenta]"cmdecho"[/color] CColdcmdecho[color=red])[/color]
  23. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"osmode"[/color] CColdosmode[color=red])[/color]
  24. [color=red]([/color][color=royalblue]setvar[/color] [color=magenta]"orthomode"[/color] CColdorthomode[color=red])[/color]
  25. [color=red]([/color][color=royalblue]command[/color][color=magenta] "undo" "end"[/color][color=red])[/color]
  26. [color=red])[/color]
回复

使用道具 举报

52

主题

156

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:26:22 | 显示全部楼层
我想我已经解决了这个问题。上面的代码工作正常。我所做的是在每个不同绘图函数的末尾调用(还原)函数,而不是将其添加到调用所有其他函数以使程序工作的主函数中。。。。。如果这有道理的话。
 
不过,我现在遇到的新问题是,“u”命令返回到程序的开头,但命令提示符显示:
 
  1. Command: U
  2. GROUP (Lisp Expression) (Lisp Expression) (Lisp Expression) (Lisp Expression

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

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-5 17:34:56 | 显示全部楼层
虽然有vl\uCal启动撤消组,但这是普通版本:
 
  1. (defun SetUndo ()
  2. (and (zerop (getvar "UNDOCTL"))
  3.      (command "_.UNDO" "_ALL"))
  4. (and (= (logand (getvar "UNDOCTL") 2) 2)
  5.      (command "_.UNDO" "_CONTROL" "_ALL"))
  6. (and (= (logand (getvar "UNDOCTL")  8)
  7.      (command "_.UNDO" "_END"))
  8. (command "_.UNDO" "_GROUP"))

 
那么您的*错误*应该包含:
 
  1. (setq  olderr *error*
  2.      *error* (lambda (msg)
  3.                (while (> (getvar "CMDACTIVE") 0)
  4.                       (command))
  5.                (and (/= msg "quit / exit abort")
  6.                     (princ (strcat "\nError: *** " msg " *** ")))
  7.                (and (= (logand (getvar "UNDOCTL")  8)
  8.                     (command "_.UNDO" "_END" "_.U"))
  9.                (restore))
回复

使用道具 举报

52

主题

156

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:54:53 | 显示全部楼层
谢谢你,我明天会调查的。
回复

使用道具 举报

49

主题

177

帖子

130

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
243
发表于 2022-7-5 18:04:58 | 显示全部楼层
我也有同样的问题
我正在使用分组撤消。在我的defun函数中,我从
 
以下是我的*错误*函数
 
一切都很好,只是当我按“u”时,我感到很恼火
(Lisp表达式)多次。我无法从上面的例子中找到解决方案。任何人都可以帮助抑制这种情况吗?
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 07:49 , Processed in 0.674771 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表