dotfiles/emacs/.emacs.d/init/oni-eshell-init.org

45 lines
1.4 KiB
Org Mode

#+TITLE: Eshell configuration
#+BEGIN_SRC emacs-lisp
(require 'eshell)
#+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-load-hook #'oni:set-eshell-C-d)
#+END_SRC