Improve transparency script

Transparency gets reset when the script is terminated.
Added command line option to set transparency strength without changing
the script.
Added support for multiple displays.
This commit is contained in:
Thorben Günther 2019-12-05 13:15:41 +01:00 committed by Drew DeVault
parent fe7ec8024c
commit 6235423544

View file

@ -3,26 +3,62 @@
# This script requires i3ipc-python package (install it from a system package manager # This script requires i3ipc-python package (install it from a system package manager
# or pip). # or pip).
# It makes inactive windows transparent. Use `transparency_val` variable to control # It makes inactive windows transparent. Use `transparency_val` variable to control
# transparency strength in range of 0…1. # transparency strength in range of 0…1 or use the command line argument -o.
import argparse
import i3ipc import i3ipc
import signal
import sys
def on_window_focus(ipc, event):
global prev_focused
global prev_workspace
focused = event.container
workspace = ipc.get_tree().find_focused().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 " + transparency_val)
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()
transparency_val = '0.8';
ipc = i3ipc.Connection() ipc = i3ipc.Connection()
prev_focused = None prev_focused = None
prev_workspace = ipc.get_tree().find_focused().workspace().num
for window in ipc.get_tree(): for window in ipc.get_tree():
if window.focused: if window.focused:
prev_focused = window prev_focused = window
else: else:
window.command('opacity ' + transparency_val) window.command("opacity " + args.opacity)
for sig in [signal.SIGINT, signal.SIGTERM]:
def on_window_focus(ipc, focused): signal.signal(sig, lambda signal, frame: remove_opacity(ipc))
global prev_focused
if focused.container.id != prev_focused.id: # https://github.com/swaywm/sway/issues/2859
focused.container.command('opacity 1')
prev_focused.command('opacity ' + transparency_val)
prev_focused = focused.container
ipc.on("window::focus", on_window_focus) ipc.on("window::focus", on_window_focus)
ipc.main() ipc.main()