mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-11-12 08:10:07 +00:00
linux wifi widget
This commit is contained in:
parent
dca8774f1b
commit
8f90ed6d49
2 changed files with 66 additions and 28 deletions
|
@ -4903,12 +4903,19 @@ prompt_wifi() {
|
||||||
(( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1]
|
(( _p9k__has_upglob )) || typeset -g "_p9k__segment_val_${_p9k__prompt_side}[_p9k__segment_index]"=$_p9k__prompt[len+1,-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
_p9k_prompt_wifi_init() {
|
_p9k_prompt_wifi_init() {
|
||||||
if [[ -x /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport ]]; then
|
if [[ -x /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport || -f /proc/net/wireless ]]; then
|
||||||
typeset -g _p9k__wifi_on=
|
typeset -g _p9k__wifi_on=
|
||||||
typeset -g P9K_WIFI_LAST_TX_RATE=
|
typeset -g P9K_WIFI_LAST_TX_RATE=
|
||||||
typeset -g P9K_WIFI_SSID=
|
typeset -g P9K_WIFI_SSID=
|
||||||
typeset -g P9K_WIFI_LINK_AUTH=
|
|
||||||
|
# possible refactor to set link_auth only on darwin
|
||||||
|
# or also possible to simply set linux link_auth to empty string and leave this scope as-is
|
||||||
|
if [[ $_p9k_os == OSX ]]; then
|
||||||
|
typeset -g P9K_WIFI_LINK_AUTH=
|
||||||
|
fi
|
||||||
|
|
||||||
typeset -g P9K_WIFI_RSSI=
|
typeset -g P9K_WIFI_RSSI=
|
||||||
typeset -g P9K_WIFI_NOISE=
|
typeset -g P9K_WIFI_NOISE=
|
||||||
typeset -g P9K_WIFI_BARS=
|
typeset -g P9K_WIFI_BARS=
|
||||||
|
@ -4918,27 +4925,64 @@ _p9k_prompt_wifi_init() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
_p9k_prompt_wifi_compute() {
|
|
||||||
_p9k_worker_async _p9k_prompt_wifi_async _p9k_prompt_wifi_sync
|
|
||||||
}
|
|
||||||
|
|
||||||
_p9k_prompt_wifi_async() {
|
_p9k_prompt_wifi_async() {
|
||||||
local airport=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport
|
|
||||||
local last_tx_rate ssid link_auth rssi noise bars on out line v state
|
local last_tx_rate ssid link_auth rssi noise bars on out line v state
|
||||||
{
|
|
||||||
[[ -x $airport ]] || return 0
|
{
|
||||||
out="$($airport -I)" || return 0
|
if [[ $_p9k_os == OSX ]]; then
|
||||||
for line in ${${${(f)out}##[[:space:]]#}%%[[:space:]]#}; do
|
local airport=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport
|
||||||
v=${line#*: }
|
[[ -x $airport ]] || return 0
|
||||||
case $line[1,-$#v-3] in
|
out="$($airport -I)" || return 0
|
||||||
agrCtlRSSI) rssi=$v;;
|
for line in ${${${(f)out}##[[:space:]]#}%%[[:space:]]#}; do
|
||||||
agrCtlNoise) noise=$v;;
|
v=${line#*: }
|
||||||
state) state=$v;;
|
case $line[1,-$#v-3] in
|
||||||
lastTxRate) last_tx_rate=$v;;
|
agrCtlRSSI) rssi=$v;;
|
||||||
link\ auth) link_auth=$v;;
|
agrCtlNoise) noise=$v;;
|
||||||
SSID) ssid=$v;;
|
state) state=$v;;
|
||||||
esac
|
lastTxRate) last_tx_rate=$v;;
|
||||||
done
|
link\ auth) link_auth=$v;;
|
||||||
|
SSID) ssid=$v;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
elif [[ $_p9k_os == (Linux|Android)]]; then
|
||||||
|
# iw tools only output 'noise' from a dump that requires superuser and a background service to be running, which probably isn't, so a separate process is needed
|
||||||
|
# /proc/net/wireless displays noise level up to date, w/o requiring superuser
|
||||||
|
local proc_less=/proc/net/wireless
|
||||||
|
[[ -f $proc_less ]] || return 0
|
||||||
|
|
||||||
|
# this method using iw is over 10x faster than the network manager method in benchmarking
|
||||||
|
# it's possible some systems are still using 'wireless_tools' (iw's ancestor) but they are long deprecated anyway
|
||||||
|
local device="$(iw dev | grep 'Interface ' | cut -d\ -f2)" || return 0
|
||||||
|
out="$(iw dev $device link)" || return 0
|
||||||
|
|
||||||
|
# 'running' state guaranteed by 'device' and 'proc_less' var assignment
|
||||||
|
state='running'
|
||||||
|
|
||||||
|
local proc_out="$(grep $device $proc_less | tr -s ' ')" || return 0
|
||||||
|
# using cut is more performant than awk,sed,perl, but I haven't timed against zsh expansion pattern
|
||||||
|
rssi="${$($proc_out | cut -d\ -f4)%.*}"
|
||||||
|
noise="$($proc_out | cut -d\ -f5)"
|
||||||
|
|
||||||
|
# it's possible to get boolean from iw to check authorization status from a dump, but getting the method (if any) requires superuser
|
||||||
|
link_auth=""
|
||||||
|
|
||||||
|
for line in ${${${(f)out}##[[:space:]]#}%%[[:space:]]#}; do
|
||||||
|
v=${line#*: }
|
||||||
|
case ${line[1,-$#v-3]} in
|
||||||
|
SSID) ssid=$v;;
|
||||||
|
|
||||||
|
# formatting here to remove ' dBm' from tail
|
||||||
|
# note 'rssi' is also assigned up above, but this replacement pattern might be faster than using cut - needs benchmarking
|
||||||
|
signal) rssi=${v//[^0-9-]/};;
|
||||||
|
|
||||||
|
# formatting here to transform from 'xxx.x MBit/s MCS xx short GI' to 'xxx.x' where x's are integers
|
||||||
|
# benchmarking shows grep here is extremely fast (under .1 msc even on older hw), but you can change to native zsh pattern if you want
|
||||||
|
tx\ bitrate) last_tx_rate=$(echo $v | grep -o "^[0-9]+.[0-9]");;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $state != running || $rssi != (0|-<->) || $noise != (0|-<->) ]]; then
|
if [[ $state != running || $rssi != (0|-<->) || $noise != (0|-<->) ]]; then
|
||||||
rssi=
|
rssi=
|
||||||
noise=
|
noise=
|
||||||
|
@ -4991,13 +5035,6 @@ _p9k_prompt_wifi_async() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_p9k_prompt_wifi_sync() {
|
|
||||||
if [[ -n $REPLY ]]; then
|
|
||||||
eval $REPLY
|
|
||||||
_p9k_worker_reply $REPLY
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function _p9k_asdf_check_meta() {
|
function _p9k_asdf_check_meta() {
|
||||||
[[ -n $_p9k_asdf_meta_sig ]] || return
|
[[ -n $_p9k_asdf_meta_sig ]] || return
|
||||||
[[ -z $^_p9k_asdf_meta_non_files(#qN) ]] || return
|
[[ -z $^_p9k_asdf_meta_non_files(#qN) ]] || return
|
||||||
|
|
1
log.txt
Normal file
1
log.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
2020/08/23 17:20:27 Micro started
|
Loading…
Reference in a new issue