BIGAL 发表于 2022-7-5 16:26:12

谢谢,我想这会是一个转变,因为你知道有这么多。还需要Dynprompt=1。我的工作动力关闭了个人偏好。
 
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")

ronjonp 发表于 2022-7-5 16:27:59

很高兴你能用上它。为了提高性能,我通常将dynmode设置为0。IMO。。如果你在函数中改变变量,我会在其中加入一个误差函数。

BIGAL 发表于 2022-7-5 16:34:02

ronjonp好主意,我一直想写一个复位很多错误函数作为一个库函数位,经常需要filedia复位。

ronjonp 发表于 2022-7-5 16:40:03

也许是这样的,所以你没有一个共同的全球,这可能会导致问题。
(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]
查看完整版本: Getstring默认值