                      (substring row 0
                                 (- (length row)
                                    (length lusty-column-separator)))
-                            "\n")))))
+                     "\n")))
+
+    ;; Report whether we had to truncate the results
+    (> max-rows max-printable-rows)))
 
 ;; Get a starting upperbound on the number of columns.
 (defun lusty-column-count-upperbound (strings)

         (matches
          (ecase lusty--active-mode
            (:file-explorer (lusty-file-explorer-matches minibuffer-text))
            (:buffer-explorer (lusty-buffer-explorer-matches minibuffer-text)))))

    (multiple-value-bind (truncated-matches truncated-p)
        (lusty-truncate-entries matches)
      (setq lusty--previous-printed-matches truncated-matches)

      ;; Update the matches window.
      (let ((lusty-buffer (get-buffer-create lusty-buffer-name)))
        (with-current-buffer lusty-buffer
          (setq buffer-read-only t)
          (let ((buffer-read-only nil))
            (erase-buffer)
            (lusty--display-entries truncated-matches truncated-p)
            (goto-char (point-min))))

        ;; If only our matches window is open,
        (when (one-window-p t)
          ;; Restore original window configuration before fitting the
          ;; window so the minibuffer won't grow and look silly.
          (set-window-configuration lusty--initial-window-config))
        (fit-window-to-buffer (display-buffer lusty-buffer)
                              ; TODO vvv do smarter
                              (- (frame-height) 3))
        (set-buffer-modified-p nil)))))

(defun lusty-buffer-explorer-matches (text)
  (let* ((buffers (lusty-filter-buffers (buffer-list))))

  (loop for item in lst
        maximizing (length item)))

;; For performance, trim the entries if we can prove we can't fit them all.
(defun lusty-truncate-entries (entries)
  (let* ((lusty-buffer (get-buffer-create lusty-buffer-name))
         (max-possibly-displayable-entries
