     (delete-char arg)))
 
 ;;;###autoload
-(defun +eshell/split ()
+(defun +eshell/split-below ()
+  "Create a new eshell window below the current one."
   (interactive)
   (select-window (split-window-vertically))
   (+eshell/open))
 
 ;;;###autoload
-(defun +eshell/vsplit ()
+(defun +eshell/split-right ()
+  "Create a new eshell window to the right of the current one."
   (interactive)
   (select-window (split-window-horizontally))
   (+eshell/open))

  (let ((buf (+eshell-get-or-create-buffer)))
    (with-current-buffer buf
      (unless (eq major-mode 'eshell-mode) (eshell-mode)))
    (if (eq major-mode 'eshell-mode)
        (pop-to-buffer buf)
      (switch-to-buffer buf))
    (when command
      (+eshell-run-command command))))


;;
;; Library
;;

(defun +eshell--add-buffer (buf)
  (ring-remove+insert+extend +eshell-buffers buf))

(defun +eshell--remove-buffer (buf)
  (when-let* ((idx (ring-member +eshell-buffers buf)))
    (ring-remove +eshell-buffers idx)))

(defun +eshell--current-git-branch ()
  (let ((branch (car (cl-loop for match in (split-string (shell-command-to-string "git branch") "\n")
