#+TITLE: Eshell configuration #+BEGIN_SRC emacs-lisp (require 'eshell) (require 'em-prompt) #+END_SRC Truncate the eshell buffer when it gets larger than =eshell-buffer-maximum-lines= number of lines. For some reason I have to use the =eshell-load-hook= instead of just relying on ~eshell.el~ and ~esh-mode.el~ being loaded because it seems that =with-eval-after-load= loads this file before ~eshell.el~ is actually loaded. #+BEGIN_SRC emacs-lisp (defun oni:enable-truncating-eshell-buffers () (add-to-list 'eshell-output-filter-functions 'eshell-truncate-buffer)) (add-hook 'eshell-load-hook #'oni:enable-truncating-eshell-buffers) #+END_SRC Show the status of each command in the fringe of the eshell buffer. #+BEGIN_SRC emacs-lisp (add-hook 'eshell-mode-hook 'eshell-fringe-status-mode) #+END_SRC Close the buffer when C-d is pressed and we're at the end of the buffer. #+BEGIN_SRC emacs-lisp (defun oni:eshell-C-d () "Call `delete-char' or close the buffer if it fails." (interactive) (condition-case err (call-interactively #'delete-char) (error (if (and (eq (car err) 'end-of-buffer) (looking-back eshell-prompt-regexp nil)) (kill-buffer) (signal (car err) (cdr err)))))) (defun oni:set-eshell-C-d () (define-key eshell-mode-map (kbd "C-d") #'oni:eshell-C-d)) (add-hook 'eshell-first-time-mode-hook #'oni:set-eshell-C-d) #+END_SRC