minor fix
authorIan Kelling <ian@iankelling.org>
Mon, 8 Jul 2024 00:55:58 +0000 (20:55 -0400)
committerIan Kelling <ian@iankelling.org>
Mon, 8 Jul 2024 00:55:58 +0000 (20:55 -0400)
distro-end
myx

index d75553a914203520c4250d5f678b0393fd4ae86e..30bb4ec04f051278e9a087ff5220119b4bb36e26 100755 (executable)
@@ -755,6 +755,7 @@ EOF
       if [[ ! -e /etc/apt/preferences.d/system76-apt-preferences ]]; then
         check_downgrade=true
       fi
+      # note this installs a kernel
       pi system76-firmware system76-driver fwupd
       if $check_downgrade && [[ -e /etc/apt/preferences.d/system76-apt-preferences ]]; then
         # driver installs a preferences file to give s76 packages
diff --git a/myx b/myx
index f71610d8429f3d7a58239c2267bc8de145fb7c70..7b8de6b9756180573ea57013c91353497051e181 100755 (executable)
--- a/myx
+++ b/myx
@@ -270,20 +270,12 @@ if [[ $secondary_out ]]; then
 fi
 echo "bindsym \$mod+Shift+t move workspace to output ${move_outputs[*]}" >>~/i3-myx.conf
 m /a/bin/ds/i3-sway/gen
-# give it some time to reload
+# give it some time to reload or adjust to new x settings.
 sleep 1
 
 if (( ${#ws_outputs[@]} )); then
-  # this bit is so that we only move workspaces that need to be moved
-  # and we don't have to ignore errors. A waste of time, but
-  # it was fun.
-  declare -A ws_to_out
-  tmps=$(i3 -t get_workspaces)
-  tmps=$(jq -r '.[] | .num, .output' <<<"$tmps")
-  while read -r ws; do
-    read -r output || break
-    ws_to_out["$ws"]=$output
-  done <<<"$tmps"
+
+  declare -A ws_expected_out
 
   for (( i=0; i<total_ws_count; i++ )); do
     ws=$(( i+1 ))
@@ -293,9 +285,32 @@ if (( ${#ws_outputs[@]} )); then
     if [[ $tmp ]]; then
       ws_out=$tmp
     fi
-    if [[ ${ws_to_out[$ws]} && ${ws_to_out[$ws]} != "$ws_out" ]]; then
-      m i3 '[workspace="'$ws'"]' move workspace to output $ws_out
+    ws_expected_out[$((i + 1))]=$ws_out
+  done
+
+  # If we move a workspace, it could cause an empty workspace to
+  # disappear, and then we need to refresh our list. refresh_count is a
+  # sanity check to make sure this doesn't go wrong and cause an
+  # infinite loop.
+  refresh_count=0
+  refresh_workspaces=true
+  while $refresh_workspaces; do
+    if (( refresh_count > 20 )); then
+      echo "error. moving workspaces is not working as expected" >&2
+      exit 1
     fi
+    refresh_count=$(( refresh_count + 1 ))
+    refresh_workspaces=false
+    tmps=$(i3 -t get_workspaces)
+    tmps=$(jq -r '.[] | .num, .output' <<<"$tmps")
+    while read -r ws; do
+      read -r output || break
+      if [[ ${ws_expected_out[$ws]} != "$output" ]]; then
+        m i3 '[workspace="'$ws'"]' move workspace to output $output
+        refresh_workspaces=true
+        break
+      fi
+    done <<<"$tmps"
   done
 fi
 ## end i3 config ##