anchor.diff:           - color: Color to use at prompt. Default: *prompt-color*
            - error-color: Color to use when error ocurrs. Default: *prompt-error-color*
   
  -  Example: 
  +  Example:
   
     ``(choose \"Choose: \" (list \"foo\" \"bar\" \"baz\") :default \"baz\")``
   
     Tags: menu, choose"
     (assert (or (not default)
  -	      (member default options :test 'string=))
  -	  nil "Invalid default: ~s" default)
  +              (member default options :test 'string=))
  +          nil "Invalid default: ~s" default)
     (flet ((print-options ()
  -	   (loop 
  -	      for option in options
  -	      for i from 0 
  -	      do
  -		(format t "[~A] ~A" i option)
  -		(when (< (1+ i) (length options))
  -		  (format t separator)))
  -	   (terpri))
  -	 (read-option ()
  -	   (cond 
  -	     ((or complete completer)
  -	      (let ((prompt (if color 
  -				(with-output-to-string (s)
  -				  (cl-ansi-text:with-color (color :stream s)
  -				    (format s "~A~@[[~A]~]" msg default)))
  -				(format nil "~A~@[[~A]~]" msg default))))
  -		(complete-prompt prompt options completer)))
  -	     (t
  -	      (say msg :color color)
  -	      (when default
  -		(say "[~A] " default :color color))
  -	      (string-trim (list #\ ) (read-line))))))
  +           (loop
  +             for option in options
  +             for i from 0
  +             do
  +                (format t "[~A] ~A" i option)
  +                (when (< (1+ i) (length options))
  +                  (format t separator)))
  +           (terpri))
  +         (read-option ()
  +           (cond
  +             ((or complete completer)
  +              (let ((prompt (if color
  +                                (with-output-to-string (s)
  +                                  (cl-ansi-text:with-color (color :stream s)
  +                                    (format s "~A~@[[~A]~]" msg default)))
  +                                (format nil "~A~@[[~A]~]" msg default))))
  +                (complete-prompt prompt options completer)))
  +             (t
  +              (say msg :color color)
  +              (when default
  +                (say "[~A] " default :color color))
  +              (string-trim (list #\ ) (read-line))))))
       (when print-options
         (print-options))
       (let* ((chosen-option (read-option))
  -	   (option-number (ignore-errors (parse-integer chosen-option))))
  -      (loop 
  -	 do 
  -	   (cond ((and (equalp chosen-option "")
  -		       default)
  -		  (return default))
  -		 ((find chosen-option (mapcar #'princ-to-string options) :test #'string=)
  -		  (return (find chosen-option (mapcar #'princ-to-string options) :test #'string=)))
  -		 ((and option-number
  -		       (>= option-number 0)
  -		       (< option-number (length options)))
  -		  ;; Correct option
  -		  (return (nth option-number options)))
  -		 (t
  -		  ;; Incorrect option
  -		  (progn
  -		    (if if-wrong-option
  -			(funcall if-wrong-option)
  -			(say "Wrong option." :color error-color))
  -		    (when print-options
  -		      (print-options)))))
  -	   (setf chosen-option (read-option))
  -	   (setf option-number (ignore-errors (parse-integer chosen-option)))))))
  -  
  -(defun ask (&optional (msg "Yes or no: ") &key 
  -					    (default nil default-p) 
  -					    if-wrong-answer
  -					    (color *prompt-color*)
  -					    (error-color *prompt-error-color*))
  +           (option-number (ignore-errors (parse-integer chosen-option))))
  +      (loop
  +        do
  +           (cond ((and (equalp chosen-option "")
  +                       default)
  +                  (return default))
  +                 ((find chosen-option (mapcar #'princ-to-string options) :test #'string=)
  +                  (return (find chosen-option (mapcar #'princ-to-string options) :test #'string=)))
  +                 ((and option-number
  +                       (>= option-number 0)
  +                       (< option-number (length options)))
  +                  ;; Correct option
  +                  (return (nth option-number options)))
  +                 (t
  +                  ;; Incorrect option
  +                  (progn
  +                    (if if-wrong-option
  +                        (funcall if-wrong-option)
  +                        (say "Wrong option." :color error-color))
  +                    (when print-options
  +                      (print-options)))))
  +           (setf chosen-option (read-option))
  +           (setf option-number (ignore-errors (parse-integer chosen-option)))))))
  +
  +(defun ask (&optional (msg "Yes or no: ") &key
  +                                            (default nil default-p)
  +                                            if-wrong-answer
  +                                            (color *prompt-color*)
  +                                            (error-color *prompt-error-color*))
     "Ask for yes or no.
   
      Args: - msg(string): The prompt to use. Default: 'Yes or no: '.
  
positive.code: 
  (defun remove-options (args &rest keys)
    (let ((args (copy-list args))
  	(new-args nil))
      (loop 
  	 with arg
  	 while args
  	 do (setf arg (pop args))
  	 (if (member arg keys)
  	     (pop args)
  	     (push arg new-args)))
      new-args))
  
  (defun find-option (args option)
    (let ((args (copy-list args)))
      (loop with arg
         while args
         do (setf arg (pop args))
  	 (when (equalp arg option)
  	   (return-from find-option (car args))))
      nil))
  
  (defun say (datum &rest args)
  
negative.code:            (prompt \"Item: \"))``
  
     Tags: flow"
  
    (alexandria:with-unique-names (result while)
      `(block ,while
         (let ((,result nil))
           (flet ((cancel ()
                    (return-from ,while nil))
                  (continue* ()
                    (return-from ,while ,result)))
             (loop
               :while (ask ,msg ,@options)
               :do (setf ,result (append ,result (list (progn ,@body)))))
             ,result)))))
  