From 20c46801b996da5480c8270e86b3ca9c1943621d Mon Sep 17 00:00:00 2001 From: tslil clingman Date: Thu, 27 Jan 2022 17:11:55 -0500 Subject: sway inactive-windows-transparency.py --- sway/config | 1 + sway/inactive-windows-transparency.py | 69 +++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100755 sway/inactive-windows-transparency.py (limited to 'sway') 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 -- cgit v1.2.3