-
Notifications
You must be signed in to change notification settings - Fork 0
/
.zshprompt
69 lines (59 loc) · 1.77 KB
/
.zshprompt
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
# Simple prompt for ZSH
# by Marcin Rataj (http://lidel.org)
# Updates: http://github.com/lidel/dotfiles/
# License: public domain
#
# vim: ts=4 et sw=4
setprompt () {
setopt prompt_subst
# Check if we can use colors
autoload colors zsh/terminfo
if [[ "$terminfo[colors]" -ge 8 ]]; then
colors
fi
# Indicate Git state: MM?headname
# staged changes - green M
# unstaged changes - red M
# untracked changes - red ?
autoload -Uz vcs_info
zstyle ':vcs_info:*' stagedstr 'M'
zstyle ':vcs_info:*' unstagedstr 'M'
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' actionformats ' %F{3}@%b|%F{1}%a%f'
zstyle ':vcs_info:*' formats ' %F{2}%c%F{1}%u% %F{3}%b%f'
zstyle ':vcs_info:git*+set-message:*' hooks git-untracked
zstyle ':vcs_info:*' enable git
+vi-git-untracked() {
if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \
[[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then
hook_com[unstaged]+='%F{1}?%f'
fi
}
precmd () { vcs_info }
# I want to see hostname only for remote sessions
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
PR_HOST=$HOST
else
case $(ps -o comm= -p $PPID) in
sshd|*/sshd) PR_HOST=$HOST;;
esac
fi
# Decide if we need to set titlebar text.
case $TERM in
xterm*)
PR_TITLEBAR=$'%{\e]0;%(!.[ROOT] .)%n@%m:%~ \a%}'
;;
rxvt*)
PR_TITLEBAR=$'%{\e]2;%(!.[ROOT] .)%n@%m:%~ \a%}'
;;
screen)
PR_TITLEBAR=$'%{\e_screen \005 (\005t) | %(!.[ROOT] .)%n@%m:%~ \e\\%}'
;;
*)
PR_TITLEBAR=''
;;
esac
PROMPT='${(e)PR_TITLEBAR}%(!.%s%{$fg_bold[red]%}root%f%b%s.)%{$fg_bold[black]%}$PR_HOST>%f%b '
RPS1='%(?..%{$fg_bold[red]%}%?%f%b) %{$fg[cyan]%}%25<...<%~%f${vcs_info_msg_0_}'
PS2='%_%{$fg[black]%}>%f '
}