zshrc: added OpenBSD support for battery info
[grml-etc-core.git] / etc / zsh / zshrc
index abfde9a..eb3f2a6 100644 (file)
@@ -347,7 +347,7 @@ NOMENU=${NOMENU:-0}
 NOPRECMD=${NOPRECMD:-0}
 COMMAND_NOT_FOUND=${COMMAND_NOT_FOUND:-0}
 GRML_ZSH_CNF_HANDLER=${GRML_ZSH_CNF_HANDLER:-/usr/share/command-not-found/command-not-found}
-BATTERY=${BATTERY:-0}
+GRML_DISPLAY_BATTERY=${GRML_DISPLAY_BATTERY:-${BATTERY:-0}}
 GRMLSMALL_SPECIFIC=${GRMLSMALL_SPECIFIC:-1}
 ZSH_NO_DEFAULT_LOCALE=${ZSH_NO_DEFAULT_LOCALE:-0}
 
@@ -358,7 +358,7 @@ if ls --color=auto / >/dev/null 2>&1; then
 elif ls -G / >/dev/null 2>&1; then
     ls_options=( -G )
 fi
-if grep --color=auto -q "a" <<< "a"; then
+if grep --color=auto -q "a" <<< "a" >/dev/null 2>&1; then
     grep_options=( --color=auto )
 fi
 
@@ -1439,7 +1439,7 @@ bind2maps emacs viins       -- -s '^x1' jump_after_first_word
 bind2maps emacs viins       -- -s "^x^x" hist-complete
 
 # insert unicode character
-# usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an §
+# usage example: 'ctrl-x i' 00A7 'ctrl-x i' will give you an Â§
 # See for example http://unicode.org/charts/ for unicode characters code
 #k# Insert Unicode character
 bind2maps emacs viins       -- -s '^xi' insert-unicode-char
@@ -1649,24 +1649,26 @@ PS4='+%N:%i:%_> '
 #    - debian_chroot
 #    - vcs_info setup and version specific fixes
 
-# display battery status on right side of prompt using 'BATTERY=1' in .zshrc.pre
-if [[ $BATTERY -gt 0 ]] ; then
-    if ! islinux ; then
+# display battery status on right side of prompt using 'GRML_DISPLAY_BATTERY=1' in .zshrc.pre
+if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then
+    if ! islinux && ! isopenbsd ; then
         # not yet supported
-        BATTERY=0
+        GRML_DISPLAY_BATTERY=0
     fi
 fi
 
 battery() {
-if [[ $BATTERY -gt 0 ]] ; then
+if [[ $GRML_DISPLAY_BATTERY -gt 0 ]] ; then
     if islinux ; then
         batterylinux
+    elif isopenbsd ; then
+        batteryopenbsd
     fi
 fi
 }
 
 batterylinux(){
-PERCENT=''
+GRML_BATTERY_LEVEL=''
 local batteries bat capacity
 batteries=( /sys/class/power_supply/BAT*(N) )
 if (( $#batteries > 0 )) ; then
@@ -1674,24 +1676,53 @@ if (( $#batteries > 0 )) ; then
         capacity=$(< $bat/capacity)
         case $(< $bat/status) in
         Charging)
-            PERCENT+=" ^"
+            GRML_BATTERY_LEVEL+=" ^"
             ;;
         Discharging)
             if (( capacity < 20 )) ; then
-                PERCENT+=" !v"
+                GRML_BATTERY_LEVEL+=" !v"
             else
-                PERCENT+=" v"
+                GRML_BATTERY_LEVEL+=" v"
             fi
             ;;
         *) # Full, Unknown
-            PERCENT+=" ="
+            GRML_BATTERY_LEVEL+=" ="
             ;;
         esac
-        PERCENT+="${capacity}%%"
+        GRML_BATTERY_LEVEL+="${capacity}%%"
     done
 fi
 }
 
+batteryopenbsd(){
+GRML_BATTERY_LEVEL=''
+local batfull batwarn batnow num
+for num in 0 1 ; do
+    bat=$(sysctl -n hw.sensors.acpibat${num})
+    if [[ ! -z $bat ]]; then
+        batfull=${"$(sysctl -n hw.sensors.acpibat${num}.amphour0)"%% *}
+        batwarn=${"$(sysctl -n hw.sensors.acpibat${num}.amphour1)"%% *}
+        batnow=${"$(sysctl -n hw.sensors.acpibat${num}.amphour3)"%% *}
+        case "$(sysctl -n hw.sensors.acpibat${num}.raw0)" in
+            *" discharging"*)
+                if (( batnow < batwarn )) ; then
+                    GRML_BATTERY_LEVEL+=" !v"
+                else
+                    GRML_BATTERY_LEVEL+=" v"
+                fi
+                ;;
+            *" charging"*)
+                GRML_BATTERY_LEVEL+=" ^"
+                ;;
+            *)
+                GRML_BATTERY_LEVEL+=" ="
+                ;;
+        esac
+        GRML_BATTERY_LEVEL+="${$(( 100 * batnow / batfull ))%%.*}%%"
+    fi
+done
+}
+
 # set variable debian_chroot if running in a chroot with /etc/debian_chroot
 if [[ -z "$debian_chroot" ]] && [[ -r /etc/debian_chroot ]] ; then
     debian_chroot=$(</etc/debian_chroot)
@@ -1945,7 +1976,7 @@ grml_prompt_post_default=(
 
 grml_prompt_token_default=(
     at                '@'
-    battery           'PERCENT'
+    battery           'GRML_BATTERY_LEVEL'
     change-root       'debian_chroot'
     date              '%D{%Y-%m-%d}'
     grml-chroot       'GRML_CHROOT'
@@ -2216,7 +2247,7 @@ fi
 if is437; then
     # The prompt themes use modern features of zsh, that require at least
     # version 4.3.7 of the shell. Use the fallback otherwise.
-    if [[ $BATTERY -gt 0 ]]; then
+    if [[ $GRML_DISPLAY_BATTERY -gt 0 ]]; then
         zstyle ':prompt:grml:right:setup' items sad-smiley battery
         add-zsh-hook precmd battery
     fi
@@ -2459,7 +2490,8 @@ the zsh yet. :)
   "NOPRECMD=1 zsh" => disable the precmd + preexec commands (set GNU screen title)
   "NOTITLE=1  zsh" => disable setting the title of xterms without disabling
                       preexec() and precmd() completely
-  "BATTERY=1  zsh" => activate battery status (via acpi) on right side of prompt
+  "GRML_DISPLAY_BATTERY=1  zsh"
+                   => activate battery status on right side of prompt (WIP)
   "COMMAND_NOT_FOUND=1 zsh"
                    => Enable a handler if an external command was not found
                       The command called in the handler can be altered by setting