+ (eval-when-compile
+ (defvar eshell-prompt-regexp)
+ (declare-function eshell-life-is-too-much "esh-mode")
+ (declare-function eshell-send-input "esh-mode"
+ (&optional use-region queue-p no-newline)))
+ (defun b/eshell-quit-or-delete-char (arg)
+ (interactive "p")
+ (if (and (eolp) (looking-back eshell-prompt-regexp nil))
+ (eshell-life-is-too-much)
+ (delete-char arg)))
+ (defun b/eshell-clear ()
+ (interactive)
+ (let ((inhibit-read-only t))
+ (erase-buffer))
+ (eshell-send-input))
+ (defun b/eshell-setup ()
+ (make-local-variable 'company-idle-delay)
+ (defvar company-idle-delay)
+ (eval-when-compile
+ (defvar eshell-mode-map)
+ (defvar eshell-hist-mode-map))
+ (setq company-idle-delay nil)
+ ;; local key bindings
+ (define-key eshell-mode-map (kbd "C-d")
+ #'b/eshell-quit-or-delete-char)
+ (define-key eshell-mode-map (kbd "C-S-l")
+ #'b/eshell-clear)
+ (define-key eshell-mode-map (kbd "M-r")
+ #'counsel-esh-history)
+ ;; (define-key eshell-mode-map [tab]
+ ;; #'company-complete)
+ (define-key eshell-hist-mode-map (kbd "M-r")
+ #'counsel-esh-history)))
+;; global key bindings
+(global-set-key (kbd "C-c a s e") #'eshell)
+;; hooks
+(add-hook 'eshell-mode-hook #'b/eshell-setup)