找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 851|回复: 1

[LISP函数-基本]:修改指定系统变量并返回其先前值

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-9-4 02:31:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;;;ChangeVars
  2. ;;;修改指定系统变量并返回其先前值
  3. ;;;参数
  4. ;;;一个包含要更改的系统变量和他们的新值的点对列表
  5. ;;;示例
  6. ;;;(setq ret (changevars '(("filedia" . 0)("cmdecho" . 0)("osmode" . 512))))
  7. ;;;注意
  8. ;;;CHANGEVARS 返回一个包含所有指定的系统变量和他们先前值的列表。要恢复他们,
  9. ;;;可简单地将该返回的列表提供给CHANGEVARS 函数。
  10. (defun xd-changevars (lst)
  11.   (mapcar '(lambda (x / tmp var)
  12.              (setq tmp (cons (car x)
  13.                              (if (= (type (setq var (getvar (car x)))) 'list)
  14.                                (list var)
  15.                                var
  16.                              )
  17.                        )
  18.              ) ;_ end of setq
  19.              (setvar (car x)
  20.                      (if (= (type (cdr x)) 'list)
  21.                        (cadr x)
  22.                        (cdr x)
  23.                      )
  24.              )
  25.              tmp
  26.            ) ;_ end of lambda
  27.           lst
  28.   ) ;_ end of mapcar
  29. ) ;_ end of defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2005-9-23 12:34:11 | 显示全部楼层
再看看CAD定义的

  1. ;;cad内部定义函数 From acad.mnl
  2. ;;; --- ai_sysvar ------------------------------------------
  3. ;;; Change system variable settings and save current settings
  4. ;;; (Note: used by *merr* to restore system settings on error.)
  5. ;;;
  6. ;;; The <vars> argument is used to...
  7. ;;;   restore previous settings (ai_sysvar NIL)
  8. ;;;   set a single sys'var (ai_sysvar  '("cmdecho" . 0))
  9. ;;;   set multiple sys'vars (ai_sysvar '(("cmdecho" . 0)("gridmode" . 0)))
  10. ;;;
  11. ;;; defun-q is needed by Visual Lisp for functions which redefine themselves.
  12. ;;; it is aliased to defun for seamless use with AutoLISP.
  13. (defun-q ai_sysvar
  14.          (vars / savevar pair varname varvalue varlist)
  15.          (setq varlist nil)
  16.          ;; place holder for varlist
  17.          (defun        savevar        (varname varvalue / pair)
  18.            (cond
  19.              ;; if new value is NIL, save current setting
  20.              ((not varvalue)
  21.               (setq varlist
  22.                      (cons
  23.                        (cons varname (getvar varname))
  24.                        varlist
  25.                      )
  26.               )
  27.              )
  28.              ;; change sys'var only if it's different
  29.              ((/= (getvar varname) varvalue)
  30.               ;; add current setting to varlist, change setting
  31.               (setq varlist
  32.                      (cons
  33.                        (cons varname (getvar varname))
  34.                        varlist
  35.                      )
  36.               )
  37.               (setvar varname varvalue)
  38.              )
  39.              (T nil)
  40.            )
  41.          )
  42.          (cond ;_reset all values
  43.            ((not vars)
  44.             (foreach pair varlist
  45.               (setq varname  (car pair)
  46.                     varvalue (cdr pair)
  47.               )
  48.               (setvar varname varvalue)
  49.             )
  50.             (setq varlist nil)
  51.            )
  52.            ((not (eq 'LIST (type vars)))
  53.             (princ "\nAI_SYSVAR: 参数类型错。\n")
  54.            )
  55.            ;; set a single system variable
  56.            ((eq 'STR (type (car vars)))
  57.             (savevar (car vars) (cdr vars))
  58.            )
  59.            ;; set multiple system variables
  60.            ((and
  61.               (eq 'LIST (type (car vars)))
  62.               (eq 'STR (type (caar vars)))
  63.             )
  64.             (foreach pair vars
  65.               (setq varname  (car pair)
  66.                     varvalue (cdr pair)
  67.               )
  68.               (if (not (eq 'STR (type varname)))
  69.                 (princ "\nAI_SYSVAR: 参数类型错。\n")
  70.                 (savevar varname varvalue)
  71.               )
  72.             )
  73.            )
  74.            (T (princ "\nAI_SYSVAR: 第一个参数有错。\n"))
  75.          )                                ;cond
  76.          ;; redefine ai_sysvar function to contain the value of varlist
  77.          (setq ai_sysvar
  78.                 (cons (car ai_sysvar)
  79.                       (cons (list 'setq 'varlist (list 'quote varlist))
  80.                             (cddr ai_sysvar)
  81.                       )
  82.                 )
  83.          )
  84.          varlist
  85.          ;; return the list
  86. ) ;_sysvar
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 06:50 , Processed in 0.200752 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表