blob: 1dd87737535ba7619837e5b484ca85acc48a15c3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
;; Eshell settings
(eval-when-compile
'(load "init.el"))
(eval-after-load "em-term"
'(add-to-list 'eshell-visual-commands
"unison"))
(defun oni:eshell-mode-func ()
"Function for `eshell-mode-hook'."
(setq truncate-lines nil))
(defun oni:eshell-prompt-function ()
(let ((status (if (zerop eshell-last-command-status) ?+ ?-))
(hostname (shell-command-to-string "hostname"))
(dir (abbreviate-file-name (eshell/pwd)))
(branch
(shell-command-to-string
"git branch --contains HEAD 2>/dev/null | sed -e '/^[^*]/d'"))
(userstatus (if (zerop (user-uid)) ?# ?$)))
(concat
(propertize (char-to-string status)
'face `(:foreground ,(if (= status ?+)
(oni:color chameleon-1)
(oni:color scarlet-red-2))))
" "
(propertize (substring hostname 0 -1) 'face 'mode-line-buffer-id)
" "
(propertize (oni:shorten-dir dir) 'face 'font-lock-string-face)
" "
(propertize (when (not (string= branch ""))
;; Cut off "* " and "\n"
(substring branch 2 -1))
'face 'font-lock-function-name-face)
" \n"
(propertize (char-to-string userstatus)
'face `(:foreground ,(oni:color sky-blue-1)))
"> ")))
;;;###autoload
(defun oni:raise-eshell ()
"Start or switch back to `eshell'. Also change directories to
current working directory."
(interactive)
(let ((dir (file-name-directory
(or (buffer-file-name) "~/")))
(hasfile (not (eq (buffer-file-name) nil))))
(eshell)
(if (and hasfile (eq eshell-process-list nil))
(progn
(eshell/cd dir)
(eshell-reset)))))
(defun oni:shorten-dir (dir)
"Shorten a directory, (almost) like fish does it."
(while (string-match "\\(/\\.?.\\)[^/]+/" dir)
(setq dir (replace-match "\\1/" nil nil dir)))
dir)
(setq eshell-prompt-regexp "^[#$]> ")
(setq eshell-highlight-prompt nil)
(setq eshell-prompt-function 'oni:eshell-prompt-function)
(add-hook 'eshell-mode-hook 'oni:eshell-mode-func)
|