Blame view

plugins/battery/battery.plugin.zsh 5.03 KB
093a6c34b   mj   Squashed 'repos/r...
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
  ###########################################
  # Battery plugin for oh-my-zsh            #
  # Original Author: Peter hoeg (peterhoeg) #
  # Email: peter@speartail.com              #
  ###########################################
  # Author: Sean Jones (neuralsandwich)     #
  # Email: neuralsandwich@gmail.com         #
  # Modified to add support for Apple Mac   #
  ###########################################
  
  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 plugged_in() {
      [ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ Yes') -eq 1 ]
    }
  
    function battery_pct_remaining() {
      if plugged_in ; then
        echo "External Power"
      else
        battery_pct
      fi
    }
  
    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
          echo "::"
        else
          echo "~$((timeremaining / 60)):$((timeremaining % 60))"
        fi
      else
        echo "∞"
      fi
    }
  
    function battery_pct_prompt () {
      if [[ $(ioreg -rc AppleSmartBattery | grep -c '^.*"ExternalConnected"\ =\ No') -eq 1 ]] ; then
        b=$(battery_pct_remaining)
        if [ $b -gt 50 ] ; then
          color='green'
        elif [ $b -gt 20 ] ; then
          color='yellow'
        else
          color='red'
        fi
        echo "%{$fg[$color]%}[$(battery_pct_remaining)%%]%{$reset_color%}"
      else
        echo "∞"
      fi
    }
  
    function battery_is_charging() {
      [[ $(ioreg -rc "AppleSmartBattery"| grep '^.*"IsCharging"\ =\ ' | sed -e 's/^.*"IsCharging"\ =\ //') == "Yes" ]]
    }
  
  elif [[ $(uname) == "Linux"  ]] ; then
  
    function battery_is_charging() {
      ! [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]]
    }
  
    function battery_pct() {
      if (( $+commands[acpi] )) ; then
        echo "$(acpi | cut -f2 -d ',' | tr -cd '[:digit:]')"
      fi
    }
  
    function battery_pct_remaining() {
      if [ ! $(battery_is_charging) ] ; then
        battery_pct
      else
        echo "External Power"
      fi
    }
  
    function battery_time_remaining() {
      if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
        echo $(acpi | cut -f3 -d ',')
      fi
    }
  
    function battery_pct_prompt() {
      b=$(battery_pct_remaining) 
      if [[ $(acpi 2&>/dev/null | grep -c '^Battery.*Discharging') -gt 0 ]] ; then
        if [ $b -gt 50 ] ; then
          color='green'
        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() {
    }
  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);
  
    if [[ $battery_remaining_percentage =~ [0-9]+ ]]; then
      local filled=$(((( $battery_remaining_percentage + $gauge_slots - 1) / $gauge_slots)));
      local 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;
      fi
    else
      local filled=$gauge_slots;
      local empty=0;
      filled_symbol=${BATTERY_UNKNOWN_SYMBOL:-'.'};
    fi
  
    local charging=' ' && battery_is_charging && charging=$charging_symbol;
  
    printf ${charging_color//\%/\%\%}$charging${color_reset//\%/\%\%}${battery_prefix//\%/\%\%}${gauge_color//\%/\%\%}
    printf ${filled_symbol//\%/\%\%}'%.0s' {1..$filled}
    [[ $filled -lt $gauge_slots ]] && printf ${empty_symbol//\%/\%\%}'%.0s' {1..$empty}
    printf ${color_reset//\%/\%\%}${battery_suffix//\%/\%\%}${color_reset//\%/\%\%}
  }