[emacs] customize the eshell prompt
[~bandali/configs] / init.org
index 5d5a624..127926d 100644 (file)
--- a/init.org
+++ b/init.org
@@ -355,7 +355,7 @@ in my shell.
   (mapc #'disable-theme custom-enabled-themes))
 #+end_src
 
   (mapc #'disable-theme custom-enabled-themes))
 #+end_src
 
-** Server
+** COMMENT Server
 
 Start server if not already running. Alternatively, can be done by
 issuing =emacs --daemon= in the terminal, which can be automated with
 
 Start server if not already running. Alternatively, can be done by
 issuing =emacs --daemon= in the terminal, which can be automated with
@@ -371,7 +371,7 @@ See [[https://www.gnu.org/software/emacs/manual/html_node/emacs/Emacs-Server.htm
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
   :config (or (server-running-p) (server-mode)))
 #+end_src
 
-** Unicode support
+** COMMENT Unicode support
 
 Font stack with better unicode support, around =Ubuntu Mono= and
 =Hack=.
 
 Font stack with better unicode support, around =Ubuntu Mono= and
 =Hack=.
@@ -1773,6 +1773,46 @@ Hopefully temporary.
   (setq alert-default-style 'notifier))
 #+end_src
 
   (setq alert-default-style 'notifier))
 #+end_src
 
+** hl-todo
+
+#+begin_src emacs-lisp
+(use-package hl-todo
+  :defer 4
+  :config
+  (global-hl-todo-mode))
+#+end_src
+
+** shrink-path
+
+#+begin_src emacs-lisp
+(use-package shrink-path
+  :after eshell
+  :config
+  (setq eshell-prompt-regexp "\\(.*\n\\)*λ "
+        eshell-prompt-function #'+eshell/prompt)
+
+  (defun +eshell/prompt ()
+    (let ((base/dir (shrink-path-prompt default-directory)))
+      (concat (propertize (car base/dir)
+                          'face 'font-lock-comment-face)
+              (propertize (cdr base/dir)
+                          'face 'font-lock-constant-face)
+              (propertize (+eshell--current-git-branch)
+                          'face 'font-lock-function-name-face)
+              "\n"
+              (propertize "λ" 'face 'eshell-prompt-face)
+              ;; needed for the input text to not have prompt face
+              (propertize " " 'face 'default))))
+
+  (defun +eshell--current-git-branch ()
+    (let ((branch (car (loop for match in (split-string (shell-command-to-string "git branch") "\n")
+                             when (string-match "^\*" match)
+                             collect match))))
+      (if (not (eq branch nil))
+          (concat " " (substring branch 2))
+        ""))))
+#+end_src
+
 * Email
 
 #+begin_src emacs-lisp
 * Email
 
 #+begin_src emacs-lisp