diff options
-rw-r--r-- | emacs/custom/fcuny-eshell.el | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/emacs/custom/fcuny-eshell.el b/emacs/custom/fcuny-eshell.el index a3cf178..1e0d994 100644 --- a/emacs/custom/fcuny-eshell.el +++ b/emacs/custom/fcuny-eshell.el @@ -50,6 +50,38 @@ (magit-status (pop args) nil) (eshell/echo)) ;; The echo command suppresses output +(defun fcuny/shorten-path (path &optional max-len) + "Return a potentially trimmed-down version of the directory PATH, replacing +parent directories with their initial characters to try to get the character +length of PATH (sans directory slashes) down to MAX-LEN." + (let* ((components (split-string (abbreviate-file-name path) "/")) + (max-len (or max-len 30)) + (len (+ (1- (length components)) + (cl-reduce '+ components :key 'length))) + (str "")) + (while (and (> len max-len) + (cdr components)) + (setq str (concat str + (cond ((= 0 (length (car components))) "/") + ((= 1 (length (car components))) + (concat (car components) "/")) + (t + (if (string= "." + (string (elt (car components) 0))) + (concat (substring (car components) 0 2) + "/") + (string (elt (car components) 0) ?/))))) + len (- len (1- (length (car components)))) + components (cdr components))) + (concat str (cl-reduce (lambda (a b) (concat a "/" b)) components)))) + +(defun fcuny/eshell-prompt () + (setq eshell-prompt-regexp "; ") + (concat + (concat (system-name) ":") + (fcuny/shorten-path (eshell/pwd)) + "; ")) + (defun fcuny/eshell-here () "Opens up a new shell in the directory associated with the current buffer's file. The eshell is renamed to match that directory to make @@ -135,6 +167,7 @@ append to it, while separating multiple outputs with (eshell-where-to-jump 'begin) (eshell-review-quick-commands nil) (eshell-smart-space-goes-to-end t) + (eshell-prompt-function 'fcuny/eshell-prompt) (eshell-destroy-buffer-when-process-dies t)) (use-package eshell-bookmark |