X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=i3-split-maybe;h=dcb268a6bf13034315acf4d2fe6e0a3b1e1100d3;hb=e6cd2e555df3af0cf23da016b833529a34ffc84c;hp=69e42c547a723841fae1b7b9ba1cb4ced7ce9088;hpb=3ba18a2c386a5a9962cf7b47f490a17f244a0774;p=distro-setup diff --git a/i3-split-maybe b/i3-split-maybe index 69e42c5..dcb268a 100755 --- a/i3-split-maybe +++ b/i3-split-maybe @@ -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" + m i3-msg "split horizontal" fi rm -f $tmp