X-Git-Url: https://iankelling.org/git/?a=blobdiff_plain;f=filesystem%2Fusr%2Flocal%2Fbin%2Fabrowser;fp=filesystem%2Fusr%2Flocal%2Fbin%2Fabrowser;h=b67ec8164a21619b6be2cca6fc74efea52f1333e;hb=3342374657bd712f14cd772378b23d2bca3382cb;hp=d3ce6431f1053ecc4d4ffcb7527bba948c78ac6c;hpb=e801d1a57f0b30c57c6f644ab06a0f790159b236;p=distro-setup diff --git a/filesystem/usr/local/bin/abrowser b/filesystem/usr/local/bin/abrowser index d3ce643..b67ec81 100755 --- a/filesystem/usr/local/bin/abrowser +++ b/filesystem/usr/local/bin/abrowser @@ -21,6 +21,12 @@ # limitations under the License. +if ! test "$BASH_VERSION"; then echo "error: shell is not bash" >&2; exit 1; fi +shopt -s inherit_errexit 2>/dev/null ||: # ignore fail in bash < 4.4 +set -eE -o pipefail +trap 'echo "$0:$LINENO:error: \"$BASH_COMMAND\" exit status: $?, PIPESTATUS: ${PIPESTATUS[*]}" >&2' ERR + + # https://stackoverflow.com/a/2108540 tmp=:$PATH: del=/usr/local/bin @@ -38,8 +44,6 @@ PATH=$tmp # new tab -tmpf=$(mktemp) -i3-msg -t get_tree | jq -e '.nodes[].nodes[].nodes[].nodes | [.[]] + ( [.[].nodes[]]) | .[] | select(.window_properties.class=="abrowser") | .id' | sort >$tmpf # prefer abrowser if type -P abrowser &>/dev/null; then @@ -48,25 +52,4 @@ else b=firefox fi -$b "$@" & - -# on a fast computer, .5 is too fast, 1 is ok. on x200, 1 is too fast, 2 is ok. -sleep 2 -# debug -#printf "%s\n" "$*" >> /tmp/a -if (( $# == 0 )) && ! i3-msg -t get_tree | jq --stream -r 'select(.[1]|scalars!=null) | "\(.[0]|join(".")): \(.[1]|tojson)"' | grep 'marks.0: "abrowser"$' &>/dev/null; then - # explaining this jq nonsense. when the abrowser window starts, it - # might be in a vertical split container, and then it is nested down - # another level. the best way I could find to look in both levels was - # to get both, then combine them with + (and you have to turn them - # into a single array instead of a list of arrays with [.[]], or else - # it will add the arrays a bunch of times and give several results. - # comm gives us just the new id. - id=$(i3-msg -t get_tree | jq -e '.nodes[].nodes[].nodes[].nodes | [.[]] + ( [.[].nodes[]]) + ( [.[].nodes[].nodes[]]) + ( [.[].nodes[].nodes[].nodes[]]) | .[] | select(.window_properties.class=="'$b'") | .id' | comm -23 - $tmpf | head -n1) - rm -f $tmpf - if [[ $id ]]; then - i3-msg "[con_id=$id] mark abrowser" - fi -fi - -wait +$b "$@"