diff --git a/scripts/ctl b/scripts/ctl index 88f7b91..6c1e82a 100755 --- a/scripts/ctl +++ b/scripts/ctl @@ -146,14 +146,44 @@ wifi) sleep 1 networks=$(iwctl station "$station" get-networks 2>/dev/null | \ sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | \ - awk 'NR>4 && /\S/' | \ + awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | \ sed 's/^[[:space:]>]*//' | \ - sed 's/[[:space:]]\{3,\}.*//' | \ - sed 's/[[:space:]]*$//' | \ - grep -v '^-') + awk '{ + sub(/[[:space:]]*$/, "") + i = index($0, " ") + if (i > 0) { + ssid = substr($0, 1, i - 1) + rest = substr($0, i) + sub(/^[[:space:]]*/, "", rest) + j = index(rest, " ") + if (j > 0) { + security = substr(rest, 1, j - 1) + signal = substr(rest, j) + sub(/^[[:space:]]*/, "", signal) + sub(/[[:space:]]*$/, "", signal) + } else { + security = rest + signal = "" + } + sub(/[[:space:]]*$/, "", ssid) + sub(/[[:space:]]*$/, "", security) + printf "%s\t%s\t%s\n", ssid, security, signal + } + }') [ -z "$networks" ] && exit 0 + w1=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=12}{l=length($1);if(l>m)m=l}END{print m}') + w2=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=8}{l=length($2);if(l>m)m=l}END{print m}') + w3=$(printf '%s\n' "$networks" | awk -F'\t' 'BEGIN{m=6}{l=length($3);if(l>m)m=l}END{print m}') + fw=$((w1 + 4 + w2 + 4 + w3 + 10)) + sep=$(awk -v n="$fw" 'BEGIN{for(i=0;i/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g') if printf '%s' "$known" | grep -qF "$ssid"; then