fix(scripts): add <c-r> for refresh

This commit is contained in:
Barrett Ruth 2026-03-02 12:08:35 -05:00
parent dd10d11347
commit 0afc547def
Signed by: barrett
GPG key ID: A6C96C9349D2FC81
2 changed files with 54 additions and 42 deletions

View file

@ -142,49 +142,58 @@ wifi)
require fuzzel
station=$(iwctl device list 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | awk '/station/{print $1}')
[ -z "$station" ] && { echo "ctl: no wifi device found" >&2; exit 1; }
iwctl station "$station" scan 2>/dev/null
sleep 1
networks=$(iwctl station "$station" get-networks 2>/dev/null | \
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | \
awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | \
sed 's/^[[:space:]>]*//' | \
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 = ""
while :; do
iwctl station "$station" scan 2>/dev/null
sleep 1
networks=$(iwctl station "$station" get-networks 2>/dev/null | \
sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' | \
awk 'NR>4 && /\S/ && !/^[[:space:]]*-/' | \
awk '{
active = ($0 ~ /^[[:space:]]*>/) ? ">" : ""
sub(/^[[:space:]>]*/, "")
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\t%s\n", ssid, security, signal, active
}
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<n;i++)printf "─";print ""}')
header=$(printf "%-*s %-*s %s\n%s" "$w1" "Network name" "$w2" "Security" "Signal" "$sep")
count=$(printf '%s\n' "$networks" | wc -l)
ssid=$(printf '%s\n' "$networks" | \
awk -F'\t' -v w1="$w1" -v w2="$w2" '{printf "%-*s %-*s %s\t%s\n", w1, $1, w2, $2, $3, $1}' | \
fuzzel --dmenu --prompt="wifi: " --no-icons --lines="$count" \
--with-nth=1 --accept-nth=2 \
--mesg="$header" --mesg-mode=expand \
--font="monospace:size=12" --width="$fw")
[ -z "$ssid" ] && exit 0
}')
[ -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 + 14))
sep=$(awk -v n="$fw" 'BEGIN{for(i=0;i<n;i++)printf "─";print ""}')
header=$(printf " %-*s %-*s %s\n%s" "$w1" "Network name" "$w2" "Security" "Signal" "$sep")
count=$(printf '%s\n' "$networks" | wc -l)
ssid=$(printf '%s\n' "$networks" | \
awk -F'\t' -v w1="$w1" -v w2="$w2" '{
prefix = ($4 == ">") ? " > " : " "
printf "%s%-*s %-*s %s\t%s\n", prefix, w1, $1, w2, $2, $3, $1
}' | \
fuzzel --dmenu --prompt="wifi: " --no-icons --lines="$count" \
--with-nth=1 --accept-nth=2 \
--mesg="$header" --mesg-mode=expand \
--font="monospace:size=12" --width="$fw")
rc=$?
[ "$rc" = 10 ] && continue
[ -z "$ssid" ] && exit 0
break
done
known=$(iwctl known-networks list 2>/dev/null | sed 's/\x1b\[[0-9;]*[a-zA-Z]//g')
if printf '%s' "$known" | grep -qF "$ssid"; then
iwctl station "$station" connect "$ssid"