blob: c9be093c62676d3af58691919454be70119f6a1d (
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
(setq eshell-history-size 512)
(setq eshell-prompt-regexp "^.*> ")
(require 'em-hist) ; So the history vars are defined
(if (boundp 'eshell-save-history-on-exit)
(setq eshell-save-history-on-exit t)) ; Don't ask, just save
(if (boundp 'eshell-ask-to-save-history)
(setq eshell-ask-to-save-history 'always)) ; For older(?) version
(defun eshell/ef (fname-regexp &optional dir)
(ef fname-regexp (or dir default-directory)))
;;; ---- path manipulation
(defun pwd-repl-home (pwd)
(interactive)
(let* ((home (expand-file-name (getenv "HOME")))
(home-len (length home)))
(if (and
(>= (length pwd) home-len)
(equal home (substring pwd 0 home-len)))
(concat "~" (substring pwd home-len))
pwd)))
(defun curr-dir-git-branch-string (pwd)
"Returns current git branch as a string, or the empty string if
PWD is not in a git repo (or the git command is not found)."
(interactive)
(when (and (eshell-search-path "git")
(locate-dominating-file pwd ".git"))
(let ((git-output (shell-command-to-string (concat "git branch | grep '\\*' | sed -e 's/^\\* //'"))))
(concat "[g:"
(if (> (length git-output) 0)
(substring git-output 0 -1)
"(no branch)")
"] "))))
(defun curr-dir-svn-string (pwd)
(interactive)
(when (and (eshell-search-path "svn")
(locate-dominating-file pwd ".svn"))
(concat "[s:"
(cond ((string-match-p "/trunk\\(/.*\\)?" pwd)
"trunk")
((string-match "/branches/\\([^/]+\\)\\(/.*\\)?" pwd)
(match-string 1 pwd))
(t
"(no branch)"))
"] ")))
(setq eshell-prompt-function
(lambda ()
(concat
(or (curr-dir-git-branch-string (eshell/pwd))
(curr-dir-svn-string (eshell/pwd)))
((lambda (p-lst)
(if (> (length p-lst) 3)
(concat
(mapconcat (lambda (elm) (if (zerop (length elm)) ""
(substring elm 0 1)))
(butlast p-lst 3)
"/")
"/"
(mapconcat (lambda (elm) elm)
(last p-lst 3)
"/"))
(mapconcat (lambda (elm) elm)
p-lst
"/")))
(split-string (pwd-repl-home (eshell/pwd)) "/"))
"> ")))
;; ; From http://www.emacswiki.org/cgi-bin/wiki.pl/EshellWThirtyTwo
;; ; Return nil, otherwise you'll see the return from w32-shell-execute
;; (defun eshell/open (file)
;; "Invoke (w32-shell-execute \"Open\" FILE) and substitute slashes for
;; backslashes"
;; (w32-shell-execute "Open" (substitute ?\\ ?/ (expand-file-name file)))
;; nil)
(add-hook 'eshell-mode-hook
(lambda ()
(local-set-key "\C-c\C-q" 'eshell-kill-process)
(local-set-key "\C-c\C-k" 'compile)))
|