乐筑天下

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

[编程交流] Not difficult (if you know how

[复制链接]

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 10:33:59 | 显示全部楼层 |阅读模式
Just for the learningprocess, not for the worthy of the routine...
How can I make the repetitive "setvar" more appropriate?
Like (setvar '("cursorsize" 1 "xdwgfadectl" 20 ... etc...
 
I have no clue allthough I remember seeing it somewhere..
Any help is appreciated, again, this is to learn only.
 
Here my code:
  1. (defun c:hsh ( / CmdEchoOld) (setq CmdEchoOld (getvar "cmdecho") ) (setvar "cmdecho" 0) (setvar "cursorsize" 100) (setvar "xdwgfadectl" 20) (setvar "savetime" 3) (setvar "dimassoc" 1) (setvar "cmdecho" CmdEchoOld) (princ))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:42:17 | 显示全部楼层
Give this a try .....
 
  1. (mapcar 'setvar '(cmdecho cursorsize xdwgfadectl savetime dimassoc cmdecho) '( 0 100 20 3 1 CmdEchoOld) )
 
Regards,
 
Tharwat
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 10:48:08 | 显示全部楼层
In SETVAR or SET you cannot use multiple assignments like in SETQ statement. You may use a list of pairs variable - value:
 
  1. (foreach VariableSet '(("cmdecho" . 0) ("cursorsize" . 100) ("xdwgfadectl" . 20) ("savetime" . 3) ("dimassoc" . 1))(setvar (car VariableSet)        (cdr VariableSet)))
 
 
Regards,
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 10:52:12 | 显示全部楼层
I prefer making a list of dotted pairs
 
  1. (setq var '(("CMDECHO"   . 0) ("MENUECHO"   . 0)               ("MENUCTL"   . 0) ("MACROTRACE" . 0)               ("OSMODE"    . 0) ("SORTENTS"   . 119)               ("LUPREC"    . 2) ("MODEMACRO" . ".")               ("BLIPMODE"  . 0) ("EXPERT"     . 5)               ("SNAPMODE"  . 1) ("PLINEWID"   . 0)               ("ORTHOMODE" . 1) ("GRIDMODE"   . 0)               ("ELEVATION" . 0) ("THICKNESS"  . 0)               ("FILEDIA"   . 0) ("FILLMODE"   . 0)               ("SPLFRAME"  . 0) ("UNITMODE"   . 0)               ("TEXTEVAL"  . 0) ("ATTDIA"     . 0)               ("AFLAGS"    . 0) ("ATTREQ"     . 1)               ("ATTMODE"   . 1) ("UCSICON"    . 1)               ("HIGHLIGHT" . 1) ("REGENMODE"  . 1)               ("COORDS"    . 2) ("DRAGMODE"   . 2)               ("DIMZIN"    . 1) ("PDMODE"     . 0)               ("CECOLOR"   . "BYLAYER")               ("CELTYPE"   . "BYLAYER")))(foreach v var  (and (getvar (car v))       (setq rst (cons (cons (car v) (getvar (car v))) nw_rst))       (setvar (car v) (cdr v))))
 
The list rst contains the prior settings so that you can easily rest the variables back to their original values.  -David
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 10:56:58 | 显示全部楼层
Similar to others : I had a phone call in the middle of putting it together
 
  1. (setq CmdEchoOld (getvar "cmdecho")     varsList   (list '("cursorsize" . 1)                  '("xdwgfadectl"  . 20)                  '("cmdecho" . 0)                  '("cursorsize" . 100)                  '("xdwgfadectl" . 20)                  '("savetime" . 3)                  '("dimassoc" . 1)                  (cons "cmdecho" CmdEchoOld)                 ))(foreach item varsList (setvar (car item) (cdr item)))
 
 
or perhaps
 
  1. (setq sysvarlist  nil      generalVars '(("CMDECHO" 0)           ; save current and Turns off echoing                    ("expert" 5)            ; save current value and set                    ("ORTHOMODE")           ; save current value                    ("SNAPANG")             ; save current value                    ("UCSICON")             ; save current value                    ("SNAPMODE")            ; save current value                    ("OSMODE")              ; save current value                    ("CLAYER")                    ("PICKADD" 2)           ; save current and  Turns on PICKADD. Shift-Pick to remove                    ("PICKAUTO" 1)          ; save current and  Draws a selection window (for either a window or a crossing selection) automatically                     ("PICKBOX" 5)           ; save current and  initial is 3. my default is 6                    ("INSUNITS" 0)          ; save current and  Unspecified (No units)                    ("SORTENTS" 1)          ; save current and  use selection Order to control                   ))(vars_list '(("cursorsize" . 1) ''("xdwgfadectl" . 20))) (foreach item (append vars_list generalVars)   (setq sysvarlist (cons (list (car item) (getvar (car item)))                                  sysvarlist                            )   )   (if (cadr item)     (setvar (car item) (eval (cadr item)))   ) )  ;;---------  ;; do code mojo  ;;---------  ;; clean up  (foreach item sysvarlist (setvar (car item) (cadr item)))
回复

使用道具 举报

2

主题

182

帖子

180

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:02:53 | 显示全部楼层
oh!?  Kerry you're a genius.
You had:
  1. (if (cadr item)     (setvar (car item) (eval (cadr item)))   )
I had:
  1. (if (cadr x)              (if (not (eq (type (cadr x)) 'LIST))                (setvar (car x) (cadr x))                (setvar (car x) (eval (cadr x)))              )            )
 
So much nicer. What was i thinking?
 
thx
回复

使用道具 举报

59

主题

327

帖子

268

银币

后起之秀

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

铜币
295
发表于 2022-7-6 11:08:01 | 显示全部楼层
Thanks everybody!!
 
That shure is a big help. I will explore the differences and what may suit me best.
Tharwats reply whas exactly what I meant but maybe the other options are more convenient..?
I will try some coding. WHat I want to keep is an easy view.... if you get what I mean.
 
In such case the other options seem better "readable".
 
Thanks again for the good examples!
回复

使用道具 举报

0

主题

127

帖子

130

银币

限制会员

铜币
-2
发表于 2022-7-6 11:13:50 | 显示全部楼层
 
If I'd had known you'd be perusing the code I'd probably have used OR
回复

使用道具 举报

2

主题

182

帖子

180

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:15:15 | 显示全部楼层
*blink*
 
before last comment:
much respect for Kerry | ---x---------------------- | *meow*
 
after last comment:
much respect for Kerry | -------------------------x | *meow*
 
 
 
 
*lol*
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:19:47 | 显示全部楼层
How about evaluation of quoted expressions:
 
  1. (setq StoredList (mapcar   (function     (lambda ( SystemVariable )       (list (quote setvar) SystemVariable (getvar SystemVariable))     )   )   (setq SystemVariables    '( "CMDECHO" "OSMODE" "BLIPMODE" "FILLMODE" )   ) ))(mapcar (function setvar) SystemVariables '( 0 256 0 1 ))(mapcar (function eval) StoredList)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 17:10 , Processed in 0.758839 second(s), 72 queries .

© 2020-2025 乐筑天下

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