1
1
# shellcheck shell=bash
2
2
# shellcheck disable=SC2034 # Expected behavior for themes.
3
- # shellcheck disable=SC2154 #TODO: fix these all.
4
3
5
4
# Brainy Bash Prompt for Bash-it
6
5
# by MunifTanjim
9
8
# # Parsers ##
10
9
# ############
11
10
12
- ____brainy_top_left_parse () {
13
- ifs_old=" ${IFS} "
14
- IFS=" |"
11
+ function ____brainy_top_left_parse() {
12
+ local ifs_old=" ${IFS} "
13
+ local IFS=" |"
15
14
read -r -a args <<< " $@"
16
15
IFS=" ${ifs_old} "
17
- if [ -n " ${args[3]} " ]; then
16
+ if [[ -n " ${args[3]:- } " ] ]; then
18
17
_TOP_LEFT+=" ${args[2]}${args[3]} "
19
18
fi
20
- _TOP_LEFT+=" ${args[0]}${args[1]} "
21
- if [ -n " ${args[4]} " ]; then
19
+ _TOP_LEFT+=" ${args[0]? }${args[1]? } "
20
+ if [[ -n " ${args[4]:- } " ] ]; then
22
21
_TOP_LEFT+=" ${args[2]}${args[4]} "
23
22
fi
24
23
_TOP_LEFT+=" "
25
24
}
26
25
27
- ____brainy_top_right_parse () {
28
- ifs_old=" ${IFS} "
29
- IFS=" |"
26
+ function ____brainy_top_right_parse() {
27
+ local ifs_old=" ${IFS} "
28
+ local IFS=" |"
30
29
read -r -a args <<< " $@"
31
30
IFS=" ${ifs_old} "
32
31
_TOP_RIGHT+=" "
33
- if [ -n " ${args[3]} " ]; then
32
+ if [ -n " ${args[3]:- } " ]; then
34
33
_TOP_RIGHT+=" ${args[2]}${args[3]} "
35
34
fi
36
- _TOP_RIGHT+=" ${args[0]}${args[1]} "
37
- if [ -n " ${args[4]} " ]; then
35
+ _TOP_RIGHT+=" ${args[0]? }${args[1]? } "
36
+ if [ -n " ${args[4]:- } " ]; then
38
37
_TOP_RIGHT+=" ${args[2]}${args[4]} "
39
38
fi
40
- __TOP_RIGHT_LEN=$(( __TOP_RIGHT_LEN + ${# args[1]} + ${# args[3]} + ${# args[4]} + 1 ))
39
+ __TOP_RIGHT_LEN=" $(( __TOP_RIGHT_LEN + ${# args[1]} + ${# args[3]} + ${# args[4]} + 1 )) "
41
40
(( __SEG_AT_RIGHT += 1 ))
42
41
}
43
42
44
- ____brainy_bottom_parse () {
45
- ifs_old=" ${IFS} "
46
- IFS=" |"
43
+ function ____brainy_bottom_parse() {
44
+ local ifs_old=" ${IFS} "
45
+ local IFS=" |"
47
46
read -r -a args <<< " $@"
48
47
IFS=" ${ifs_old} "
49
- _BOTTOM+=" ${args[0]}${args[1]} "
50
- [ ${# args[1]} -gt 0 ] && _BOTTOM+=" "
48
+ _BOTTOM+=" ${args[0]? }${args[1]? } "
49
+ [[ ${# args[1]} -gt 0 ] ] && _BOTTOM+=" "
51
50
}
52
51
53
- ____brainy_top () {
52
+ function ____brainy_top() {
53
+ local info ___cursor_right ___cursor_adjust seg
54
54
_TOP_LEFT=" "
55
55
_TOP_RIGHT=" "
56
56
__TOP_RIGHT_LEN=0
57
57
__SEG_AT_RIGHT=0
58
58
59
59
for seg in ${___BRAINY_TOP_LEFT} ; do
60
60
info=" $( ___brainy_prompt_" ${seg} " ) "
61
- [ -n " ${info} " ] && ____brainy_top_left_parse " ${info} "
61
+ [[ -n " ${info} " ] ] && ____brainy_top_left_parse " ${info} "
62
62
done
63
63
64
64
___cursor_right=" \033[500C"
65
65
_TOP_LEFT+=" ${___cursor_right} "
66
66
67
67
for seg in ${___BRAINY_TOP_RIGHT} ; do
68
68
info=" $( ___brainy_prompt_" ${seg} " ) "
69
- [ -n " ${info} " ] && ____brainy_top_right_parse " ${info} "
69
+ [[ -n " ${info} " ] ] && ____brainy_top_right_parse " ${info} "
70
70
done
71
71
72
- [ $ __TOP_RIGHT_LEN -gt 0 ] && __TOP_RIGHT_LEN=$(( __TOP_RIGHT_LEN - 1 ))
72
+ [[ ${ __TOP_RIGHT_LEN} -gt 0 ] ] && __TOP_RIGHT_LEN=$(( __TOP_RIGHT_LEN - 1 ))
73
73
___cursor_adjust=" \033[${__TOP_RIGHT_LEN} D"
74
74
_TOP_LEFT+=" ${___cursor_adjust} "
75
75
76
76
printf " %s%s" " ${_TOP_LEFT} " " ${_TOP_RIGHT} "
77
77
}
78
78
79
- ____brainy_bottom () {
79
+ function ____brainy_bottom() {
80
+ local info seg
80
81
_BOTTOM=" "
81
82
for seg in $___BRAINY_BOTTOM ; do
82
83
info=" $( ___brainy_prompt_" ${seg} " ) "
83
- [ -n " ${info} " ] && ____brainy_bottom_parse " ${info} "
84
+ [[ -n " ${info} " ] ] && ____brainy_bottom_parse " ${info} "
84
85
done
85
86
printf " \n%s" " ${_BOTTOM} "
86
87
}
@@ -89,119 +90,119 @@ ____brainy_bottom() {
89
90
# # Segments ##
90
91
# #############
91
92
92
- ___brainy_prompt_user_info () {
93
- color=$bold_blue
94
- if [ " ${THEME_SHOW_SUDO} " == " true" ]; then
93
+ function ___brainy_prompt_user_info() {
94
+ local color=" ${bold_blue?} "
95
+ local box=" [|]"
96
+ local info=" \u@\H"
97
+ if [[ " ${THEME_SHOW_SUDO:- } " == " true" ]]; then
95
98
if sudo -vn 1> /dev/null 2>&1 ; then
96
- color=$ bold_red
99
+ color=" ${ bold_red?} "
97
100
fi
98
101
fi
99
- box=" [|]"
100
- info=" \u@\H"
101
- if [ -n " ${SSH_CLIENT} " ]; then
102
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white} " " ${box} "
102
+ if [[ -n " ${SSH_CLIENT:- } " ]]; then
103
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white?} " " ${box} "
103
104
else
104
105
printf " %s|%s" " ${color} " " ${info} "
105
106
fi
106
107
}
107
108
108
- ___brainy_prompt_dir () {
109
- color=$ bold_yellow
110
- box=" [|]"
111
- info=" \w"
112
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white} " " ${box} "
109
+ function ___brainy_prompt_dir() {
110
+ local color=" ${ bold_yellow?} "
111
+ local box=" [|]"
112
+ local info=" \w"
113
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white? } " " ${box} "
113
114
}
114
115
115
- ___brainy_prompt_scm () {
116
- [ " ${THEME_SHOW_SCM} " != " true" ] && return
117
- color=$ bold_green
116
+ function ___brainy_prompt_scm() {
117
+ [[ " ${THEME_SHOW_SCM:- } " != " true" ] ] && return
118
+ local color=" ${ bold_green?} " box info
118
119
box=" $( scm_char) "
119
120
info=" $( scm_prompt_info) "
120
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white} " " ${box} "
121
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white? } " " ${box} "
121
122
}
122
123
123
- ___brainy_prompt_python () {
124
- [ " ${THEME_SHOW_PYTHON} " != " true" ] && return
125
- color=$ bold_yellow
126
- box=" [|]"
124
+ function ___brainy_prompt_python() {
125
+ [[ " ${THEME_SHOW_PYTHON:- } " != " true" ] ] && return
126
+ local color=" ${ bold_yellow?} " info
127
+ local box=" [|]"
127
128
info=" $( python_version_prompt) "
128
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_blue} " " ${box} "
129
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_blue? } " " ${box} "
129
130
}
130
131
131
- ___brainy_prompt_ruby () {
132
- [ " ${THEME_SHOW_RUBY} " != " true" ] && return
133
- color=$ bold_white
134
- box=" [|]"
132
+ function ___brainy_prompt_ruby() {
133
+ [[ " ${THEME_SHOW_RUBY:- } " != " true" ] ] && return
134
+ local color=" ${ bold_white?} " info
135
+ local box=" [|]"
135
136
info=" rb-$( ruby_version_prompt) "
136
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_red} " " ${box} "
137
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_red? } " " ${box} "
137
138
}
138
139
139
- ___brainy_prompt_todo () {
140
- [ " ${THEME_SHOW_TODO} " != " true" ] \
141
- || [ -z " $( which todo.sh) " ] && return
142
- color=$ bold_white
143
- box=" [|]"
140
+ function ___brainy_prompt_todo() {
141
+ [[ " ${THEME_SHOW_TODO:- } " != " true" ||
142
+ -z " $( which todo.sh) " ] ] && return
143
+ local color=" ${ bold_white?} " info
144
+ local box=" [|]"
144
145
info=" t:$( todo.sh ls | grep -E " TODO: [0-9]+ of ([0-9]+)" | awk ' { print $4 }' ) "
145
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_green} " " ${box} "
146
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_green? } " " ${box} "
146
147
}
147
148
148
- ___brainy_prompt_clock () {
149
- [ " ${THEME_SHOW_CLOCK} " != " true" ] && return
150
- color=$ THEME_CLOCK_COLOR
151
- box=" [|]"
152
- info=" $( date +" ${THEME_CLOCK_FORMAT} " ) "
153
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_purple} " " ${box} "
149
+ function ___brainy_prompt_clock() {
150
+ [[ " ${THEME_SHOW_CLOCK} " != " true" ] ] && return
151
+ local color=" ${ THEME_CLOCK_COLOR:- } " info
152
+ local box=" [|]"
153
+ info=" $( date +" ${THEME_CLOCK_FORMAT? } " ) "
154
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_purple? } " " ${box} "
154
155
}
155
156
156
- ___brainy_prompt_battery () {
157
+ function ___brainy_prompt_battery() {
157
158
! _command_exists battery_percentage \
158
- || [ " ${THEME_SHOW_BATTERY} " != " true" ] \
159
- || [ " $( battery_percentage) " = " no" ] && return
159
+ || [[ " ${THEME_SHOW_BATTERY:- } " != " true" ] ] \
160
+ || [[ " $( battery_percentage) " == " no" ] ] && return
160
161
162
+ local color=" ${bold_green?} " info
161
163
info=$( battery_percentage)
162
- color=$bold_green
163
164
if [ " $info " -lt 50 ]; then
164
- color=$ bold_yellow
165
+ color=" ${ bold_yellow?} "
165
166
elif [ " $info " -lt 25 ]; then
166
- color=$ bold_red
167
+ color=" ${ bold_red?} "
167
168
fi
168
- box=" [|]"
169
+ local box=" [|]" charging
169
170
ac_adapter_connected && charging=" +"
170
171
ac_adapter_disconnected && charging=" -"
171
- info+=$ charging
172
+ info+=" ${ charging} "
172
173
[ " $info " == " 100+" ] && info=" AC"
173
- printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white} " " ${box} "
174
+ printf " %s|%s|%s|%s" " ${color} " " ${info} " " ${bold_white? } " " ${box} "
174
175
}
175
176
176
- ___brainy_prompt_exitcode () {
177
- [ " ${THEME_SHOW_EXITCODE} " != " true" ] && return
178
- color=$ bold_purple
179
- [ " $exitcode " -ne 0 ] && printf " %s|%s" " ${color} " " ${exitcode} "
177
+ function ___brainy_prompt_exitcode() {
178
+ [[ " ${THEME_SHOW_EXITCODE} " != " true" ] ] && return
179
+ local color=" ${ bold_purple?} "
180
+ [[ " ${ exitcode?} " -ne 0 ] ] && printf " %s|%s" " ${color} " " ${exitcode} "
180
181
}
181
182
182
- ___brainy_prompt_char () {
183
- color=$ bold_white
184
- prompt_char=" ${__BRAINY_PROMPT_CHAR_PS1} "
183
+ function ___brainy_prompt_char() {
184
+ local color=" ${ bold_white?} "
185
+ local prompt_char=" ${__BRAINY_PROMPT_CHAR_PS1? } "
185
186
printf " %s|%s" " ${color} " " ${prompt_char} "
186
187
}
187
188
188
189
# ########
189
190
# # cli ##
190
191
# ########
191
192
192
- __brainy_show () {
193
- typeset _seg=${1:- }
193
+ function __brainy_show() {
194
+ local _seg=" ${1?} "
194
195
shift
195
196
export " THEME_SHOW_${_seg} " =true
196
197
}
197
198
198
- __brainy_hide () {
199
- typeset _seg=${1:- }
199
+ function __brainy_hide() {
200
+ local _seg=" ${1?} "
200
201
shift
201
202
export " THEME_SHOW_${_seg} " =false
202
203
}
203
204
204
- _brainy_completion () {
205
+ function _brainy_completion() {
205
206
local cur _action actions segments
206
207
COMPREPLY=()
207
208
cur=" ${COMP_WORDS[COMP_CWORD]} "
@@ -221,22 +222,25 @@ _brainy_completion() {
221
222
return 0
222
223
}
223
224
224
- brainy () {
225
- typeset action=${1:- }
225
+ function brainy() {
226
+ local action=" ${1?} " func
226
227
shift
227
- typeset segs=${*:- }
228
- typeset func
229
- case $action in
228
+ local segs=(" ${@ ?} " )
229
+ case " ${action} " in
230
230
show)
231
231
func=__brainy_show
232
232
;;
233
233
hide)
234
234
func=__brainy_hide
235
235
;;
236
+ * )
237
+ _log_error " ${FUNCNAME[0]} : unknown action '$action '"
238
+ return 1
239
+ ;;
236
240
esac
237
- for seg in ${segs} ; do
238
- seg=$( printf " %s" " ${seg} " | tr ' [:lower:]' ' [:upper:]' )
239
- $ func " ${seg} "
241
+ for seg in " ${segs[@]} " ; do
242
+ seg=" $( printf " %s" " ${seg} " | tr ' [:lower:]' ' [:upper:]' ) "
243
+ " ${ func} " " ${seg} "
240
244
done
241
245
}
242
246
@@ -258,42 +262,42 @@ export RVM_THEME_PROMPT_SUFFIX=""
258
262
export VIRTUALENV_THEME_PROMPT_PREFIX=" "
259
263
export VIRTUALENV_THEME_PROMPT_SUFFIX=" "
260
264
261
- export SCM_THEME_PROMPT_DIRTY=" ${bold_red} ✗${normal} "
262
- export SCM_THEME_PROMPT_CLEAN=" ${bold_green} ✓${normal} "
265
+ export SCM_THEME_PROMPT_DIRTY=" ${bold_red? } ✗${normal? } "
266
+ export SCM_THEME_PROMPT_CLEAN=" ${bold_green? } ✓${normal? } "
263
267
264
- THEME_SHOW_SUDO= ${THEME_SHOW_SUDO:- " true" }
265
- THEME_SHOW_SCM= ${THEME_SHOW_SCM:- " true" }
266
- THEME_SHOW_RUBY= ${THEME_SHOW_RUBY:- " false" }
267
- THEME_SHOW_PYTHON= ${THEME_SHOW_PYTHON:- " false" }
268
- THEME_SHOW_CLOCK= ${THEME_SHOW_CLOCK:- " true" }
269
- THEME_SHOW_TODO= ${THEME_SHOW_TODO:- " false" }
270
- THEME_SHOW_BATTERY= ${THEME_SHOW_BATTERY:- " false" }
271
- THEME_SHOW_EXITCODE= ${THEME_SHOW_EXITCODE:- " true" }
268
+ : " ${THEME_SHOW_SUDO:= " true" } "
269
+ : " ${THEME_SHOW_SCM:= " true" } "
270
+ : " ${THEME_SHOW_RUBY:= " false" } "
271
+ : " ${THEME_SHOW_PYTHON:= " false" } "
272
+ : " ${THEME_SHOW_CLOCK:= " true" } "
273
+ : " ${THEME_SHOW_TODO:= " false" } "
274
+ : " ${THEME_SHOW_BATTERY:= " false" } "
275
+ : " ${THEME_SHOW_EXITCODE:= " true" } "
272
276
273
- THEME_CLOCK_COLOR= ${THEME_CLOCK_COLOR:- " $ bold_white" }
274
- THEME_CLOCK_FORMAT= ${THEME_CLOCK_FORMAT:- " %H:%M:%S" }
277
+ : " ${THEME_CLOCK_COLOR:= " ${ bold_white?} " } "
278
+ : " ${THEME_CLOCK_FORMAT:= " %H:%M:%S" } "
275
279
276
- __BRAINY_PROMPT_CHAR_PS1=${THEME_PROMPT_CHAR_PS1:- " >" }
277
- __BRAINY_PROMPT_CHAR_PS2=${THEME_PROMPT_CHAR_PS2:- " \\ " }
280
+ __BRAINY_PROMPT_CHAR_PS1=" ${THEME_PROMPT_CHAR_PS1:= " >" } "
281
+ __BRAINY_PROMPT_CHAR_PS2=" ${THEME_PROMPT_CHAR_PS2:= " \\ " } "
278
282
279
- ___BRAINY_TOP_LEFT= ${___BRAINY_TOP_LEFT:- " user_info dir scm" }
280
- ___BRAINY_TOP_RIGHT= ${___BRAINY_TOP_RIGHT:- " python ruby todo clock battery" }
281
- ___BRAINY_BOTTOM= ${___BRAINY_BOTTOM:- " exitcode char" }
283
+ : " ${___BRAINY_TOP_LEFT:= " user_info dir scm" } "
284
+ : " ${___BRAINY_TOP_RIGHT:= " python ruby todo clock battery" } "
285
+ : " ${___BRAINY_BOTTOM:= " exitcode char" } "
282
286
283
287
# ###########
284
288
# # Prompt ##
285
289
# ###########
286
290
287
- __brainy_ps1 () {
288
- printf " %s%s%s" " $( ____brainy_top) " " $( ____brainy_bottom) " " ${normal} "
291
+ function __brainy_ps1() {
292
+ printf " %s%s%s" " $( ____brainy_top) " " $( ____brainy_bottom) " " ${normal? } "
289
293
}
290
294
291
- __brainy_ps2 () {
295
+ function __brainy_ps2() {
292
296
color=$bold_white
293
- printf " %s%s%s" " ${color} " " ${__BRAINY_PROMPT_CHAR_PS2} " " ${normal} "
297
+ printf " %s%s%s" " ${color} " " ${__BRAINY_PROMPT_CHAR_PS2? } " " ${normal? } "
294
298
}
295
299
296
- _brainy_prompt () {
300
+ function _brainy_prompt() {
297
301
exitcode=" $? "
298
302
299
303
PS1=" $( __brainy_ps1) "
0 commit comments