help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: HOW TO GIVE A DEFAULT TO A TRULY INTERACTIVE FUNCTION


From: Bingham, Jay
Subject: RE: HOW TO GIVE A DEFAULT TO A TRULY INTERACTIVE FUNCTION
Date: Mon, 14 Oct 2002 13:27:42 -0500

The reason that this function does not do what you want it to is that the 
interactive code, "n", in the string type arg-descriptor specifies that the 
interactive value must be a number, emacs will not let you enter a non-numeric 
value which is what just typing return at the prompt amounts to.  So emacs 
tells you to enter a number and redisplays the prompt.
Using a string type arg-descriptor the only way that you can set up a function 
to allow you to enter a number or nothing is to use the "s" interactive code 
character (which does not provide any number validation)  If you are using 
emacs 21 the easiest way to do number validation is to use the string-match 
function with the [:alpha:] character class as the regexp.
Also when the argument is a string the "if (null number)" construct cannot be 
used, use "if (string= "" number)" instead.

Here is your function using a string arg-descriptor, that does some very crude 
numeric validation and inserts a 5 when nothing is entered at the prompt.

(defun demo (&optional number)
  "Demo of an     optional argument of the function."
  (interactive "sEnter a numeric value:")
  (setq defaultval "5")
  (if (string= "" number) (setq number defaultval))
  (if (not (string-match "[:alpha:]" number))
      (insert (format "%s" number))
    (message "non-numeric value entered, please re-enter"))
  )

If you want a function that prompts for a number until one is entered you will 
have to use an elisp expression type arg-descriptor and do your own number 
validation.  I used to have a function that did its own number validation but I 
lost it when I left my last employer, so I can't send you an example without 
going to a lot of work.  As I recall the lisp expression prompted for the 
number, did the validation and re-issued the prompt if the string entered was 
not numeric.  There may be some examples in the emacs lisp reference manual 
(see: http://www.gnu.org/manual/elisp-manual-21-2.8).

-_
J_)
C_)ingham
.    HP - NonStop Austin Software & Services - Software Product Assurance
.    Austin, TX
. Language is the apparel in which your thoughts parade in public.
. Never clothe them in vulgar and shoddy attire.          -Dr. George W. Crane-

 -----Original Message-----
From:   gnuist006 [mailto:gnuist006@hotmail.com] 
Sent:   Monday, October 14, 2002 11:02 AM
To:     help-gnu-emacs@gnu.org
Subject:        HOW TO GIVE A DEFAULT TO A TRULY INTERACTIVE FUNCTION

(defun demo (&optional number)
"Demo of an     optional argument of the function."
(interactive "nEnter a number:")
(setq defaultval 5)
(if (null number) (setq number defaultval))
(insert (format "%s" number))
)                                        (demo)                       
           ; works due to optional argument

I want the default to work on the command line also.
They say emacs is customizable. OK it is if you only want to do what
it
can do, and never try to do what you want to do.

I want to invoke it on command line ie M-x demo
It comes and says
Enter a number:_

I prefer it display the default 5 in the message and there is
SINGLE instance of 5 in the function. ie using defaultval.

If this cannot do this and you were all lying to yourself that
emacs is customizable, infinitely extensible, then I atleast want
quick fix for this.

When I hit RTN after it begs for number once, it go away and use
defaultval and stop buggin me.

At present it does not stap and keeps bugging till I enter 5.
Why do I have to remember the default when I am giving it that much
money?
_______________________________________________
Help-gnu-emacs mailing list
Help-gnu-emacs@gnu.org
http://mail.gnu.org/mailman/listinfo/help-gnu-emacs





reply via email to

[Prev in Thread] Current Thread [Next in Thread]