blob: e1787fe02affd32b9b99e2b85227e2d79d339b7b [file] [log] [blame]
Travis Swicegoodb524bb62012-03-26 11:19:38 -05001# Helper function loading various enable-able files
2function _load_bash_it_files() {
Nils Winkler95ce5482012-05-22 09:33:59 +02003 subdirectory="$1"
4 if [ ! -d "${BASH_IT}/${subdirectory}/enabled" ]
Travis Swicegoodb524bb62012-03-26 11:19:38 -05005 then
6 continue
7 fi
Nils Winkler95ce5482012-05-22 09:33:59 +02008 FILES="${BASH_IT}/${subdirectory}/enabled/*.bash"
Travis Swicegoodb524bb62012-03-26 11:19:38 -05009 for config_file in $FILES
10 do
11 if [ -e "${config_file}" ]; then
12 source $config_file
13 fi
14 done
15}
16
17# Function for reloading aliases
18function reload_aliases() {
19 _load_bash_it_files "aliases"
20}
21
22# Function for reloading auto-completion
23function reload_completion() {
24 _load_bash_it_files "completion"
25}
26
27# Function for reloading plugins
28function reload_plugins() {
29 _load_bash_it_files "plugins"
30}
Erich Smith254d4452012-05-11 14:25:24 -040031
Nils Winklerbe209722012-05-23 09:24:42 +020032bash-it ()
Nils Winkler1f558e22012-05-21 13:24:49 +020033{
Nils Winklerbe209722012-05-23 09:24:42 +020034 about 'bash-it help and maintenance'
35 param '1: verb [one of: help | show | enable | disable ]'
36 param '2: component type [one of: alias(es) | completion(s) | plugin(s) ]'
37 param '3: specific component [optional]'
38 example '$ bash-it show plugins'
39 example '$ bash-it help aliases'
40 example '$ bash-it enable plugin git'
41 example '$ bash-it disable alias hg'
42 typeset verb=${1:-}
43 shift
44 typeset component=${1:-}
45 shift
46 typeset func
47 case $verb in
48 show)
49 func=_bash-it-$component;;
50 enable)
51 func=_enable-$component;;
52 disable)
53 func=_disable-$component;;
54 help)
55 func=_help-$component;;
56 *)
57 reference bash-it
58 return;;
59 esac
60
61 # pluralize component if necessary
62 if ! _is_function $func; then
63 if _is_function ${func}s; then
64 func=${func}s
65 else
66 if _is_function ${func}es; then
67 func=${func}es
68 else
69 echo "oops! $component is not a valid option!"
70 reference bash-it
71 return
72 fi
73 fi
74 fi
75 $func $*
76}
77
78_is_function ()
79{
80 _about 'sets $? to true if parameter is the name of a function'
81 _param '1: name of alleged function'
82 _group 'lib'
83 [ -n "$(type -a $1 2>/dev/null | grep 'is a function')" ]
84}
85
86_bash-it-aliases ()
87{
88 _about 'summarizes available bash_it aliases'
89 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -040090
Nils Winkler1f558e22012-05-21 13:24:49 +020091 _bash-it-describe "aliases" "an" "alias" "Alias"
92}
93
Nils Winklerbe209722012-05-23 09:24:42 +020094_bash-it-completions ()
Nils Winkler1f558e22012-05-21 13:24:49 +020095{
Nils Winklerbe209722012-05-23 09:24:42 +020096 _about 'summarizes available bash_it completions'
97 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -040098
Nils Winkler1f558e22012-05-21 13:24:49 +020099 _bash-it-describe "completion" "a" "completion" "Completion"
100}
101
Nils Winklerbe209722012-05-23 09:24:42 +0200102_bash-it-plugins ()
Erich Smith254d4452012-05-11 14:25:24 -0400103{
Nils Winklerbe209722012-05-23 09:24:42 +0200104 _about 'summarizes available bash_it plugins'
105 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400106
Nils Winkler1f558e22012-05-21 13:24:49 +0200107 _bash-it-describe "plugins" "a" "plugin" "Plugin"
108}
109
110_bash-it-describe ()
111{
Nils Winkler95ce5482012-05-22 09:33:59 +0200112 _about 'summarizes available bash_it components'
113 _param '1: subdirectory'
114 _param '2: preposition'
115 _param '3: file_type'
116 _param '4: column_header'
117 _example '$ _bash-it-describe "plugins" "a" "plugin" "Plugin"'
Nils Winkler1f558e22012-05-21 13:24:49 +0200118
Nils Winkler95ce5482012-05-22 09:33:59 +0200119 subdirectory="$1"
Nils Winkler1f558e22012-05-21 13:24:49 +0200120 preposition="$2"
Nils Winkler95ce5482012-05-22 09:33:59 +0200121 file_type="$3"
Nils Winkler1f558e22012-05-21 13:24:49 +0200122 column_header="$4"
Erich Smith254d4452012-05-11 14:25:24 -0400123
124 typeset f
125 typeset enabled
Nils Winkler1f558e22012-05-21 13:24:49 +0200126 printf "%-20s%-10s%s\n" "$column_header" 'Enabled?' 'Description'
Nils Winkler95ce5482012-05-22 09:33:59 +0200127 for f in $BASH_IT/$subdirectory/available/*.bash
Erich Smith254d4452012-05-11 14:25:24 -0400128 do
Nils Winkler95ce5482012-05-22 09:33:59 +0200129 if [ -e $BASH_IT/$subdirectory/enabled/$(basename $f) ]; then
Erich Smith254d4452012-05-11 14:25:24 -0400130 enabled='x'
131 else
132 enabled=' '
133 fi
Nils Winkler95ce5482012-05-22 09:33:59 +0200134 printf "%-20s%-10s%s\n" "$(basename $f | cut -d'.' -f1)" " [$enabled]" "$(cat $f | metafor about-$file_type)"
Erich Smith254d4452012-05-11 14:25:24 -0400135 done
Nils Winkler95ce5482012-05-22 09:33:59 +0200136 printf '\n%s\n' "to enable $preposition $file_type, do:"
Nils Winklere82991b2012-05-23 09:31:35 +0200137 printf '%s\n' "$ bash-it enable $file_type <$file_type name> -or- $ bash-it enable $file_type all"
Nils Winkler95ce5482012-05-22 09:33:59 +0200138 printf '\n%s\n' "to disable $preposition $file_type, do:"
Nils Winklere82991b2012-05-23 09:31:35 +0200139 printf '%s\n' "$ bash-it disable $file_type <$file_type name> -or- $ bash-it disable $file_type all"
Erich Smith254d4452012-05-11 14:25:24 -0400140}
141
Nils Winklerbe209722012-05-23 09:24:42 +0200142_disable-plugin ()
Erich Smith254d4452012-05-11 14:25:24 -0400143{
Nils Winklerbe209722012-05-23 09:24:42 +0200144 _about 'disables bash_it plugin'
145 _param '1: plugin name'
146 _example '$ disable-plugin rvm'
147 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400148
Nils Winkler1f558e22012-05-21 13:24:49 +0200149 _disable-thing "plugins" "plugin" $1
150}
Erich Smith254d4452012-05-11 14:25:24 -0400151
Nils Winklerbe209722012-05-23 09:24:42 +0200152_disable-alias ()
Nils Winkler1f558e22012-05-21 13:24:49 +0200153{
Nils Winklerbe209722012-05-23 09:24:42 +0200154 _about 'disables bash_it alias'
155 _param '1: alias name'
156 _example '$ disable-alias git'
157 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400158
Nils Winkler1f558e22012-05-21 13:24:49 +0200159 _disable-thing "aliases" "alias" $1
160}
161
Nils Winklerbe209722012-05-23 09:24:42 +0200162_disable-completion ()
Nils Winkler1f558e22012-05-21 13:24:49 +0200163{
Nils Winklerbe209722012-05-23 09:24:42 +0200164 _about 'disables bash_it completion'
165 _param '1: completion name'
166 _example '$ disable-completion git'
167 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400168
Nils Winkler1f558e22012-05-21 13:24:49 +0200169 _disable-thing "completion" "completion" $1
170}
171
172_disable-thing ()
173{
Nils Winkler95ce5482012-05-22 09:33:59 +0200174 _about 'disables a bash_it component'
175 _param '1: subdirectory'
176 _param '2: file_type'
177 _param '3: file_entity'
178 _example '$ _disable-thing "plugins" "plugin" "ssh"'
179
Erich Smith961c9142012-05-21 23:55:31 -0400180 subdirectory="$1"
181 file_type="$2"
182 file_entity="$3"
183
Nils Winkler1f558e22012-05-21 13:24:49 +0200184 if [ -z "$file_entity" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200185 reference "disable-$file_type"
Erich Smith254d4452012-05-11 14:25:24 -0400186 return
187 fi
Erich Smith08e439c2012-05-13 08:37:31 -0400188
Nils Winkler1f558e22012-05-21 13:24:49 +0200189 if [ "$file_entity" = "all" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200190 typeset f $file_type
191 for f in $BASH_IT/$subdirectory/available/*.bash
Erich Smith08e439c2012-05-13 08:37:31 -0400192 do
193 plugin=$(basename $f)
Nils Winkler95ce5482012-05-22 09:33:59 +0200194 if [ -e $BASH_IT/$subdirectory/enabled/$plugin ]; then
195 rm $BASH_IT/$subdirectory/enabled/$(basename $plugin)
Erich Smith08e439c2012-05-13 08:37:31 -0400196 fi
197 done
198 else
Nils Winkler95ce5482012-05-22 09:33:59 +0200199 typeset plugin=$(command ls $BASH_IT/$subdirectory/enabled/$file_entity.*bash 2>/dev/null | head -1)
Nils Winkler1f558e22012-05-21 13:24:49 +0200200 if [ -z "$plugin" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200201 printf '%s\n' "sorry, that does not appear to be an enabled $file_type."
Erich Smith08e439c2012-05-13 08:37:31 -0400202 return
203 fi
Nils Winkler95ce5482012-05-22 09:33:59 +0200204 rm $BASH_IT/$subdirectory/enabled/$(basename $plugin)
Erich Smith08e439c2012-05-13 08:37:31 -0400205 fi
206
Nils Winkler1f558e22012-05-21 13:24:49 +0200207 printf '%s\n' "$file_entity disabled."
Erich Smith08e439c2012-05-13 08:37:31 -0400208}
209
Nils Winklerbe209722012-05-23 09:24:42 +0200210_enable-plugin ()
Erich Smith08e439c2012-05-13 08:37:31 -0400211{
Nils Winklerbe209722012-05-23 09:24:42 +0200212 _about 'enables bash_it plugin'
213 _param '1: plugin name'
214 _example '$ enable-plugin rvm'
215 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400216
Nils Winkler1f558e22012-05-21 13:24:49 +0200217 _enable-thing "plugins" "plugin" $1
218}
Erich Smith08e439c2012-05-13 08:37:31 -0400219
Nils Winklerbe209722012-05-23 09:24:42 +0200220_enable-alias ()
Nils Winkler1f558e22012-05-21 13:24:49 +0200221{
Nils Winklerbe209722012-05-23 09:24:42 +0200222 _about 'enables bash_it alias'
223 _param '1: alias name'
224 _example '$ enable-alias git'
225 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400226
Nils Winkler1f558e22012-05-21 13:24:49 +0200227 _enable-thing "aliases" "alias" $1
228}
229
Nils Winklerbe209722012-05-23 09:24:42 +0200230_enable-completion ()
Nils Winkler1f558e22012-05-21 13:24:49 +0200231{
Nils Winklerbe209722012-05-23 09:24:42 +0200232 _about 'enables bash_it completion'
233 _param '1: completion name'
234 _example '$ enable-completion git'
235 _group 'lib'
Erich Smith961c9142012-05-21 23:55:31 -0400236
Nils Winkler1f558e22012-05-21 13:24:49 +0200237 _enable-thing "completion" "completion" $1
238}
239
240_enable-thing ()
241{
Erich Smith961c9142012-05-21 23:55:31 -0400242 cite _about _param _example
Nils Winkler95ce5482012-05-22 09:33:59 +0200243 _about 'enables a bash_it component'
244 _param '1: subdirectory'
245 _param '2: file_type'
246 _param '3: file_entity'
247 _example '$ _enable-thing "plugins" "plugin" "ssh"'
248
Erich Smith961c9142012-05-21 23:55:31 -0400249 subdirectory="$1"
250 file_type="$2"
251 file_entity="$3"
252
Nils Winkler1f558e22012-05-21 13:24:49 +0200253 if [ -z "$file_entity" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200254 reference "enable-$file_type"
Erich Smith08e439c2012-05-13 08:37:31 -0400255 return
256 fi
257
Nils Winkler1f558e22012-05-21 13:24:49 +0200258 if [ "$file_entity" = "all" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200259 typeset f $file_type
260 for f in $BASH_IT/$subdirectory/available/*.bash
Erich Smith08e439c2012-05-13 08:37:31 -0400261 do
262 plugin=$(basename $f)
Nils Winkler95ce5482012-05-22 09:33:59 +0200263 if [ ! -h $BASH_IT/$subdirectory/enabled/$plugin ]; then
264 ln -s $BASH_IT/$subdirectory/available/$plugin $BASH_IT/$subdirectory/enabled/$plugin
Erich Smith08e439c2012-05-13 08:37:31 -0400265 fi
266 done
267 else
Nils Winkler95ce5482012-05-22 09:33:59 +0200268 typeset plugin=$(command ls $BASH_IT/$subdirectory/available/$file_entity.*bash 2>/dev/null | head -1)
Erich Smith08e439c2012-05-13 08:37:31 -0400269 if [ -z "$plugin" ]; then
Nils Winkler95ce5482012-05-22 09:33:59 +0200270 printf '%s\n' "sorry, that does not appear to be an available $file_type."
Erich Smith08e439c2012-05-13 08:37:31 -0400271 return
272 fi
273
274 plugin=$(basename $plugin)
Nils Winkler95ce5482012-05-22 09:33:59 +0200275 if [ -e $BASH_IT/$subdirectory/enabled/$plugin ]; then
Nils Winkler1f558e22012-05-21 13:24:49 +0200276 printf '%s\n' "$file_entity is already enabled."
Erich Smith08e439c2012-05-13 08:37:31 -0400277 return
278 fi
279
Nils Winkler95ce5482012-05-22 09:33:59 +0200280 ln -s $BASH_IT/$subdirectory/available/$plugin $BASH_IT/$subdirectory/enabled/$plugin
Erich Smith08e439c2012-05-13 08:37:31 -0400281 fi
282
Nils Winkler1f558e22012-05-21 13:24:49 +0200283 printf '%s\n' "$file_entity enabled."
Erich Smith254d4452012-05-11 14:25:24 -0400284}
285
Nils Winklerbe209722012-05-23 09:24:42 +0200286_help-aliases()
Erich Smith961c9142012-05-21 23:55:31 -0400287{
Nils Winklerbe209722012-05-23 09:24:42 +0200288 _about 'shows help for all aliases, or a specific alias group'
289 _param '1: optional alias group'
290 _example '$ alias-help'
291 _example '$ alias-help git'
Erich Smith961c9142012-05-21 23:55:31 -0400292
293 if [ -n "$1" ]; then
Nils Winklerbe209722012-05-23 09:24:42 +0200294 cat $BASH_IT/aliases/available/$1.aliases.bash | metafor alias | sed "s/$/'/"
Erich Smith961c9142012-05-21 23:55:31 -0400295 else
296 typeset f
297 for f in $BASH_IT/aliases/enabled/*
298 do
299 typeset file=$(basename $f)
300 printf '\n\n%s:\n' "${file%%.*}"
301 # metafor() strips trailing quotes, restore them with sed..
302 cat $f | metafor alias | sed "s/$/'/"
303 done
304 fi
305}
306
Nils Winklerbe209722012-05-23 09:24:42 +0200307_help-plugins()
Erich Smith254d4452012-05-11 14:25:24 -0400308{
Nils Winklerbe209722012-05-23 09:24:42 +0200309 _about 'summarize all functions defined by enabled bash-it plugins'
310 _group 'lib'
Erich Smith254d4452012-05-11 14:25:24 -0400311
Erich Smitha825c5f2012-05-15 14:25:42 -0400312 # display a brief progress message...
313 printf '%s' 'please wait, building help...'
314 typeset grouplist=$(mktemp /tmp/grouplist.XXXX)
315 typeset func
316 for func in $(typeset_functions)
Erich Smith254d4452012-05-11 14:25:24 -0400317 do
Erich Smitha825c5f2012-05-15 14:25:42 -0400318 typeset group="$(typeset -f $func | metafor group)"
319 if [ -z "$group" ]; then
320 group='misc'
321 fi
322 typeset about="$(typeset -f $func | metafor about)"
323 letterpress "$about" $func >> $grouplist.$group
324 echo $grouplist.$group >> $grouplist
Erich Smith254d4452012-05-11 14:25:24 -0400325 done
Erich Smitha825c5f2012-05-15 14:25:42 -0400326 # clear progress message
327 printf '\r%s\n' ' '
328 typeset group
329 typeset gfile
330 for gfile in $(cat $grouplist | sort | uniq)
331 do
332 printf '%s\n' "${gfile##*.}:"
333 cat $gfile
334 printf '\n'
335 rm $gfile 2> /dev/null
336 done | less
337 rm $grouplist 2> /dev/null
Erich Smith254d4452012-05-11 14:25:24 -0400338}
339
340all_groups ()
341{
Erich Smith08e439c2012-05-13 08:37:31 -0400342 about 'displays all unique metadata groups'
343 group 'lib'
Erich Smith254d4452012-05-11 14:25:24 -0400344
345 typeset func
346 typeset file=$(mktemp /tmp/composure.XXXX)
347 for func in $(typeset_functions)
348 do
349 typeset -f $func | metafor group >> $file
350 done
351 cat $file | sort | uniq
352 rm $file
353}