diff options
| author | tslil clingman <tslil@posteo.net> | 2022-01-27 17:11:55 -0500 |
|---|---|---|
| committer | tslil clingman <tslil@posteo.net> | 2022-01-27 17:11:55 -0500 |
| commit | 20c46801b996da5480c8270e86b3ca9c1943621d (patch) | |
| tree | 5827876c409a81c6b12363185e23ac1520200947 | |
| parent | 5e923399b11ed932d7c10bdf833b2da864d4b539 (diff) | |
sway inactive-windows-transparency.py
| -rw-r--r-- | sway/config | 1 | ||||
| -rwxr-xr-x | sway/inactive-windows-transparency.py | 69 |
2 files changed, 70 insertions, 0 deletions
diff --git a/sway/config b/sway/config index b1e68bb..4a6496b 100644 --- a/sway/config +++ b/sway/config @@ -201,6 +201,7 @@ bindsym $mod+Shift+r mode "resize" include /etc/sway/config.d/* +exec inactive-windows-transparency.py --opacity 0.8 exec wlsunset -l 39 -L -76 exec fnott exec pipewire diff --git a/sway/inactive-windows-transparency.py b/sway/inactive-windows-transparency.py new file mode 100755 index 0000000..b81134d --- /dev/null +++ b/sway/inactive-windows-transparency.py @@ -0,0 +1,69 @@ +#!/usr/bin/python + +# This script requires i3ipc-python package (install it from a system package manager +# or pip). +# It makes inactive windows transparent. Use `transparency_val` variable to control +# transparency strength in range of 0…1 or use the command line argument -o. + +import argparse +import i3ipc +import signal +import sys +from functools import partial + +def on_window_focus(inactive_opacity, ipc, event): + global prev_focused + global prev_workspace + + focused_workspace = ipc.get_tree().find_focused() + + if focused_workspace == None: + return + + focused = event.container + workspace = focused_workspace.workspace().num + + if focused.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859 + focused.command("opacity 1") + if workspace == prev_workspace: + prev_focused.command("opacity " + inactive_opacity) + prev_focused = focused + prev_workspace = workspace + + +def remove_opacity(ipc): + for workspace in ipc.get_tree().workspaces(): + for w in workspace: + w.command("opacity 1") + ipc.main_quit() + sys.exit(0) + + +if __name__ == "__main__": + transparency_val = "0.80" + + parser = argparse.ArgumentParser( + description="This script allows you to set the transparency of unfocused windows in sway." + ) + parser.add_argument( + "--opacity", + "-o", + type=str, + default=transparency_val, + help="set opacity value in range 0...1", + ) + args = parser.parse_args() + + ipc = i3ipc.Connection() + prev_focused = None + prev_workspace = ipc.get_tree().find_focused().workspace().num + + for window in ipc.get_tree(): + if window.focused: + prev_focused = window + else: + window.command("opacity " + args.opacity) + for sig in [signal.SIGINT, signal.SIGTERM]: + signal.signal(sig, lambda signal, frame: remove_opacity(ipc)) + ipc.on("window::focus", partial(on_window_focus, args.opacity)) + ipc.main()
\ No newline at end of file |
