-
Notifications
You must be signed in to change notification settings - Fork 2
/
pumice.zsh
138 lines (112 loc) · 3.19 KB
/
pumice.zsh
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
function pumice() {
local subcommand=$1
if [ -z $subcommand ]; then
_help
return 1
fi
shift # remove subcommand from arguments
if functions "_$subcommand" >/dev/null; then
"_$subcommand" "$@"
else
echo -e "\e[31mPumice: Unknown command: \e[m\e[33m$subcommand\e[m" 1>&2
return 1
fi
return 0
}
function _bundle() {
local repo=$1
local target=$2
# check arguments is passed correctly
if [[ -z $repo || -z $target ]]; then
echo -e "\e[33mex) pumice bundle ryutamaki/pumice pumice.zsh\e[m" 1>&2
return 1
fi
local repo_replaced_slash=$(echo $repo | sed -e s./.#.g)
local dir="$_PUMICE_PLUGINS_INSTALL_DIRECTORY/$repo_replaced_slash"
if [ ! -d $dir ]; then
git clone "https://github.com/$repo" $dir
fi
if [ -e "$dir/$target" ]; then
source "$dir/$target"
else
echo -e "\e[31mPumice: Target not found: \e[m\e[33m$repo/$target\e[m" 1>&2
return 1
fi
return 0
}
function _fpath() {
local repo=$1
local target=$2
local first_load_flag=false
# check arguments is passed correctly
if [[ -z $repo || -z $target ]]; then
echo -e "\e[33mex) pumice fpath zsh-users/zsh-completions src\e[m" 1>&2
return 1
fi
local repo_replaced_slash=$(echo $repo | sed -e s./.#.g)
local dir="$_PUMICE_PLUGINS_INSTALL_DIRECTORY/$repo_replaced_slash"
if [ ! -d $dir ]; then
git clone "https://github.com/$repo" $dir
$first_load_flag=true
fi
if [ -e "$dir/$target" ]; then
fpath=("$dir/$target" $fpath)
if $first_load_flag; then
rm -f $HOME/.zcompdump
fi
compinit
else
echo -e "\e[31mPumice: Target not found: \e[m\e[33m$repo/$target\e[m" 1>&2
return 1
fi
return 0
}
function _update() {
ls $_PUMICE_PLUGINS_INSTALL_DIRECTORY | sed |
while read repo_dir; do
echo -e "\e[32mPumice: Try to update: $repo_dir\e[m"
cd "$_PUMICE_PLUGINS_INSTALL_DIRECTORY/$repo_dir" && git pull
cd ../
done
return 0
}
function _remove() {
local repo=$1
local repo_replaced_slash=$(echo $repo | sed -e s./.#.g)
local dir="$_PUMICE_PLUGINS_INSTALL_DIRECTORY/$repo_replaced_slash"
if [ -d $dir ]; then
rm -r $dir
else
echo -e "\e[31mPumice: Target directory not found: $repo_replaced_slash\e[m" 1>&2
return 1
fi
return 0
}
function _list() {
ls $_PUMICE_PLUGINS_INSTALL_DIRECTORY | sed |
while read repo_dir; do
echo $repo_dir | sed -e s.#./.g
done
return 0
}
function _help() {
echo 'has NOT implemented yet'
}
function _pumice() {
_values \
'subcommands' \
'bundle[load a plugin]' \
'fpath[load a completion functions]' \
'update[update a plugin]' \
'remove[remove a plugin]' \
'list[list installed plugins]' \
'help[show help]'
}
function _setup_pumice() {
export _PUMICE_PLUGINS_INSTALL_DIRECTORY="$HOME/.pumice"
if [ ! -d $_PUMICE_PLUGINS_INSTALL_DIRECTORY ]; then
mkdir -p $_PUMICE_PLUGINS_INSTALL_DIRECTORY
fi
}
_setup_pumice
compdef _pumice pumice