From 16671eaec14a929e4c44ce82277c3c1764f185f8 Mon Sep 17 00:00:00 2001 From: John Mertz Date: Tue, 15 Oct 2024 16:25:41 -0600 Subject: [PATCH] Change osk to secondary action and make primary action to rotate between configured layouts --- waybar/waybar-keyboard.sh | 54 ++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/waybar/waybar-keyboard.sh b/waybar/waybar-keyboard.sh index af878dc..97dc50f 100755 --- a/waybar/waybar-keyboard.sh +++ b/waybar/waybar-keyboard.sh @@ -1,10 +1,50 @@ #!/bin/bash -FILE=/home/jpm/.local/state/onscreen-keyboard -if [ -f $FILE ]; then - rm $FILE - busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b false -else - touch $FILE - busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true +# Input name from `swaymsg -t get_inputs` +INPUTNAME="AT Translated Set 2 keyboard" + +ACTIVELAYOUT=$(swaymsg -t get_inputs | jq -r ".[] | select(.name==\"$INPUTNAME\") | .xkb_active_layout_name") + +mapfile -t AVAILABLELAYOUTS < <( swaymsg -t get_inputs | jq -r ".[] | select(.name==\"$INPUTNAME\") | .xkb_layout_names" | sed 's/[][,]//g' | sed 's/^ *//g' | grep -P '.') +ACTIVEINDEX=0 +for i in "${AVAILABLELAYOUTS[@]}"; do + if [[ "$i" == '"'$ACTIVELAYOUT'"' ]]; then + break + else + ((ACTIVEINDEX+=1)) + fi +done + +ACTION=bar +if [ -n $1 ]; then + ACTION=$1 fi + +if [[ $ACTION == 'osk' ]]; then + FILE=/home/jpm/.local/state/onscreen-keyboard + if [ -f $FILE ]; then + rm $FILE + busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b false + else + touch $FILE + busctl call --user sm.puri.OSK0 /sm/puri/OSK0 sm.puri.OSK0 SetVisible b true + fi +elif [[ $ACTION == 'layout' ]]; then + # Simpler just to use 'next' to rotate input layouts + #((ACTIVEINDEX+=1)) + #if [[ $ACTIVEINDEX -eq ${#AVAILABLELAYOUTS[@]} ]]; then + #ACTIVEINDEX=0 + #fi + #swaymsg input type:keyboard $ACTIVEINDEX + swaymsg input type:keyboard xkb_switch_layout next + $0 bar +else + SHORT=$(echo $ACTIVELAYOUT | sed -r 's/.*\(([[:alpha:]]*)\).*/\1/') + if [[ $ACTIVEINDEX -ne 0 ]]; then + echo '{"text": "⌨  '$SHORT'", "tooltip": "Rotate keyboard layout", "class": "alternate"}' + else + echo '{"text": "⌨  '$SHORT'", "tooltip": "Rotate keyboard layout", "class": "primary"}' + fi +fi + +