mostly improvements, wip
[distro-setup] / i3-split-maybe
index 69e42c547a723841fae1b7b9ba1cb4ced7ce9088..dcb268a6bf13034315acf4d2fe6e0a3b1e1100d3 100755 (executable)
@@ -29,21 +29,41 @@ set -e; . /usr/local/lib/bash-bear; set +e
 # just after a window is created, or just before a window is
 # created.
 #
-# *Doing it after a window is created allows you to move a window into
+# * Doing it after a window is created allows you to move a window into
 # the split that only has 1 window, whereas the other way doesn't. For
 # my use cases, I think I don't really want to move it into the split if
-# it is a tabbed split.
+# it is a tabbed split. upon further reflection, I've determined that
+# single window containers are inherently confusing because they tend to
+# exist and get nested at unexpected times and then it is unclear how to
+# get rid of them and what is going on and the benefit is generally not
+# worth it.  This command helps identify single window containers during
+# testing: /a/opt/i3ipc-python/examples/i3-debug-console.py
 #
-# *Doing it just before a windows is created, you need to
-# call this script, which means wrapping launch of a program, which I
-# have no way to do for all cases, I just do it for the common programs
-# I have bound to keys in i3.
+# * Doing it just before a windows is created, you need to call this
+# script, which means wrapping launch of a program, which I have no way
+# to do for all cases, I just do it for the common programs I have bound
+# to keys in i3.
 #
 # * Doing it after a window is created also leaves that split behind if
-# * the window is closed. I partially deal with that below.
+#   the window is closed. I partially deal with that below.
 #
 # I have a keybind which disables both, it runs /b/ds/i3-auto-layout-toggle
 
+
+dry_run=false
+m() { "$@"; }
+d() {
+  if $dry_run; then
+    printf "%s\n" "$*"
+  fi
+}
+case $1 in
+  -n)
+    dry_run=true
+    m() { printf "%s\n" "$*"; }
+    ;;
+esac
+
 if [[ -e /tmp/iank-i3-no-auto ]]; then
   exit 0
 fi
@@ -57,26 +77,27 @@ i3-msg -t get_workspaces | jq ".[]| select(.focused==true) | .rect | .width, .he
 
 i3-msg -t get_tree | jq -r ".. | select(.focused? == true).rect | .width, .height" >$tmp
 
-half_w=$(( screen_width / 2 + 100 ))
-half_h=$(( screen_height / 2 + 100 ))
+half_w=$(( screen_width / 2  ))
+half_h=$(( screen_height / 2  ))
 
 
 { read -r w; read -r h; } <$tmp
 
+d w=$w , h=$h , half_w=$half_w , half_h=$half_h
 
 if (( screen_width < 1920 )); then
   # haven't considered this case yet
   exit 0
 fi
 
-if (( w < half_w && h < half_h )); then
-  i3-msg "split vertical, layout tabbed"
+
+if (( w <= half_w && h <= half_h )); then
+  m i3-msg "split vertical, layout tabbed"
 elif (( w == screen_width )); then
-  :
   # if we had 2 windows on screen, made them vertical splits, then
   # closed one, it stays vertical split, but we want it horizontal at
   # that point. So, make it horizontal here.
-  i3-msg "split horizontal"
+  i3-msg "split horizontal"
 fi
 
 rm -f $tmp