mirror of
https://github.com/swaywm/sway.git
synced 2026-04-23 06:46:27 -04:00
When using multiple monitors, each monitor has a separate workspace. Default behavior remains the same. An --allinactive/-a flag is added. When this flag is used, all inactive windows on all workspaces will become transparent upon focus change.
78 lines
No EOL
2.3 KiB
Python
Executable file
78 lines
No EOL
2.3 KiB
Python
Executable file
#!/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, allinactive, 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 allinactive:
|
|
prev_focused.command("opacity " + inactive_opacity)
|
|
elif workspace == prev_workspace:
|
|
prev_focused.command("opacity " + inactive_opacity)
|
|
prev_focused = focused
|
|
prev_workspace = workspace
|
|
|
|
|
|
def remove_transparency(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",
|
|
)
|
|
parser.add_argument(
|
|
"--allinactive",
|
|
"-a",
|
|
dest="allinactive",
|
|
action="store_true",
|
|
help="Whether windows in the inactive workspace should also be made transparent.",
|
|
)
|
|
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_transparency(ipc))
|
|
ipc.on("window::focus", partial(on_window_focus, args.opacity, args.allinactive))
|
|
ipc.main() |