elisp: Yes-or-No Queries

 
 19.7 Yes-or-No Queries
 ======================
 
 This section describes functions used to ask the user a yes-or-no
 question.  The function ‘y-or-n-p’ can be answered with a single
 character; it is useful for questions where an inadvertent wrong answer
 will not have serious consequences.  ‘yes-or-no-p’ is suitable for more
 momentous questions, since it requires three or four characters to
 answer.
 
    If either of these functions is called in a command that was invoked
 Loop Info::) is either ‘nil’ or a list—then it uses a dialog box or
 pop-up menu to ask the question.  Otherwise, it uses keyboard input.
 You can force use either of the mouse or of keyboard input by binding
 ‘last-nonmenu-event’ to a suitable value around the call.
 
    Strictly speaking, ‘yes-or-no-p’ uses the minibuffer and ‘y-or-n-p’
 does not; but it seems best to describe them together.
 
  -- Function: y-or-n-p prompt
      This function asks the user a question, expecting input in the echo
      area.  It returns ‘t’ if the user types ‘y’, ‘nil’ if the user
      types ‘n’.  This function also accepts <SPC> to mean yes and <DEL>
      to mean no.  It accepts ‘C-]’ to quit, like ‘C-g’, because the
      question might look like a minibuffer and for that reason the user
      might try to use ‘C-]’ to get out.  The answer is a single
      character, with no <RET> needed to terminate it.  Upper and lower
      case are equivalent.
 
      “Asking the question” means printing PROMPT in the echo area,
      followed by the string ‘(y or n) ’.  If the input is not one of the
      expected answers (‘y’, ‘n’, ‘<SPC>’, ‘<DEL>’, or something that
      quits), the function responds ‘Please answer y or n.’, and repeats
      the request.
 
      This function does not actually use the minibuffer, since it does
      not allow editing of the answer.  It actually uses the echo area
      (SeeThe Echo Area), which uses the same screen space as the
      minibuffer.  The cursor moves to the echo area while the question
      is being asked.
 
      The answers and their meanings, even ‘y’ and ‘n’, are not
      hardwired, and are specified by the keymap ‘query-replace-map’
      (SeeSearch and Replace).  In particular, if the user enters
      the special responses ‘recenter’, ‘scroll-up’, ‘scroll-down’,
      ‘scroll-other-window’, or ‘scroll-other-window-down’ (respectively
      bound to ‘C-l’, ‘C-v’, ‘M-v’, ‘C-M-v’ and ‘C-M-S-v’ in
      ‘query-replace-map’), this function performs the specified window
      recentering or scrolling operation, and poses the question again.
 
      We show successive lines of echo area messages, but only one
      actually appears on the screen at a time.
 
  -- Function: y-or-n-p-with-timeout prompt seconds default
      Like ‘y-or-n-p’, except that if the user fails to answer within
      SECONDS seconds, this function stops waiting and returns DEFAULT.
      It works by setting up a timer; see SeeTimers.  The argument
      SECONDS should be a number.
 
  -- Function: yes-or-no-p prompt
      This function asks the user a question, expecting input in the
      minibuffer.  It returns ‘t’ if the user enters ‘yes’, ‘nil’ if the
      user types ‘no’.  The user must type <RET> to finalize the
      response.  Upper and lower case are equivalent.
 
      ‘yes-or-no-p’ starts by displaying PROMPT in the echo area,
      followed by ‘(yes or no) ’.  The user must type one of the expected
      responses; otherwise, the function responds ‘Please answer yes or
      no.’, waits about two seconds and repeats the request.
 
      ‘yes-or-no-p’ requires more work from the user than ‘y-or-n-p’ and
      is appropriate for more crucial decisions.
 
      Here is an example:
 
           (yes-or-no-p "Do you really want to remove everything? ")
 
           ;; After evaluation of the preceding expression,
           ;;   the following prompt appears,
           ;;   with an empty minibuffer:
 
           ---------- Buffer: minibuffer ----------
           Do you really want to remove everything? (yes or no)
           ---------- Buffer: minibuffer ----------
 
      If the user first types ‘y <RET>’, which is invalid because this
      function demands the entire word ‘yes’, it responds by displaying
      these prompts, with a brief pause between them:
 
           ---------- Buffer: minibuffer ----------
           Please answer yes or no.
           Do you really want to remove everything? (yes or no)
           ---------- Buffer: minibuffer ----------