我认为答案是非常自我解释的。
我一直在寻找已经做到这一点的软件,但我没有运气。它不是在Zsh中完成的,也不是在另一个应用程序中完成的,例如tmux。点是我无法找到它。
所以我的问题是,是否已经有一个预制的脚本,有人这样做了吗?如果有,请你分享一个链接。
如果没有,我应该考虑制作这个脚本?我是Zsh脚本的新手所以记住这一点。
这个想法是它输出了67%
的内容。你明白了。 ;)
答案 0 :(得分:8)
other answer在Mac OS X上无效(无apci
)。
我在提示符中删了Steve Losh's zsh prompt个字符。这并不完全是你所追求的 - 箭头▸▸▸▸▸▸▸▸▸▸
显示当前的电池状态,并在电池电量不足时改变颜色。此方法使用Python脚本,为了完整性,我将在下面添加。这是我的提示的截图:
OS X的另一种方法是on Reddit,使用另一个简短的脚本:
ioreg -n AppleSmartBattery -r | awk '$1~/Capacity/{c[$1]=$3} END{OFMT="%.2f%%"; max=c["\"MaxCapacity\""]; print (max>0? 100*c["\"CurrentCapacity\""]/max: "?")}'
ioreg -n AppleSmartBattery -r | awk '$1~/ExternalConnected/{gsub("Yes", "+");gsub("No", "%"); print substr($0, length, 1)}'
假设此脚本保存在~/bin/battery.sh
:
function battery {
~/bin/battery.sh
}
setopt promptsubst
PROMPT='$(battery) $'
看起来像这样:
要使用Steve Losh的脚本,请将脚本保存在某处,并在上面的battery()
函数中使用它。
#!/usr/bin/env python
# coding=UTF-8
import math, subprocess
p = subprocess.Popen(["ioreg", "-rc", "AppleSmartBattery"], stdout=subprocess.PIPE)
output = p.communicate()[0]
o_max = [l for l in output.splitlines() if 'MaxCapacity' in l][0]
o_cur = [l for l in output.splitlines() if 'CurrentCapacity' in l][0]
b_max = float(o_max.rpartition('=')[-1].strip())
b_cur = float(o_cur.rpartition('=')[-1].strip())
charge = b_cur / b_max
charge_threshold = int(math.ceil(10 * charge))
# Output
total_slots, slots = 10, []
filled = int(math.ceil(charge_threshold * (total_slots / 10.0))) * u'▸'
empty = (total_slots - len(filled)) * u'▹'
out = (filled + empty).encode('utf-8')
import sys
color_green = '%{[32m%}'
color_yellow = '%{[1;33m%}'
color_red = '%{[31m%}'
color_reset = '%{[00m%}'
color_out = (
color_green if len(filled) > 6
else color_yellow if len(filled) > 4
else color_red
)
out = color_out + out + color_reset
sys.stdout.write(out)
答案 1 :(得分:5)
一个非常简单的解决方案:
setopt promptsubst
PROMPT='$(acpi | grep -o "[0-9]*%)% '
答案 2 :(得分:5)
即使这个帖子已经很老了,我还以为我也会在这里发布我的版本:
我使用了steve losh's电池提示的基本概念,但首先改变了它不使用python而是shell,这更快,并且还改变了我的arch linux发行版的电池路径。另外,我添加了一个绿色的粗体' +'最后,如果我的笔记本电脑正在充电:
我的电池功能如下:
function battery_charge {
b_now=$(cat /sys/class/power_supply/BAT1/energy_now)
b_full=$(cat /sys/class/power_supply/BAT1/energy_full)
b_status=$(cat /sys/class/power_supply/BAT1/status)
# I am displaying 10 chars -> charge is in {0..9}
charge=$(expr $(expr $b_now \* 10) / $b_full)
# choose the color according the charge or if we are charging then always green
if [[ charge -gt 5 || "Charging" == $b_status ]]; then
echo -n "%{$fg[green]%}"
elif [[ charge -gt 2 ]]; then
echo -n "%{$fg[yellow]%}"
else
echo -n "%{$fg[red]%}"
fi
# display charge * '▸' and (10 - charge) * '▹'
i=0;
while [[ i -lt $charge ]]
do
i=$(expr $i + 1)
echo -n "▸"
done
while [[ i -lt 10 ]]
do
i=$(expr $i + 1)
echo -n "▹"
done
# display a plus if we are charging
if [[ "Charging" == $b_status ]]; then
echo -n "%{$fg_bold[green]%} +"
fi
# and reset the color
echo -n "%{$reset_color%} "
}
答案 3 :(得分:2)
这是一个带有颜色的版本,用ZSH编写。
在.zshrc文件中
function battery {
batprompt.sh
}
setopt promptsubst
PROMPT='$(battery) >'
这是linux的batprompt.sh脚本。您可以采用其他方式读取电池数据或调整早期帖子中的acpi版本:
#!/bin/zsh
# BATDIR is the folder with your battery characteristics
BATDIR="/sys/class/power_supply/BAT0"
max=`cat $BATDIR/charge_full`
current=`cat $BATDIR/charge_now`
percent=$(( 100 * $current / $max ))
color_green="%{^[[32m%}"
color_yellow="%{^[[34m%}"
color_red="%{^[[31m%}"
color_reset="%{^[[00m%}"
if [ $percent -ge 80 ] ; then
color=$color_green;
elif [ $percent -ge 40 ] ; then
color=$color_yellow;
else
color=$color_red;
fi
echo $color$percent$color_reset
警告^ [你在颜色定义中看到的是一个逃脱角色。如果剪切和粘贴无法正常工作,则需要将^ [转换为转义字符。在VI / Vim中,您可以删除字符,然后插入由Escape键跟随的control-v。
答案 4 :(得分:0)
这对我的Mac很有帮助,
pmset -g batt | grep -Eo "\d+%" | cut -d% -f1
答案 5 :(得分:0)
Zsh自2011年以来就有一个名为battery
的内置插件,该插件可显示电池状态。为了激活插件,请在您喜欢的文本编辑器中打开~/.zshrc
并将battery
添加到插件设置:
plugins=(git battery)
保存更改并重新加载Zsh会话:
source ~/.zshrc
列出的插件现在处于活动状态。