dotfiles/emacs/.emacs.d/init/oni-eshell-init.org
Tom Willemse c8f73dedb2 Fix eshell keybinding
For some reason the ‘eshell-mode-map’ isn’t defined the first time the
‘eshell-load-hook’ runs.
2016-11-09 14:58:56 +01:00

1.4 KiB

Eshell configuration

  (require 'eshell)
  (require 'em-prompt)

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.

  (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)

Show the status of each command in the fringe of the eshell buffer.

  (add-hook 'eshell-mode-hook 'eshell-fringe-status-mode)

Close the buffer when C-d is pressed and we're at the end of the buffer.

  (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)