harrison-matt Posted September 30, 2010 Share Posted September 30, 2010 All, I am wondering if it is possible to have your program remember the last, say string, that you used in your program. for example, if i use: (setq revn (getstring "\nEnter your revision number:")) And the last revision number i used was "5" i would like this string request to automatically fill in with "5" so that i can pass on to the next input. Is this possible? Thanks ahead of time, Matt Quote Link to comment Share on other sites More sharing options...
lpseifert Posted September 30, 2010 Share Posted September 30, 2010 (edited) here's one way (if (null *revn*) (setq *revn* "1") ) (setq revn (getstring (strcat "\n Enter revision number: <" *revn* ">: "))) (if (eq revn "") (setq revn *revn*) (setq *revn* revn) ) Edited September 30, 2010 by lpseifert Code revised per Lee Mac's comment in post #3 Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 30, 2010 Share Posted September 30, 2010 FYI: null input with getstring = "" Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 30, 2010 Share Posted September 30, 2010 Another way (setq *rev* ( (lambda ( input ) (if (eq "" input) *rev* input)) (getstring (strcat "\nEnter Revision Number <" (setq *rev* (cond ( *rev* ) ( "1" ))) "> : ")) ) ) Quote Link to comment Share on other sites More sharing options...
alanjt Posted September 30, 2010 Share Posted September 30, 2010 I agree with Lee and have used that same exact method before, but if all you are wanting is an integer, why not just use getint and convert to a string? eg. (setq *rev* (cond ((getint (strcat "\nSpecify revision number <" (itoa (cond (*rev*) ((setq *rev* 1)) ) ) ">: " ) ) ) (*rev*) ) ) Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 30, 2010 Share Posted September 30, 2010 Completely agree with Alan's sentiment above, but just for genericity: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] LM:GetXWithDefault [b][color=RED]([/color][/b] _function _prompt _symbol _default [b][color=BLUE]/[/color][/b] _toString [b][color=RED])[/color][/b] [i][color=#990099];; © Lee Mac 2010[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] _toString [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=BLUE]getangle[/color][/b] _function[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]angtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]REAL [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]INT [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] input [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] input[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b]_function [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] _prompt [b][color=#a52a2a]"<"[/color][/b] [b][color=RED]([/color][/b]_toString [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] _default [b][color=RED]))))[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED]))[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=BLUE]nil[/color][/b] [b][color=RED]([/color][/b]LM:GetXWithDefault [b][color=BLUE]getstring[/color][/b] [b][color=#a52a2a]"\nEnter Revision Number "[/color][/b] [b][color=DARKRED]'[/color][/b]*rev* [b][color=#a52a2a]"1"[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] Quote Link to comment Share on other sites More sharing options...
alanjt Posted September 30, 2010 Share Posted September 30, 2010 Completely agree with Alan's sentiment above, but just for genericity: Nice. Quote Link to comment Share on other sites More sharing options...
lpseifert Posted September 30, 2010 Share Posted September 30, 2010 FYI: null input with getstring = "" It worked fine when tested using getint... changed it to getstring cuz I thought that was what the OP wanted ya learn something new everyday... thanks Quote Link to comment Share on other sites More sharing options...
David Bethel Posted September 30, 2010 Share Posted September 30, 2010 Lee, I gotta ask - Have you fallen in love with lambda? -David Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted September 30, 2010 Share Posted September 30, 2010 I gotta ask - Have you fallen in love with lambda? Haha - I think Alan & I both have... Its just very convenient when you don't want to define a lot of variables Quote Link to comment Share on other sites More sharing options...
David Bethel Posted September 30, 2010 Share Posted September 30, 2010 (edited) It does make things a bit harder to read and dissect. Maybe there are some pluses that I haven't uncovered yet. My $0.02 -David Edited October 1, 2010 by David Bethel Quote Link to comment Share on other sites More sharing options...
AIberto Posted July 2, 2015 Share Posted July 2, 2015 Completely agree with Alan's sentiment above, but just for genericity: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] LM:GetXWithDefault [b][color=RED]([/color][/b] _function _prompt _symbol _default [b][color=BLUE]/[/color][/b] _toString [b][color=RED])[/color][/b] [i][color=#990099];; © Lee Mac 2010[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] _toString [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=BLUE]getangle[/color][/b] _function[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]angtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]REAL [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=DARKRED]'[/color][/b]INT [b][color=RED]([/color][/b][b][color=BLUE]type[/color][/b] x[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]itoa[/color][/b] x[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] x [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b] input [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]or[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]not[/color][/b] input[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#a52a2a]""[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] input[b][color=RED]))[/color][/b] [b][color=RED]([/color][/b]_function [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] _prompt [b][color=#a52a2a]"<"[/color][/b] [b][color=RED]([/color][/b]_toString [b][color=RED]([/color][/b][b][color=BLUE]set[/color][/b] _symbol [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]eval[/color][/b] _symbol[b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b] _default [b][color=RED]))))[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED]))[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:test [b][color=BLUE]nil[/color][/b] [b][color=RED]([/color][/b]LM:GetXWithDefault [b][color=BLUE]getstring[/color][/b] [b][color=#a52a2a]"\nEnter Revision Number "[/color][/b] [b][color=DARKRED]'[/color][/b]*rev* [b][color=#a52a2a]"1"[/color][/b][b][color=RED])[/color][/b] [b][color=RED])[/color][/b] Lee, nice function ! and I see your new version at theswamp. I have a problem my original code (getdist p "\nPlease Enter the length: ") ===> (LM:GetXWithDefault getdist p "\nPlease Enter the length: "'*leng* 15.0) error. too many arguments Lee, about example , only see getstring , getreal ,getkword These? getangle getorient getdist getint getpoint getcorner Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted July 2, 2015 Share Posted July 2, 2015 (edited) Consider the following updated function & accompanying example: ;; GetX with Default - Lee Mac ;; fun - [sym] Quoted user input function ;; pmt - [str] Prompt string ;; sym - [sym] Quoted function to hold default value (not 'sym) ;; def - [any] Initial default value ;; ini - [lst] [Optional] List of initget arguments ;; arg - [lst] [Optional] List of arguments for user input function ;; Returns: [any] User input or default value (defun LM:getxwithdefault ( fun pmt sym def ini arg / tmp ) (if (not (boundp sym)) (set sym def)) (if ini (apply 'initget ini)) (if (member (setq tmp (apply fun (append arg (list (strcat pmt "<" ( (lambda ( x ) (cond ( (= 'getangle fun) (angtos x)) ( (= 'real (type x)) (rtos x)) ( (= 'int (type x)) (itoa x)) ( (= 'str (type x)) x) ( (vl-princ-to-string x)) ) ) (eval sym) ) ">: " ) ) ) ) ) '("" nil) ) (eval sym) (set sym tmp) ) ) (defun c:test ( / p ) (if (setq p (getpoint "\nSpecify base point: ")) (princ (strcat "\nUser entered: " (rtos (LM:getxwithdefault 'getdist "\nSpecify length " '*leng* 15.0 nil (list p))) ) ) ) (princ) ) Edited December 27, 2018 by Lee Mac Quote Link to comment Share on other sites More sharing options...
AIberto Posted July 3, 2015 Share Posted July 3, 2015 Consider the following updated function & accompanying example: Lee, Wonderful !!! Your help was greatly appreciated. Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted July 3, 2015 Share Posted July 3, 2015 Lee, Wonderful !!! Your help was greatly appreciated. You're very welcome! Quote Link to comment Share on other sites More sharing options...
jonathann3891 Posted December 27, 2018 Share Posted December 27, 2018 (edited) I'm reviving this dead post. Im using the code below from the great Lee Mac. Once the lisp routine is completed and then reactivated the input is set back to the default, at least thats what its doing to me. How can the input be saved so when the lisp is activated again (in the same drawing) it will remember the rev number or is that even possible? On 9/30/2010 at 12:58 PM, Lee Mac said: (setq *rev* ( (lambda ( input ) (if (eq "" input) *rev* input)) (getstring (strcat "\nEnter Revision Number <" (setq *rev* (cond ( *rev* ) ( "1" ))) "> : ")) ) ) Edited December 27, 2018 by jonathann3891 Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted December 27, 2018 Share Posted December 27, 2018 (edited) 8 minutes ago, jonathann3891 said: Once the lisp routine is completed and then reactivated the input is set back to the default, at least thats what its doing to me. How can the input be saved so when the lisp is activated again (in the same drawing) it will remember the rev number or is that even possible? Ensure that the variable *rev* is not declared as a local variable (i.e. not included in the list of variables following the forward slash in the defun expression) - this variable should remain global so that it retains its value between evaluations of the function. If you wish to retain the default option between drawing sessions (i.e. after AutoCAD has been closed), you will need to store the default value either in the registry, a drawing dictionary, or external file such as a Text, CSV, XML, or INI file. You may also wish to refer to this tutorial. Edited December 27, 2018 by Lee Mac Quote Link to comment Share on other sites More sharing options...
jonathann3891 Posted December 27, 2018 Share Posted December 27, 2018 That worked. Thanks Lee Mac!! Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.