   (with-current-buffer (get-buffer-create "*danny*")
     (let* ((input)
            (lines (s-split "\n" prompt))
-           (frame (make-frame `((auto-raise . t)
-                                (font . "Menlo 15")
-                                (height . ,(length lines))
-                                (internal-border-width . 10)
-                                (left . 0.33)
-                                (left-fringe . 0)
-                                (line-spacing . 3)
-                                (menu-bar-lines . 0)
-                                (minibuffer . only)
-                                (right-fringe . 0)
-                                (tool-bar-lines . 0)
-                                (top . 200)
-                                (undecorated . t)
-                                (unsplittable . t)
-                                (vertical-scroll-bars . nil)
-                                (width . ,(+ 1 width (danny--longest-line-length lines)))))))
+           (frame (make-frame
+                   (-concat danny--base-frame-params
+                            (list (cons 'height (length lines))
+                                  (cons 'width (+ 1 width (danny--longest-line-length lines))))))))
       (setq input (read-string prompt))
       (delete-frame)
       (other-window 1)

  (with-current-buffer (get-buffer-create "*danny*")
    (let* ((input)
           (lines (s-split "\n" prompt))
           (height (length lines))
           (width 0)
           (frame (make-frame `((auto-raise . t)
                                (font . "Menlo 15")
                                (height . ,height)
                                (internal-border-width . 10)
                                (left . 0.33)
                                (left-fringe . 0)
                                (line-spacing . 3)
                                (menu-bar-lines . 0)
                                (minibuffer . only)
                                (right-fringe . 0)
                                (tool-bar-lines . 0)
                                (top . 200)
                                (undecorated . t)
                                (unsplittable . t)
                                (vertical-scroll-bars . nil)
                                (width . ,(+ 1 (danny--longest-line-length lines)))))))
      (setq input (yes-or-no-p prompt))
      (delete-frame)
      (other-window 1)

    (with-current-buffer (get-buffer-create "*danny*")
      (let* ((lines-count (length (funcall (danny--framed-ivy-source-collection source)
                                           nil nil nil)))
             (frame (make-frame
                     (-concat danny--base-frame-params
                              (list (cons 'height (if (> lines-count 0) 10
                                                    1))
                                    ;; Calculate a sensible width, based on longest path (in source).
                                    (cons 'width (if (> lines-count 0)
                                                     (+ 1
                                                        lines-count
                                                        (danny--longest-line-length (funcall (danny--framed-ivy-source-collection source)
                                                                                             nil nil nil)))
                                                   (1+ (length (danny--framed-ivy-source-prompt source))))))))))
        (x-focus-frame frame)
        (ivy-read (danny--framed-ivy-source-prompt source)
                  (danny--framed-ivy-source-collection source)
