mirror of
https://github.com/romkatv/powerlevel10k.git
synced 2024-12-12 19:18:28 +02:00
fix network interface and ip parsing
This commit is contained in:
parent
3a1ebea014
commit
5f610a0af9
@ -212,44 +212,13 @@ _p9k_segment_in_use() {
|
||||
}
|
||||
|
||||
function _p9k_parse_ip() {
|
||||
local desiredInterface=${1:-'^[^ ]+'}
|
||||
|
||||
if [[ $_p9k_os == OSX ]]; then
|
||||
[[ -x /sbin/ifconfig ]] || return
|
||||
local rawInterfaces && rawInterfaces="$(/sbin/ifconfig -l 2>/dev/null)" || return
|
||||
local -a interfaces=(${(A)=rawInterfaces})
|
||||
local pattern="${desiredInterface}[^ ]?"
|
||||
local -a relevantInterfaces
|
||||
for rawInterface in $interfaces; do
|
||||
[[ "$rawInterface" =~ $pattern ]] && relevantInterfaces+=$MATCH
|
||||
done
|
||||
local newline=$'\n'
|
||||
local interfaceName interface
|
||||
for interfaceName in $relevantInterfaces; do
|
||||
interface="$(/sbin/ifconfig $interfaceName 2>/dev/null)" || continue
|
||||
[[ "${interface}" =~ "lo[0-9]*" ]] && continue
|
||||
if [[ "${interface//${newline}/}" =~ "<([^>]*)>(.*)inet[ ]+([^ ]*)" ]]; then
|
||||
local ipFound="${match[3]}"
|
||||
local -a interfaceStates=(${(s:,:)match[1]})
|
||||
if (( ${interfaceStates[(I)UP]} )); then
|
||||
_p9k_ret=$ipFound
|
||||
return
|
||||
fi
|
||||
fi
|
||||
done
|
||||
else
|
||||
[[ -x /sbin/ip ]] || return
|
||||
local -a interfaces=( "${(f)$(/sbin/ip -brief -4 a show 2>/dev/null)}" )
|
||||
local pattern="^${desiredInterface}[[:space:]]+UP[[:space:]]+([^/ ]+)"
|
||||
local interface
|
||||
for interface in "${(@)interfaces}"; do
|
||||
if [[ "$interface" =~ $pattern ]]; then
|
||||
_p9k_ret=$match[1]
|
||||
return
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
local iface_regex="^${1:-.*}\$" iface ip
|
||||
for iface ip in "${(@kv)_p9k_iface}"; do
|
||||
if [[ $iface =~ $iface_regex ]]; then
|
||||
_p9k_ret=$ip
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
@ -3075,6 +3044,23 @@ _p9k_preexec() {
|
||||
_p9k_timer_start=EPOCHREALTIME
|
||||
}
|
||||
|
||||
function _p9k_set_iface() {
|
||||
if [[ ! -x /sbin/ifconfig ]]; then
|
||||
_p9k_iface=()
|
||||
return
|
||||
fi
|
||||
local line
|
||||
local iface
|
||||
for line in ${(f)"$(/sbin/ifconfig 2>/dev/null)"}; do
|
||||
if [[ $line == (#b)([^[:space:]:]##):[[:space:]]##flags=(<->)'<'* ]]; then
|
||||
[[ $match[2] == *[13579] ]] && iface=$match[1] || iface=
|
||||
elif [[ -n $iface && $line == (#b)[[:space:]]##inet[[:space:]]##([0-9.]##)* ]]; then
|
||||
_p9k_iface[$iface]=$match[1]
|
||||
iface=
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
function _p9k_build_segment() {
|
||||
_p9k_segment_name=${_p9k_segment_name%_joined}
|
||||
if [[ $_p9k_segment_name == custom_* ]]; then
|
||||
@ -3093,6 +3079,8 @@ function _p9k_set_prompt() {
|
||||
PROMPT=$_p9k_prompt_prefix_left
|
||||
RPROMPT=
|
||||
|
||||
(( _p9k_fetch_iface )) && _p9k_set_iface
|
||||
|
||||
local -i left_idx=1 right_idx=1 num_lines=$#_p9k_line_segments_left i
|
||||
for i in {1..$num_lines}; do
|
||||
local right=
|
||||
@ -3544,6 +3532,8 @@ _p9k_init_vars() {
|
||||
typeset -gi _p9k_num_cpus
|
||||
typeset -g _p9k_pwd
|
||||
typeset -g _p9k_pwd_a
|
||||
typeset -gA _p9k_iface
|
||||
typeset -gi _p9k_fetch_iface
|
||||
|
||||
typeset -g P9K_VISUAL_IDENTIFIER
|
||||
typeset -g P9K_CONTENT
|
||||
@ -3686,7 +3676,7 @@ _p9k_init_params() {
|
||||
_p9k_declare -i POWERLEVEL9K_SHORTEN_DELIMITER_LENGTH
|
||||
_p9k_declare -e POWERLEVEL9K_SHORTEN_DELIMITER
|
||||
_p9k_declare -i POWERLEVEL9K_SHORTEN_DIR_LENGTH
|
||||
_p9k_declare -s POWERLEVEL9K_IP_INTERFACE "^[^ ]+"
|
||||
_p9k_declare -s POWERLEVEL9K_IP_INTERFACE ""
|
||||
_p9k_declare -s POWERLEVEL9K_VPN_IP_INTERFACE "tun"
|
||||
_p9k_declare -i POWERLEVEL9K_LOAD_WHICH 5
|
||||
_p9k_declare -b POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW 0
|
||||
@ -4328,6 +4318,11 @@ _p9k_init() {
|
||||
fi
|
||||
|
||||
_p9k_wrap_zle_widget zle-keymap-select _p9k_zle_keymap_select
|
||||
|
||||
if [[ -n $_POWERLEVEL9K_PUBLIC_IP_VPN_INTERFACE ]] && _p9k_segment_in_use public_ip ||
|
||||
_p9k_segment_in_use ip || _p9k_segment_in_use vpn_ip; then
|
||||
_p9k_fetch_iface=1
|
||||
fi
|
||||
}
|
||||
|
||||
_p9k_deinit() {
|
||||
|
Loading…
Reference in New Issue
Block a user