diff options
| author | Robert Günzler <r@gnzler.io> | 2020-02-28 20:02:38 +0100 |
|---|---|---|
| committer | Robert Günzler <r@gnzler.io> | 2020-02-28 20:02:38 +0100 |
| commit | c767fe27018aa743dd695058dab464b77c37abdf (patch) | |
| tree | ba1156ab2a73cb1a9cfc08c7c79d802aed1bf9b0 /bin | |
| parent | cfe1931338b5ce52a27d7488b4d9d095cb9f483b (diff) | |
bin/swx: Add option to rotate a container using cage
The problem: I want to read PDFs and webpages on my laptop holding it upright. Using `swaymsg output $laptop transform 90 clockwise` works BUT the trackpad will now be unusable since it maps movements according to the new screen orientation. The solution: Spawn the window inside cage [1] which allows us to rotate just that container which will keep the input usable. [1]: https://github.com/Hjdskes/cage
Diffstat (limited to 'bin')
| -rwxr-xr-x | bin/swx | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/bin/swx b/bin/swx index 4d66051..4d86d06 100755 --- a/bin/swx +++ b/bin/swx @@ -7,7 +7,8 @@ output= geometry= termify= appid_override= -while getopts b:w:o:g:I:th name; do +rotate= +while getopts b:w:o:g:I:r:th name; do case "$name" in b) # border border="${OPTARG}" ;; @@ -21,6 +22,12 @@ while getopts b:w:o:g:I:th name; do termify=1 ;; I) # override app_id for non-terminal applications appid_override="${OPTARG}" ;; + r) # rotate + if ! command -v cage >/dev/null; then + printf "%s: cage not installed but required to rotate containers" "$0" >&2 + exit 1 + fi + rotate="${OPTARG}" ;; h|?) printf "usage: %s [-bwog] COMMAND\n" "$(basename "$0")" printf "\n" printf " -t \t\t(run COMMAND in \$TERM)\n" @@ -44,6 +51,8 @@ if [ -z "${arg0}" ]; then fi shift +# needs to be termified? +# spawn a $TERM instance and exec that if [ -n "${termify}" ]; then case ${TERM} in alacritty) args="--title=${arg0} --class=${arg0} --command" ;; @@ -55,6 +64,24 @@ else command="${arg0} $*" fi +# needs to be rotated +# spawn a cage(1) instance and exec that, takes previous $command +if [ -n "${rotate}" ]; then + # figure out how many "-r" flags we need + rotate_args="" + while [ $(( (rotate / 90) >= 1 )) = 1 ]; do + rotate_args="${rotate_args} -r" + rotate=$((rotate - 90)) + done + # allow for the firefox workaround that spawns a kiosk window + # under firejail (to avoid profile folder issues) + if echo "$command" | grep -E 'firefox'; then + command="firejail --overlay-tmpfs --profile=firefox ${command} --no-remote --kiosk" + fi + command="cage -d ${rotate_args} -- ${command}" + appid="wlroots" +fi + sway exec "${command}" >/dev/null sway_props_done= @@ -63,13 +90,13 @@ while [ -z "${sway_props_done}" ]; do if ! swq has appid "${appid}" | jq -e 'length>0'; then waiting=$((waiting+1)) if [ "${waiting}" -gt 20 ]; then - printf "Failed to run %s.\n" "${arg0}" + printf "%s: failed to run %s.\n" "$0" "${arg0}" >&2 if [ -z "${termify}" ]; then - printf "If you do see the application try running:\n" + printf "If you do see the application try running:\n" >&2 printf "%s -I %s %s\n" \ "$(basename "$0")" \ "$(swq current con | jq -r '.app_id')" \ - "${arg0} $*" + "${arg0} $*" >&2 fi exit 1 fi >&2 |