Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Oh My Zsh
Commits
ebaccba6
Commit
ebaccba6
authored
Feb 12, 2020
by
Marc Cornellà
Browse files
battery: merge branch 'refactor-battery-plugin'
Closes #4726 Closes #4774 Closes #8275
parents
17428f3c
15a03744
Changes
1
Show whitespace changes
Inline
Side-by-side
plugins/battery/battery.plugin.zsh
View file @
ebaccba6
...
...
@@ -11,22 +11,21 @@
# Modified to add support for FreeBSD #
###########################################
if
[[
"
$OSTYPE
"
=
darwin
*
]]
;
then
if
[[
"
$OSTYPE
"
=
darwin
*
]]
;
then
function
battery_pct
()
{
local
smart_battery_status
=
"
$(
ioreg
-rc
"AppleSmartBattery"
)
"
typeset
-F
maxcapacity
=
$(
echo
$smart_battery_status
|
grep
'^.*"MaxCapacity"\ =\ '
|
sed
-e
's/^.*"MaxCapacity"\ =\ //'
)
typeset
-F
currentcapacity
=
$(
echo
$smart_battery_status
|
grep
'^.*"CurrentCapacity"\ =\ '
|
sed
-e
's/^.*CurrentCapacity"\ =\ //'
)
integer
i
=
$((
(
currentcapacity/maxcapacity
)
*
100
))
echo
$i
function
battery_is_charging
()
{
ioreg
-rc
AppleSmartBattery |
command grep
-q
'^.*"ExternalConnected"\ =\ Yes'
}
function
plugged_in
()
{
[
$(
ioreg
-rc
AppleSmartBattery |
grep
-c
'^.*"ExternalConnected"\ =\ Yes'
)
-eq
1
]
function
battery_pct
()
{
local
smart_battery_status
=
"
$(
ioreg
-rc
AppleSmartBattery
)
"
local
-F
maxcapacity
=
$(
command grep
'^.*"MaxCapacity"\ =\ '
<<<
$smart_battery_status
|
sed
-e
's/^.*"MaxCapacity"\ =\ //'
)
local
-F
currentcapacity
=
$(
command grep
'^.*"CurrentCapacity"\ =\ '
<<<
$smart_battery_status
|
sed
-e
's/^.*CurrentCapacity"\ =\ //'
)
echo
$((
(
currentcapacity/maxcapacity
)
*
100
))
}
function
battery_pct_remaining
()
{
if
plugged_in
;
then
if
battery_is_charging
;
then
echo
"External Power"
else
battery_pct
...
...
@@ -35,9 +34,9 @@ if [[ "$OSTYPE" = darwin* ]] ; then
function
battery_time_remaining
()
{
local
smart_battery_status
=
"
$(
ioreg
-rc
"AppleSmartBattery"
)
"
if
[[
$(
echo
$smart_battery_status
|
grep
-c
'^.*"ExternalConnected"\ =\ No'
)
-eq
1
]]
;
then
timeremaining
=
$(
echo
$smart_battery_status
|
grep
'^.*"AvgTimeToEmpty"\ =\ '
|
sed
-e
's/^.*"AvgTimeToEmpty"\ =\ //'
)
if
[
$timeremaining
-gt
720
]
;
then
if
[[
$(
echo
$smart_battery_status
|
command
grep
-c
'^.*"ExternalConnected"\ =\ No'
)
-eq
1
]]
;
then
timeremaining
=
$(
echo
$smart_battery_status
|
command
grep
'^.*"AvgTimeToEmpty"\ =\ '
|
sed
-e
's/^.*"AvgTimeToEmpty"\ =\ //'
)
if
[
$timeremaining
-gt
720
]
;
then
echo
"::"
else
echo
"~
$((
timeremaining
/
60
))
:
$((
timeremaining
%
60
))
"
...
...
@@ -48,11 +47,11 @@ if [[ "$OSTYPE" = darwin* ]] ; then
}
function
battery_pct_prompt
()
{
if
[[
$(
ioreg
-rc
AppleSmartBattery |
grep
-
c
'^.*"ExternalConnected"\ =\ No'
)
-eq
1
]]
;
then
if
ioreg
-rc
AppleSmartBattery |
command
grep
-
q
'^.*"ExternalConnected"\ =\ No'
;
then
b
=
$(
battery_pct_remaining
)
if
[
$b
-gt
50
]
;
then
if
[
[
$b
-gt
50
]
]
;
then
color
=
'green'
elif
[
$b
-gt
20
]
;
then
elif
[
[
$b
-gt
20
]
]
;
then
color
=
'yellow'
else
color
=
'red'
...
...
@@ -63,24 +62,20 @@ if [[ "$OSTYPE" = darwin* ]] ; then
fi
}
function
battery_is_charging
()
{
[[
$(
ioreg
-rc
"AppleSmartBattery"
|
grep
'^.*"IsCharging"\ =\ '
|
sed
-e
's/^.*"IsCharging"\ =\ //'
)
==
"Yes"
]]
}
elif
[[
"
$OSTYPE
"
=
freebsd
*
]]
;
then
elif
[[
"
$OSTYPE
"
=
freebsd
*
]]
;
then
function
battery_is_charging
()
{
[[
$(
sysctl
-n
hw.acpi.battery.state
)
-eq
2
]]
}
function
battery_pct
()
{
if
((
$+
commands[sysctl]
))
;
then
echo
"
$(
sysctl
-n
hw.acpi.battery.life
)
"
if
((
$+
commands[sysctl]
))
;
then
sysctl
-n
hw.acpi.battery.life
fi
}
function
battery_pct_remaining
()
{
if
[
!
$(
battery_is_charging
)
]
;
then
if
!
battery_is_charging
;
then
battery_pct
else
echo
"External Power"
...
...
@@ -88,45 +83,46 @@ elif [[ "$OSTYPE" = freebsd* ]] ; then
}
function
battery_time_remaining
()
{
local
remaining_time
remaining_time
=
$(
sysctl
-n
hw.acpi.battery.time
)
if
[[
$remaining_time
-ge
0
]]
;
then
# calculation from https://www.unix.com/shell-programming-and-scripting/23695-convert-minutes-hours-minutes-seconds.html
((
hour
=
$remaining_time
/60
))
((
minute
=
$remaining_time
-
$hour
*
60
))
echo
$hour
:
$minute
if
[[
$remaining_time
-ge
0
]]
;
then
((
hour
=
$remaining_time
/ 60
))
((
minute
=
$remaining_time
% 60
))
printf
%02d:%02d
$hour
$minute
fi
}
function
battery_pct_prompt
()
{
local
b color
b
=
$(
battery_pct_remaining
)
if
[
!
$(
battery_is_charging
)
]
;
then
if
[
$b
-gt
50
]
;
then
if
battery_is_charging
;
then
echo
"∞"
else
if
[[
$b
-gt
50
]]
;
then
color
=
'green'
elif
[
$b
-gt
20
]
;
then
elif
[
[
$b
-gt
20
]
]
;
then
color
=
'yellow'
else
color
=
'red'
fi
echo
"%{
$fg
[
$color
]%}
$(
battery_pct_remaining
)
%%%{
$reset_color
%}"
else
echo
"∞"
fi
}
elif
[[
"
$OSTYPE
"
=
linux
*
]]
;
then
elif
[[
"
$OSTYPE
"
=
linux
*
]]
;
then
function
battery_is_charging
()
{
!
[[
$(
acpi 2>/dev/null |
grep
-c
'^Battery.*Discharging'
)
-gt
0
]]
!
acpi 2>/dev/null |
command grep
-v
"rate information unavailable"
|
command grep
-q
'^Battery.*Discharging'
}
function
battery_pct
()
{
if
((
$+
commands[acpi]
))
;
then
echo
"
$(
acpi 2>/dev/null |
cut
-f2
-d
','
|
tr
-cd
'[:digit:]'
)
"
if
((
$+
commands[acpi]
))
;
then
acpi 2>/dev/null |
command grep
-v
"rate information unavailable"
|
command grep
-E
'^Battery.*(Disc|C)harging'
|
cut
-f2
-d
','
|
tr
-cd
'[:digit:]'
fi
}
function
battery_pct_remaining
()
{
if
[
!
$(
battery_is_charging
)
]
;
then
if
!
battery_is_charging
;
then
battery_pct
else
echo
"External Power"
...
...
@@ -134,76 +130,81 @@ elif [[ "$OSTYPE" = linux* ]] ; then
}
function
battery_time_remaining
()
{
if
[[
$(
acpi 2>/dev/null |
grep
-c
'^B
attery
.*D
ischarging
'
)
-gt
0
]]
;
then
echo
$(
acpi 2>/dev/null |
cut
-f3
-d
','
)
if
!
b
attery
_
is
_
charging
;
then
acpi 2>/dev/null |
command grep
-v
"rate information unavailable"
|
cut
-f3
-d
','
fi
}
function
battery_pct_prompt
()
{
local
b color
b
=
$(
battery_pct_remaining
)
if
[[
$(
acpi 2>/dev/null |
grep
-c
'^Battery.*Discharging'
)
-gt
0
]]
;
then
if
[
$b
-gt
50
]
;
then
if
battery_is_charging
;
then
echo
"∞"
else
if
[[
$b
-gt
50
]]
;
then
color
=
'green'
elif
[
$b
-gt
20
]
;
then
elif
[
[
$b
-gt
20
]
]
;
then
color
=
'yellow'
else
color
=
'red'
fi
echo
"%{
$fg
[
$color
]%}
$(
battery_pct_remaining
)
%%%{
$reset_color
%}"
else
echo
"∞"
fi
}
else
# Empty functions so we don't cause errors in prompts
function
battery_pct_remaining
()
{
}
function
battery_time_remaining
()
{
}
function
battery_pct_prompt
()
{
}
function
battery_is_charging
{
false
}
function
battery_pct
\
battery_pct_remaining
\
battery_time_remaining
\
battery_pct_prompt
{
}
fi
function
battery_level_gauge
()
{
local
gauge_slots
=
${
BATTERY_GAUGE_SLOTS
:-
10
}
;
local
green_threshold
=
${
BATTERY_GREEN_THRESHOLD
:-
6
}
;
local
yellow_threshold
=
${
BATTERY_YELLOW_THRESHOLD
:-
4
}
;
local
color_green
=
${
BATTERY_COLOR_GREEN
:-
%F{green
}
}
;
local
color_yellow
=
${
BATTERY_COLOR_YELLOW
:-
%F{yellow
}
}
;
local
color_red
=
${
BATTERY_COLOR_RED
:-
%F{red
}
}
;
local
color_reset
=
${
BATTERY_COLOR_RESET
:-
%{%f%k%b%
}
}
;
local
battery_prefix
=
${
BATTERY_GAUGE_PREFIX
:-
'['
}
;
local
battery_suffix
=
${
BATTERY_GAUGE_SUFFIX
:-
']'
}
;
local
filled_symbol
=
${
BATTERY_GAUGE_FILLED_SYMBOL
:-
'▶'
}
;
local
empty_symbol
=
${
BATTERY_GAUGE_EMPTY_SYMBOL
:-
'▷'
}
;
local
charging_color
=
${
BATTERY_CHARGING_COLOR
:-
$color_yellow
}
;
local
charging_symbol
=
${
BATTERY_CHARGING_SYMBOL
:-
'⚡'
}
;
local
battery_remaining_percentage
=
$(
battery_pct
)
;
local
gauge_slots
=
${
BATTERY_GAUGE_SLOTS
:-
10
}
local
green_threshold
=
${
BATTERY_GREEN_THRESHOLD
:-$((
gauge_slots
*
0
.6
))}
local
yellow_threshold
=
${
BATTERY_YELLOW_THRESHOLD
:-$((
gauge_slots
*
0
.4
))}
local
color_green
=
${
BATTERY_COLOR_GREEN
:-
%F{green
}
}
local
color_yellow
=
${
BATTERY_COLOR_YELLOW
:-
%F{yellow
}
}
local
color_red
=
${
BATTERY_COLOR_RED
:-
%F{red
}
}
local
color_reset
=
${
BATTERY_COLOR_RESET
:-
%{%f%k%b%
}
}
local
battery_prefix
=
${
BATTERY_GAUGE_PREFIX
:-
'['
}
local
battery_suffix
=
${
BATTERY_GAUGE_SUFFIX
:-
']'
}
local
filled_symbol
=
${
BATTERY_GAUGE_FILLED_SYMBOL
:-
'▶'
}
local
empty_symbol
=
${
BATTERY_GAUGE_EMPTY_SYMBOL
:-
'▷'
}
local
charging_color
=
${
BATTERY_CHARGING_COLOR
:-
$color_yellow
}
local
charging_symbol
=
${
BATTERY_CHARGING_SYMBOL
:-
'⚡'
}
local
battery_remaining_percentage
=
$(
battery_pct
)
local
filled empty gauge_color
if
[[
$battery_remaining_percentage
=
~
[
0-9]+
]]
;
then
local
filled
=
$((
((
$battery_remaining_percentage
+
$gauge_slots
-
1
)
/
$gauge_slots
))
)
;
local
empty
=
$((
$gauge_slots
-
$filled
))
;
filled
=
$((
(
$battery_remaining_percentage
*
$gauge_slots
)
/
100
))
empty
=
$((
$gauge_slots
-
$filled
))
if
[[
$filled
-gt
$green_threshold
]]
;
then
local
gauge_color
=
$color_green
;
elif
[[
$filled
-gt
$yellow_threshold
]]
;
then
local
gauge_color
=
$color_yellow
;
else
local
gauge_color
=
$color_red
;
if
[[
$filled
-gt
$green_threshold
]]
;
then
gauge_color
=
$color_green
elif
[[
$filled
-gt
$yellow_threshold
]]
;
then
gauge_color
=
$color_yellow
else
gauge_color
=
$color_red
fi
else
local
filled
=
$gauge_slots
;
local
empty
=
0
;
filled_symbol
=
${
BATTERY_UNKNOWN_SYMBOL
:-
'.'
}
;
filled
=
$gauge_slots
empty
=
0
filled_symbol
=
${
BATTERY_UNKNOWN_SYMBOL
:-
'.'
}
fi
local
charging
=
' '
&&
battery_is_charging
&&
charging
=
$charging_symbol
;
local
charging
=
' '
battery_is_charging
&&
charging
=
$charging_symbol
# Charging status and prefix
printf
${
charging_color
//\%/\%\%
}
$charging
${
color_reset
//\%/\%\%
}${
battery_prefix
//\%/\%\%
}${
gauge_color
//\%/\%\%
}
printf
${
filled_symbol
//\%/\%\%
}
'%.0s'
{
1..
$filled
}
# Filled slots
[[
$filled
-gt
0
]]
&&
printf
${
filled_symbol
//\%/\%\%
}
'%.0s'
{
1..
$filled
}
# Empty slots
[[
$filled
-lt
$gauge_slots
]]
&&
printf
${
empty_symbol
//\%/\%\%
}
'%.0s'
{
1..
$empty
}
# Suffix
printf
${
color_reset
//\%/\%\%
}${
battery_suffix
//\%/\%\%
}${
color_reset
//\%/\%\%
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment