From: "Bingham, Jay" <Jay.Bingham@hp.com>
Subject: RE: HOW TO GIVE A DEFAULT TO A TRULY INTERACTIVE FUNCTION
Date: Mon, 14 Oct 2002 13:27:42 -0500 [thread overview]
Message-ID: <72A87F7160C0994D8C5A36E2FDC227F5035E77F8@txnexc01.americas.cpqcorp.net> (raw)
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
next reply other threads:[~2002-10-14 18:27 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-14 18:27 Bingham, Jay [this message]
[not found] <mailman.1034620095.15632.help-gnu-emacs@gnu.org>
2002-10-17 14:22 ` HOW TO GIVE A DEFAULT TO A TRULY INTERACTIVE FUNCTION gnuist006
2002-10-18 7:14 ` Friedrich Dominicus
-- strict thread matches above, loose matches on Subject: below --
2002-10-14 16:02 gnuist006
2002-10-14 17:22 ` Joe Casadonte
2002-10-14 20:07 ` Edi Weitz
2002-10-17 14:27 ` gnuist006
2002-10-17 17:35 ` Barry Margolin
2002-10-18 10:36 ` Oliver Scholz
2002-10-17 14:35 ` gnuist006
2002-10-17 15:03 ` Edi Weitz
2002-10-18 5:51 ` huntingdon
2002-10-18 7:13 ` Friedrich Dominicus
2002-10-18 7:07 ` Friedrich Dominicus
2002-10-18 8:05 ` Friedrich Dominicus
2002-10-18 17:05 ` Kevin Rodgers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=72A87F7160C0994D8C5A36E2FDC227F5035E77F8@txnexc01.americas.cpqcorp.net \
--to=jay.bingham@hp.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).