anchor.diff:  	     (msg "Chosen options: ~{~A~^, ~}" (reverse chosen-options))
   	     (msg* msg)
   	     (when default
  -	       (msg* "[~A] " default))))
  -      (print-options)
  -      (let* ((chosen-option (read-line))
  +	       (msg* "[~A] " default)))
  +	   (read-option ()
  +	     (if complete
  +		 (progn
  +		   (rl:register-function :complete (make-completer options))
  +		   (rl:readline :prompt (format nil "~A~@[[~A]~]" msg default)))
  +		 (read-line))))
  +      (when print-options
  +	(print-options))
  +      (let* ((chosen-option (read-option))
   	     (option-number (ignore-errors (parse-integer chosen-option))))
   	(loop 
   	   do 
  
positive.code: 		:if-wrong-input (or if-wrong-input
  				    (lambda () (msg "Error. Invalid timestamp")))))
  
  (defun choose-many (msg options &key if-wrong-option default (separator "~%") (test #'eql))
    (let ((chosen-options nil))
      (flet ((print-options ()
  	     (loop 
  
negative.code: 			(return (reverse chosen-options))))
  		   ((find chosen-option (mapcar #'princ-to-string options) :test #'string=)
  		    (pushnew (find chosen-option (mapcar #'princ-to-string options) :test #'string=) chosen-options :test test)
  		    (when print-options
  		      (print-options)))
  		   ((and option-number
  			 (>= option-number 0)
  			 (< option-number (length options)))
  		    ;; Correct option
  		    (pushnew (nth option-number options) chosen-options :test test)
  		    (when print-options
  		      (print-options)))
  		   (t
  		    ;; Incorrect option
  		    (progn
  		      (if if-wrong-option
  			  (funcall if-wrong-option)
  			  (msg "Wrong option."))
  		      (when print-options
  			(print-options)))))
  	     (setf chosen-option (read-option))
  	     (setf option-number (ignore-errors (parse-integer chosen-option))))))))
  