;;; -*- Mode:LISP; Package:TV; Base:10; Readtable:ZL -*-
;;; Pops up a window with a user-supplied prompt in it, returning the character the user
;;; types in to make it disappear...Do not use the mouse to deexpose this, however...
(defun pop-up-prompt (prompt &optional (sup tv:mouse-sheet) (pop-up-near '(:mouse)))
  (let ((message (string-append prompt " ")))
    (let ((pop-up-message-window (make-instance 'tv:pop-up-text-window :superior sup)))
      (send pop-up-message-window :set-label nil)
      (send pop-up-message-window :set-size-in-characters message message)
      (send pop-up-message-window :clear-input)
      (tv:expose-window-near pop-up-message-window pop-up-near nil)
      (tv:window-call (pop-up-message-window :deactivate)
	(send pop-up-message-window :string-out message)
	;(send pop-up-message-window :tyo #\space)
	;; Back up the cursor by one.  This is easier than trying to make the window
	;; come out wider, because of the interface to :set-size-in-characters.
	(multiple-value-bind (x-pos y-pos)
	    (send pop-up-message-window :read-cursorpos :character)
	(send pop-up-message-window :set-cursorpos (1- x-pos) y-pos :character))
	(let ((response (send pop-up-message-window :any-tyi)))
	  (typecase response
		 (list response)
		 ((or number character)
		  (send pop-up-message-window :tyo response)
		  (tv:blinker-set-visibility (first (last (send pop-up-message-window :blinker-list))) nil)
		  (sleep 0.5)
		  (character response))
		 (t (beep))))))))
