aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--emacs/.emacs.d/init/oni-eshell-init.org20
1 files changed, 20 insertions, 0 deletions
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