diff --git a/emacs/.emacs.d/init/oni-eshell-init.org b/emacs/.emacs.d/init/oni-eshell-init.org index 143c140..2e77ae1 100644 --- a/emacs/.emacs.d/init/oni-eshell-init.org +++ b/emacs/.emacs.d/init/oni-eshell-init.org @@ -23,3 +23,23 @@ 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