Function: read-number

read-number is a byte-compiled function defined in subr.el.gz.

Signature

(read-number PROMPT &optional DEFAULT HIST)

Documentation

Read from the minibuffer and return a numeric value, prompting with PROMPT.

DEFAULT specifies a default value to return if the user just types RET. For historical reasons, the value of DEFAULT is always inserted into PROMPT, so it's recommended to use format instead of format-prompt to generate PROMPT. HIST specifies a history list variable. See read-from-minibuffer for details of the HIST argument.

This function is used by the interactive code letter "n".

Probably introduced at or before Emacs version 28.1.

Source Code

;; Defined in /usr/src/emacs/lisp/subr.el.gz
(defun read-number (prompt &optional default hist)
  "Read from the minibuffer and return a numeric value, prompting with PROMPT.
DEFAULT specifies a default value to return if the user just types RET.
For historical reasons, the value of DEFAULT is always inserted into
PROMPT, so it's recommended to use `format' instead of `format-prompt'
to generate PROMPT.  HIST specifies a history list variable.  See
`read-from-minibuffer' for details of the HIST argument.

This function is used by the `interactive' code letter \"n\"."
  (let ((n nil)
	(default1 (if (consp default) (car default) default)))
    (when default1
      (setq prompt
	    (if (string-match "\\(\\):[ \t]*\\'" prompt)
		(replace-match (format minibuffer-default-prompt-format default1) t t prompt 1)
	      (replace-regexp-in-string "[ \t]*\\'"
					(format minibuffer-default-prompt-format default1)
					prompt t t))))
    (while
	(progn
	  (let ((str (read-from-minibuffer
		      prompt nil nil nil (or hist 'read-number-history)
		      (when default
			(if (consp default)
			    (mapcar #'number-to-string (delq nil default))
			  (number-to-string default))))))
	    (condition-case nil
		(setq n (cond
			 ((zerop (length str)) default1)
			 ((stringp str) (read str))))
	      (error nil)))
	  (unless (numberp n)
	    (message "Please enter a number.")
	    (sit-for 1)
	    t)))
    n))