#!/usr/bin/env bash in_array() { local needle straw haystack needle=$1 haystack=("${@:2}") for straw in "${haystack[@]}"; do if [[ "$needle" = "$straw" ]]; then return 0 fi done return 1 } update() { local id id=$1 setup_trap "${id}.*" while true; do for iface in /sys/class/net/*; do iface=${iface##*/} parts=() case "$iface" in lo|docker*|veth*) continue ;; w*) IFS=$'\n' parts+=($(iwdata "$iface" | sed -rn 's@^(ESSID|Link Quality)=@@p')) ;; *) : ;; esac parts+=("$(ifdata -pa "$iface")") IFS='|' printf '%s %s\n' "$iface" "${parts[*]}" done | ( ifaces=() while read -r iface data; do ifaces+=("$iface") printf "label %s\n" "${iface}:${data}" | write "${id}.${iface}" done for file in "${XDG_RUNTIME_DIR}"/wmii*/rbar/"${id}".*; do if ! in_array "${file##*/"$id".}" "${ifaces[@]}"; then rm -f -- "$file" fi done ) sleep 1 done } right-click() { local list cur item list=() IFS='' while read -r line; do list+=("$line") done < <({ netctl-auto list | sort -k1.2; printf '> %s\n' 'New Network' 'Disable All' 'Enable All';} | sed 's,$,$,' | column -s '$' -t) cur='' for item in "${list[@]}"; do if [[ "$item" = '* '* ]]; then cur="$item" fi done IFS=$' \t\n' item=$(wmii9menu -i "$cur" "${list[@]}") case "$item" in '') # Nothing selected ;; '* '*) # Already selected; do nothing ;; '> New Network'*) urxvt +sb -title wifi-menu -e sudo wifi-menu ;; '> Disable All'*) sudo netctl-auto disable-all ;; '> Enable All'*) sudo netctl-auto enable-all ;; *) # NB: do NOT quote $item; we need to strip whitespace sudo netctl-auto switch-to $item ;; esac } . "$(dirname "$0")/rbar.sh"