Ronjonp我喜欢这个想法,所以我把它作为一个库函数,将来可能会用到它,因为我正在将代码从命令行输入转移到一种更直观的方法。
; get keyword on screen input by Ronjonp Jan 2018
;http://www.cadtutor.net/forum/showthread.php?102708-Getstring-a-default-value-without-print.
; modified by BIGAL Jan 2018 as a library function
(defun keyword (*default* options /)
(setq olddynmode (getvar "dynmode"))
(setq olddynprompt (getvar "dynprompt"))
(setvar "dynmode" 1)
(setvar "dynprompt" 1)
(initget options )
(setq *default* (cond ((getkword (strcat "\nPick an option: ["
(vl-string-translate " " "/" options)
"] <"
*default*
">:"
)
)
)
(*default*)
)
)
(setvar "dynmode" olddynmode)
(setvar "dynprompt" olddynprompt)
)
; example
(keyword "Width" "Length Height Width")
很高兴你能用上它。为了提高性能,我通常将dynmode设置为0。IMO。。如果你在函数中改变变量,我会在其中加入一个误差函数。 ronjonp好主意,我一直想写一个复位很多错误函数作为一个库函数位,经常需要filedia复位。 也许是这样的,所以你没有一个共同的全球,这可能会导致问题。
(defun keyword (key options default / *error* def vars)
(defun *error* (msg)
(mapcar '(lambda (x) (setvar (car x) (cdr x))) vars)
(if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
(princ (strcat "\nError: " msg))
)
(princ)
)
(or (setq def (getenv key)) (setq def default))
(setq vars (mapcar '(lambda (x) (cons x (getvar x))) (list 'dynmode 'dynprompt)))
(mapcar '(lambda (a b) (setvar (car a) b)) vars '(1 1))
(initget options)
(setq def
(cond ((getkword
(strcat "\nPick an option: [" (vl-string-translate " " "/" options) "] <" def ">:")
)
)
(def)
)
)
(mapcar '(lambda (x) (setvar (car x) (cdr x))) vars)
(setenv key def)
)
(keyword "MyProgram" "Length Height Width Depth" "Height")
页:
1
[2]