(use-package eshell :commands eshell :bind ("C-c a s e" . eshell) :config (eval-when-compile (defvar eshell-prompt-regexp)) (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) (setq company-idle-delay nil) (bind-keys :map eshell-mode-map ("C-d" . b/eshell-quit-or-delete-char) ("C-S-l" . b/eshell-clear) ("M-r" . counsel-esh-history) ;; ([tab] . company-complete) :map eshell-hist-mode-map ("M-r" . counsel-esh-history))) (setq eshell-prompt-regexp "\\(.*\n\\)*[$#] " eshell-prompt-function (lambda () (concat (propertize (format "%s@%s:" (user-login-name) (system-name)) 'face 'default) (propertize (abbreviate-file-name default-directory) 'face 'font-lock-comment-face) (propertize "\n" 'face 'default) (if (= (user-uid) 0) (propertize "#" 'face 'red) (propertize "$" 'face 'default)) (propertize " " 'face 'default)))) :hook (eshell-mode . b/eshell-setup) :custom (eshell-hist-ignoredups t) (eshell-input-filter 'eshell-input-filter-initial-space)) (provide 'bandali-eshell)