Skip to content

Commit

Permalink
Improve transparency script
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
xenrox authored and ddevault committed Dec 6, 2019
1 parent fe7ec80 commit 6235423
Showing 1 changed file with 53 additions and 17 deletions.
70 changes: 53 additions & 17 deletions contrib/inactive-windows-transparency.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,62 @@
# 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.
# transparency strength in range of 0…1 or use the command line argument -o.

import argparse
import i3ipc
import signal
import sys

transparency_val = '0.8';
ipc = i3ipc.Connection()
prev_focused = None

for window in ipc.get_tree():
if window.focused:
prev_focused = window
else:
window.command('opacity ' + transparency_val)

def on_window_focus(ipc, focused):
def on_window_focus(ipc, event):
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
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()

ipc = i3ipc.Connection()
prev_focused = None
prev_workspace = ipc.get_tree().find_focused().workspace().num

ipc.on("window::focus", on_window_focus)
ipc.main()
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", on_window_focus)
ipc.main()

0 comments on commit 6235423

Please sign in to comment.