 (defun danny--longest-line-length (lines)
   "Return the longest length in LINES."
   (let ((longest 0))
-    (mapc (lambda (line)
-            (when (> (length line) longest)
-              (setq longest (length line))))
+    (mapc (lambda (item)
+            ;; Collection items may be text or cons of text and function.
+            (let ((text (if (consp item)
+                            (car item)
+                          item)))
+              (when (> (length text) longest)
+                (setq longest (length text)))))
           lines)
     longest))
 

                                                                                :initial-input ivy-text))))
    (with-current-buffer (get-buffer-create "*danny*")
      (let* ((collection (funcall (danny--framed-ivy-source-collection source)
                                              nil nil nil))
             (lines-count (+ (length (s-split "\n" (danny--framed-ivy-source-prompt source)))
                             (length collection)))
             (frame (make-frame

               (f-file-p fpath))
      (danny--choose-action fpath))))

(defun danny--move-file (src-fpath dst-dpath)
  (let ((dst-fpath (f-join dst-dpath
                           (danny--read-string (format "Save as (%s): " (f-filename src-fpath))
                                               (f-filename src-fpath)
                                               20))))
    (when (equal src-fpath dst-fpath)
      (error "Moving to same location"))
    (if (f-exists-p dst-fpath)
        (progn
          (unless (danny--y-or-n (format "Override? %s\n" dst-fpath))
            (error "Aborted"))
          (rename-file src-fpath dst-fpath t)
          (danny--add-destination-dir dst-dpath))
      (rename-file src-fpath dst-fpath t)
      (danny--add-destination-dir dst-dpath))))

(defun danny--create-move-action-fun (src-fpath)
  (lambda (dst-dpath)
    (danny--move-file src-fpath dst-dpath)))

(defun danny--create-open-action-fun (file-path)
  (lambda (ignored)
