49 lines
1.6 KiB
EmacsLisp
49 lines
1.6 KiB
EmacsLisp
;; -*- lexical-binding: t; -*-
|
|
|
|
(use-package eshell
|
|
:straight (:type built-in)
|
|
:config
|
|
;; Easy binding to get an eshell
|
|
(defun open-eshell (&optional arg)
|
|
(interactive "P")
|
|
(if (and (fboundp 'projectile-project-root)
|
|
(projectile-project-root))
|
|
(projectile-run-eshell arg)
|
|
(eshell arg)))
|
|
|
|
;; Actually clear the eshell buffer
|
|
(defun clear-eshell (&optional prefix)
|
|
(interactive)
|
|
(let ((input (eshell-get-old-input)))
|
|
(eshell/clear-scrollback)
|
|
(eshell-emit-prompt)
|
|
(insert input)))
|
|
(add-hook 'eshell-mode-hook
|
|
(lambda () (general-def eshell-mode-map "C-c C-o" #'clear-eshell)))
|
|
|
|
;; Gotta have a good prompt
|
|
(defun jdormit-eshell-prompt ()
|
|
(let ((branch (magit-name-local-branch "HEAD")))
|
|
(format "%s%s"
|
|
(if branch (format "(%s) " branch) "")
|
|
(concat (abbreviate-file-name (eshell/pwd))
|
|
" "
|
|
(propertize
|
|
(if (= (user-uid) 0) "#" "λ")
|
|
'face `(:foreground "#859900"))
|
|
" "))))
|
|
|
|
(setq jdormit-eshell-prompt-regex "^[^#λ\n]* [#λ] ")
|
|
(setq eshell-prompt-function 'jdormit-eshell-prompt)
|
|
(setq eshell-prompt-regexp jdormit-eshell-prompt-regex)
|
|
|
|
;; Load dir-locals when switching directories
|
|
(add-hook 'eshell-mode-hook #'hack-dir-local-variables-non-file-buffer)
|
|
(add-hook 'eshell-after-prompt-hook #'hack-dir-local-variables-non-file-buffer)
|
|
:general
|
|
(leader-map "'" #'open-eshell)
|
|
:custom
|
|
(eshell-cmpl-cycle-completions nil))
|
|
|
|
(provide 'init-eshell)
|