 ;;
 
 (defun +eshell--add-buffer (buf)
-  (ring-remove+insert+extend +eshell-buffers buf))
+  (ring-remove+insert+extend +eshell-buffers buf 'grow))
 
 (defun +eshell--remove-buffer (buf)
   (when-let* ((idx (ring-member +eshell-buffers buf)))

;;;###autoload
(defun +eshell-last-buffer (&optional noerror)
  "Return the last opened eshell buffer."
  (let ((buffer (cl-find-if #'buffer-live-p (ring-elements +eshell-buffers))))
    (cond ((buffer-live-p buffer) buffer)
          (noerror nil)
          ((user-error "No live eshell buffers remaining")))))


;;;###autoload
(defun +eshell|init ()
  "Initialize and track this eshell buffer in `+eshell-buffers'."
  (let ((current-buffer (current-buffer)))
    (dolist (buf (+eshell-buffers))
      (unless (buffer-live-p buf)
        (+eshell--remove-buffer buf)))
    (+eshell--setup-window (get-buffer-window current-buffer))
    (+eshell--add-buffer current-buffer)
    (setq +eshell--last-buffer current-buffer)))

;;;###autoload
(defun +eshell|cleanup ()
