/
prompt_N_setup
103 lines (89 loc) · 3.65 KB
/
prompt_N_setup
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# chpwd カレントディレクトリが変更したとき
# periodic プロンプトを表示するたびに、$PERIOD秒ごと
# precmd プロンプトを表示する直前
# preexec Enterを押してコマンドを実行する直前
# zshaddhistory コマンドラインがヒストリに追加される直前
# zshexit zshを終了する直前
# zsh_directory_name Dynamic named directoriesによるディレクトリ名変換
#
# PROMPTに[32mを混ぜるとtab補完で崩れる
# %F{000}..%K{000}..%f%k を使う.
pmodload 'helper'
function char(){
echo $(printf "\x$(printf '%x' $1)")
}
function colorize(){
#colorize 0xe3 0xb0 0xc4 0x42 0x98 0xfc 0x1c 0x14 0x9a
fr=$(($@[1]%6))
fg=$(($@[2]%6))
fb=$(($@[3]%6))
for i in `seq 6 $#`; do
kr=$(($@[i-2]%6))
kg=$(($@[i-1]%6))
kb=$(($@[i-0]%6))
[ $(( 2*(fr-kr)**2+4*(fg-kg)**2+3*(fb-kb)**2 )) -ge 70 ] && break
done
F=$((fr*36+fg*6+fb+16))
K=$((kr*36+kg*6+kb+16))
echo -n "%F{$F}%K{$K}"
}
function icon(){
ip=$(echo $SSH_CONNECTION|awk '{print $3}')
if [ -z $ip ] && return
mac=$(ip addr|grep -B 1 $ip|head -1|awk '{print $2}')
s=($(echo $mac|sha256sum|sed 's/\(..\)/0x\1 /g'))
id=$(hostname -I|grep -oP '(?<=192.168.0.1)\d*')
[ -z "$id" ] && id=$(char $((s[0]%94+33)))$(char $((s[1]%94+33)))
echo -n $(colorize $s[3,17])$id[1]$(colorize $s[18,32])$id[2]%f%k
}
icon=$(icon)
function prompt_N_precmd {
local EXIT_CODE=$?
vcs_info
_pwd=$(prompt-pwd)
local block="\
⠀⢀⠠⢠⠐⢐⠰⢰⠈⢈⠨⢨⠘⢘⠸⢸⡀⣀⡠⣠⡐⣐⡰⣰⡈⣈⡨⣨⡘⣘⡸⣸⠄⢄⠤⢤⠔⢔⠴⢴⠌⢌⠬⢬⠜⢜⠼⢼⡄⣄⡤⣤⡔⣔⡴⣴⡌⣌⡬⣬⡜⣜⡼⣼\
⠂⢂⠢⢢⠒⢒⠲⢲⠊⢊⠪⢪⠚⢚⠺⢺⡂⣂⡢⣢⡒⣒⡲⣲⡊⣊⡪⣪⡚⣚⡺⣺⠆⢆⠦⢦⠖⢖⠶⢶⠎⢎⠮⢮⠞⢞⠾⢾⡆⣆⡦⣦⡖⣖⡶⣶⡎⣎⡮⣮⡞⣞⡾⣾\
⠁⢁⠡⢡⠑⢑⠱⢱⠉⢉⠩⢩⠙⢙⠹⢹⡁⣁⡡⣡⡑⣑⡱⣱⡉⣉⡩⣩⡙⣙⡹⣹⠅⢅⠥⢥⠕⢕⠵⢵⠍⢍⠭⢭⠝⢝⠽⢽⡅⣅⡥⣥⡕⣕⡵⣵⡍⣍⡭⣭⡝⣝⡽⣽\
⠃⢃⠣⢣⠓⢓⠳⢳⠋⢋⠫⢫⠛⢛⠻⢻⡃⣃⡣⣣⡓⣓⡳⣳⡋⣋⡫⣫⡛⣛⡻⣻⠇⢇⠧⢧⠗⢗⠷⢷⠏⢏⠯⢯⠟⢟⠿⢿⡇⣇⡧⣧⡗⣗⡷⣷⡏⣏⡯⣯⡟⣟⡿⣿\
"
if [[ $EXIT_CODE -ne 0 ]]; then
ec="%F{red}$block[$((EXIT_CODE+1))]%f"
else
ec=""
fi
}
function +vi-git_status {
# Check for untracked files or updated submodules since vcs_info does not.
if [[ -n $(git ls-files --other --exclude-standard 2> /dev/null) ]]; then
hook_com[unstaged]='%F{red}$%f'
fi
}
function prompt_N_setup {
setopt LOCAL_OPTIONS
unsetopt XTRACE KSH_ARRAYS
prompt_opts=(cr percent subst)
# Load required functions.
autoload -Uz add-zsh-hook
autoload -Uz vcs_info
# Add hook for calling vcs_info before each command.
add-zsh-hook precmd prompt_N_precmd
# Set vcs_info parameters.
zstyle ':vcs_info:*' enable bzr git hg svn
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr '%F{green}$%f' #commitされていないファイルがある
zstyle ':vcs_info:*' unstagedstr '%F{yellow}$%f' #addされていないファイルがある
zstyle ':vcs_info:*' formats ' [%b%c%u]'
zstyle ':vcs_info:*' actionformats " [%b%c%u|%F{cyan}%a%f]"
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b|%F{cyan}%r%f'
zstyle ':vcs_info:git*+set-message:*' hooks git_status
#%(x.true-text.false-text)
# Define prompts.
PROMPT='${icon}${_pwd}${vcs_info_msg_0_}${ec}%F{black}%K{yellow}%(1j.%j.)%f%k '
RPROMPT=''
}
function prompt_N_preview {
echo "preview is undefined"
}
prompt_N_setup "$@"
# vim:ts=2 sw=2