User-contributed scripts are being moved over to this repository: https://github.com/OctopusET/sway-contribmaster
parent
eebbecc780
commit
bb91b7f5fa
@ -1,124 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
|
|
||||||
# This script requires i3ipc-python package (install it from a system package manager
|
|
||||||
# or pip).
|
|
||||||
# It adds icons to the workspace name for each open window.
|
|
||||||
# Set your keybindings like this: set $workspace1 workspace number 1
|
|
||||||
# Add your icons to WINDOW_ICONS.
|
|
||||||
# Based on https://github.com/maximbaz/dotfiles/blob/master/bin/i3-autoname-workspaces
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import i3ipc
|
|
||||||
import logging
|
|
||||||
import re
|
|
||||||
import signal
|
|
||||||
import sys
|
|
||||||
|
|
||||||
WINDOW_ICONS = {
|
|
||||||
"firefox": "",
|
|
||||||
}
|
|
||||||
|
|
||||||
DEFAULT_ICON = ""
|
|
||||||
|
|
||||||
|
|
||||||
def icon_for_window(window):
|
|
||||||
name = None
|
|
||||||
if window.app_id is not None and len(window.app_id) > 0:
|
|
||||||
name = window.app_id.lower()
|
|
||||||
elif window.window_class is not None and len(window.window_class) > 0:
|
|
||||||
name = window.window_class.lower()
|
|
||||||
|
|
||||||
if name in WINDOW_ICONS:
|
|
||||||
return WINDOW_ICONS[name]
|
|
||||||
|
|
||||||
logging.info("No icon available for window with name: %s" % str(name))
|
|
||||||
return DEFAULT_ICON
|
|
||||||
|
|
||||||
def rename_workspaces(ipc):
|
|
||||||
for workspace in ipc.get_tree().workspaces():
|
|
||||||
name_parts = parse_workspace_name(workspace.name)
|
|
||||||
icon_tuple = ()
|
|
||||||
for w in workspace:
|
|
||||||
if w.app_id is not None or w.window_class is not None:
|
|
||||||
icon = icon_for_window(w)
|
|
||||||
if not ARGUMENTS.duplicates and icon in icon_tuple:
|
|
||||||
continue
|
|
||||||
icon_tuple += (icon,)
|
|
||||||
name_parts["icons"] = " ".join(icon_tuple) + " "
|
|
||||||
new_name = construct_workspace_name(name_parts)
|
|
||||||
ipc.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
|
|
||||||
|
|
||||||
|
|
||||||
def undo_window_renaming(ipc):
|
|
||||||
for workspace in ipc.get_tree().workspaces():
|
|
||||||
name_parts = parse_workspace_name(workspace.name)
|
|
||||||
name_parts["icons"] = None
|
|
||||||
new_name = construct_workspace_name(name_parts)
|
|
||||||
ipc.command('rename workspace "%s" to "%s"' % (workspace.name, new_name))
|
|
||||||
ipc.main_quit()
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
def parse_workspace_name(name):
|
|
||||||
return re.match(
|
|
||||||
"(?P<num>[0-9]+):?(?P<shortname>\w+)? ?(?P<icons>.+)?", name
|
|
||||||
).groupdict()
|
|
||||||
|
|
||||||
|
|
||||||
def construct_workspace_name(parts):
|
|
||||||
new_name = str(parts["num"])
|
|
||||||
if parts["shortname"] or parts["icons"]:
|
|
||||||
new_name += ":"
|
|
||||||
|
|
||||||
if parts["shortname"]:
|
|
||||||
new_name += parts["shortname"]
|
|
||||||
|
|
||||||
if parts["icons"]:
|
|
||||||
new_name += " " + parts["icons"]
|
|
||||||
|
|
||||||
return new_name
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description="This script automatically changes the workspace name in sway depending on your open applications."
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--duplicates",
|
|
||||||
"-d",
|
|
||||||
action="store_true",
|
|
||||||
help="Set it when you want an icon for each instance of the same application per workspace.",
|
|
||||||
)
|
|
||||||
parser.add_argument(
|
|
||||||
"--logfile",
|
|
||||||
"-l",
|
|
||||||
type=str,
|
|
||||||
default="/tmp/sway-autoname-workspaces.log",
|
|
||||||
help="Path for the logfile.",
|
|
||||||
)
|
|
||||||
args = parser.parse_args()
|
|
||||||
global ARGUMENTS
|
|
||||||
ARGUMENTS = args
|
|
||||||
|
|
||||||
logging.basicConfig(
|
|
||||||
level=logging.INFO,
|
|
||||||
filename=ARGUMENTS.logfile,
|
|
||||||
filemode="w",
|
|
||||||
format="%(message)s",
|
|
||||||
)
|
|
||||||
|
|
||||||
ipc = i3ipc.Connection()
|
|
||||||
|
|
||||||
for sig in [signal.SIGINT, signal.SIGTERM]:
|
|
||||||
signal.signal(sig, lambda signal, frame: undo_window_renaming(ipc))
|
|
||||||
|
|
||||||
def window_event_handler(ipc, e):
|
|
||||||
if e.change in ["new", "close", "move"]:
|
|
||||||
rename_workspaces(ipc)
|
|
||||||
|
|
||||||
ipc.on("window", window_event_handler)
|
|
||||||
|
|
||||||
rename_workspaces(ipc)
|
|
||||||
|
|
||||||
ipc.main()
|
|
||||||
|
|
@ -1,168 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
## Grimshot: a helper for screenshots within sway
|
|
||||||
## Requirements:
|
|
||||||
## - `grim`: screenshot utility for wayland
|
|
||||||
## - `slurp`: to select an area
|
|
||||||
## - `swaymsg`: to read properties of current window
|
|
||||||
## - `wl-copy`: clipboard utility
|
|
||||||
## - `jq`: json utility to parse swaymsg output
|
|
||||||
## - `notify-send`: to show notifications
|
|
||||||
## Those are needed to be installed, if unsure, run `grimshot check`
|
|
||||||
##
|
|
||||||
## See `man 1 grimshot` or `grimshot usage` for further details.
|
|
||||||
|
|
||||||
getTargetDirectory() {
|
|
||||||
test -f "${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs" && \
|
|
||||||
. "${XDG_CONFIG_HOME:-$HOME/.config}/user-dirs.dirs"
|
|
||||||
|
|
||||||
echo "${XDG_SCREENSHOTS_DIR:-${XDG_PICTURES_DIR:-$HOME}}"
|
|
||||||
}
|
|
||||||
|
|
||||||
NOTIFY=no
|
|
||||||
CURSOR=
|
|
||||||
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
key="$1"
|
|
||||||
|
|
||||||
case $key in
|
|
||||||
-n|--notify)
|
|
||||||
NOTIFY=yes
|
|
||||||
shift # past argument
|
|
||||||
;;
|
|
||||||
-c|--cursor)
|
|
||||||
CURSOR=yes
|
|
||||||
shift # past argument
|
|
||||||
;;
|
|
||||||
*) # unknown option
|
|
||||||
break # done with parsing --flags
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
ACTION=${1:-usage}
|
|
||||||
SUBJECT=${2:-screen}
|
|
||||||
FILE=${3:-$(getTargetDirectory)/$(date -Ins).png}
|
|
||||||
|
|
||||||
if [ "$ACTION" != "save" ] && [ "$ACTION" != "copy" ] && [ "$ACTION" != "check" ]; then
|
|
||||||
echo "Usage:"
|
|
||||||
echo " grimshot [--notify] [--cursor] (copy|save) [active|screen|output|area|window] [FILE|-]"
|
|
||||||
echo " grimshot check"
|
|
||||||
echo " grimshot usage"
|
|
||||||
echo ""
|
|
||||||
echo "Commands:"
|
|
||||||
echo " copy: Copy the screenshot data into the clipboard."
|
|
||||||
echo " save: Save the screenshot to a regular file or '-' to pipe to STDOUT."
|
|
||||||
echo " check: Verify if required tools are installed and exit."
|
|
||||||
echo " usage: Show this message and exit."
|
|
||||||
echo ""
|
|
||||||
echo "Targets:"
|
|
||||||
echo " active: Currently active window."
|
|
||||||
echo " screen: All visible outputs."
|
|
||||||
echo " output: Currently active output."
|
|
||||||
echo " area: Manually select a region."
|
|
||||||
echo " window: Manually select a window."
|
|
||||||
exit
|
|
||||||
fi
|
|
||||||
|
|
||||||
notify() {
|
|
||||||
notify-send -t 3000 -a grimshot "$@"
|
|
||||||
}
|
|
||||||
notifyOk() {
|
|
||||||
[ "$NOTIFY" = "no" ] && return
|
|
||||||
|
|
||||||
TITLE=${2:-"Screenshot"}
|
|
||||||
MESSAGE=${1:-"OK"}
|
|
||||||
notify "$TITLE" "$MESSAGE"
|
|
||||||
}
|
|
||||||
notifyError() {
|
|
||||||
if [ $NOTIFY = "yes" ]; then
|
|
||||||
TITLE=${2:-"Screenshot"}
|
|
||||||
MESSAGE=${1:-"Error taking screenshot with grim"}
|
|
||||||
notify -u critical "$TITLE" "$MESSAGE"
|
|
||||||
else
|
|
||||||
echo "$1"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
die() {
|
|
||||||
MSG=${1:-Bye}
|
|
||||||
notifyError "Error: $MSG"
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
check() {
|
|
||||||
COMMAND=$1
|
|
||||||
if command -v "$COMMAND" > /dev/null 2>&1; then
|
|
||||||
RESULT="OK"
|
|
||||||
else
|
|
||||||
RESULT="NOT FOUND"
|
|
||||||
fi
|
|
||||||
echo " $COMMAND: $RESULT"
|
|
||||||
}
|
|
||||||
|
|
||||||
takeScreenshot() {
|
|
||||||
FILE=$1
|
|
||||||
GEOM=$2
|
|
||||||
OUTPUT=$3
|
|
||||||
if [ -n "$OUTPUT" ]; then
|
|
||||||
grim ${CURSOR:+-c} -o "$OUTPUT" "$FILE" || die "Unable to invoke grim"
|
|
||||||
elif [ -z "$GEOM" ]; then
|
|
||||||
grim ${CURSOR:+-c} "$FILE" || die "Unable to invoke grim"
|
|
||||||
else
|
|
||||||
grim ${CURSOR:+-c} -g "$GEOM" "$FILE" || die "Unable to invoke grim"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if [ "$ACTION" = "check" ] ; then
|
|
||||||
echo "Checking if required tools are installed. If something is missing, install it to your system and make it available in PATH..."
|
|
||||||
check grim
|
|
||||||
check slurp
|
|
||||||
check swaymsg
|
|
||||||
check wl-copy
|
|
||||||
check jq
|
|
||||||
check notify-send
|
|
||||||
exit
|
|
||||||
elif [ "$SUBJECT" = "area" ] ; then
|
|
||||||
GEOM=$(slurp -d)
|
|
||||||
# Check if user exited slurp without selecting the area
|
|
||||||
if [ -z "$GEOM" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
WHAT="Area"
|
|
||||||
elif [ "$SUBJECT" = "active" ] ; then
|
|
||||||
FOCUSED=$(swaymsg -t get_tree | jq -r 'recurse(.nodes[]?, .floating_nodes[]?) | select(.focused)')
|
|
||||||
GEOM=$(echo "$FOCUSED" | jq -r '.rect | "\(.x),\(.y) \(.width)x\(.height)"')
|
|
||||||
APP_ID=$(echo "$FOCUSED" | jq -r '.app_id')
|
|
||||||
WHAT="$APP_ID window"
|
|
||||||
elif [ "$SUBJECT" = "screen" ] ; then
|
|
||||||
GEOM=""
|
|
||||||
WHAT="Screen"
|
|
||||||
elif [ "$SUBJECT" = "output" ] ; then
|
|
||||||
GEOM=""
|
|
||||||
OUTPUT=$(swaymsg -t get_outputs | jq -r '.[] | select(.focused)' | jq -r '.name')
|
|
||||||
WHAT="$OUTPUT"
|
|
||||||
elif [ "$SUBJECT" = "window" ] ; then
|
|
||||||
GEOM=$(swaymsg -t get_tree | jq -r '.. | select(.pid? and .visible?) | .rect | "\(.x),\(.y) \(.width)x\(.height)"' | slurp)
|
|
||||||
# Check if user exited slurp without selecting the area
|
|
||||||
if [ -z "$GEOM" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
WHAT="Window"
|
|
||||||
else
|
|
||||||
die "Unknown subject to take a screen shot from" "$SUBJECT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$ACTION" = "copy" ] ; then
|
|
||||||
takeScreenshot - "$GEOM" "$OUTPUT" | wl-copy --type image/png || die "Clipboard error"
|
|
||||||
notifyOk "$WHAT copied to buffer"
|
|
||||||
else
|
|
||||||
if takeScreenshot "$FILE" "$GEOM" "$OUTPUT"; then
|
|
||||||
TITLE="Screenshot of $SUBJECT"
|
|
||||||
MESSAGE=$(basename "$FILE")
|
|
||||||
notifyOk "$MESSAGE" "$TITLE"
|
|
||||||
echo "$FILE"
|
|
||||||
else
|
|
||||||
notifyError "Error taking screenshot with grim"
|
|
||||||
fi
|
|
||||||
fi
|
|
@ -1,109 +0,0 @@
|
|||||||
.\" Generated by scdoc 1.11.2
|
|
||||||
.\" Complete documentation for this program is not available as a GNU info page
|
|
||||||
.ie \n(.g .ds Aq \(aq
|
|
||||||
.el .ds Aq '
|
|
||||||
.nh
|
|
||||||
.ad l
|
|
||||||
.\" Begin generated content:
|
|
||||||
.TH "grimshot" "1" "2022-03-31"
|
|
||||||
.P
|
|
||||||
.SH NAME
|
|
||||||
.P
|
|
||||||
grimshot - a helper for screenshots within sway
|
|
||||||
.P
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.P
|
|
||||||
\fBgrimshot\fR [--notify] [--cursor] (copy|save) [TARGET] [FILE]
|
|
||||||
.br
|
|
||||||
\fBgrimshot\fR check
|
|
||||||
.br
|
|
||||||
\fBgrimshot\fR usage
|
|
||||||
.P
|
|
||||||
.SH OPTIONS
|
|
||||||
.P
|
|
||||||
\fB--notify\fR
|
|
||||||
.RS 4
|
|
||||||
Show notifications to the user that a screenshot has been taken.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fB--cursor\fR
|
|
||||||
.RS 4
|
|
||||||
Include cursors in the screenshot.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fBsave\fR
|
|
||||||
.RS 4
|
|
||||||
Save the screenshot into a regular file.\& Grimshot will write images
|
|
||||||
files to \fBXDG_SCREENSHOTS_DIR\fR if this is set (or defined
|
|
||||||
in \fBuser-dirs.\&dir\fR), or otherwise fall back to \fBXDG_PICTURES_DIR\fR.\&
|
|
||||||
Set FILE to '\&-'\& to pipe the output to STDOUT.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fBcopy\fR
|
|
||||||
.RS 4
|
|
||||||
Copy the screenshot data (as image/png) into the clipboard.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.P
|
|
||||||
Grimshot is an easy-to-use screenshot utility for sway.\& It provides a
|
|
||||||
convenient interface over grim, slurp and jq, and supports storing the
|
|
||||||
screenshot either directly to the clipboard using wl-copy or to a file.\&
|
|
||||||
.P
|
|
||||||
.SH EXAMPLES
|
|
||||||
.P
|
|
||||||
An example usage pattern is to add these bindings to your sway config:
|
|
||||||
.P
|
|
||||||
.nf
|
|
||||||
.RS 4
|
|
||||||
# Screenshots:
|
|
||||||
# Super+P: Current window
|
|
||||||
# Super+Shift+p: Select area
|
|
||||||
# Super+Alt+p Current output
|
|
||||||
# Super+Ctrl+p Select a window
|
|
||||||
|
|
||||||
bindsym Mod4+p exec grimshot save active
|
|
||||||
bindsym Mod4+Shift+p exec grimshot save area
|
|
||||||
bindsym Mod4+Mod1+p exec grimshot save output
|
|
||||||
bindsym Mod4+Ctrl+p exec grimshot save window
|
|
||||||
.fi
|
|
||||||
.RE
|
|
||||||
.P
|
|
||||||
.SH TARGETS
|
|
||||||
.P
|
|
||||||
grimshot can capture the following named targets:
|
|
||||||
.P
|
|
||||||
\fIactive\fR
|
|
||||||
.RS 4
|
|
||||||
Captures the currently active window.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fIscreen\fR
|
|
||||||
.RS 4
|
|
||||||
Captures the entire screen.\& This includes all visible outputs.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fIarea\fR
|
|
||||||
.RS 4
|
|
||||||
Allows manually selecting a rectangular region, and captures that.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fIwindow\fR
|
|
||||||
.RS 4
|
|
||||||
Allows manually selecting a single window (by clicking on it), and
|
|
||||||
captures it.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
\fIoutput\fR
|
|
||||||
.RS 4
|
|
||||||
Captures the currently active output.\&
|
|
||||||
.P
|
|
||||||
.RE
|
|
||||||
.SH OUTPUT
|
|
||||||
.P
|
|
||||||
Grimshot will print the filename of the captured screenshot to stdout if called
|
|
||||||
with the \fIsave\fR subcommand.\&
|
|
||||||
.P
|
|
||||||
.SH SEE ALSO
|
|
||||||
.P
|
|
||||||
\fBgrim\fR(1)
|
|
@ -1,80 +0,0 @@
|
|||||||
grimshot(1)
|
|
||||||
|
|
||||||
# NAME
|
|
||||||
|
|
||||||
grimshot - a helper for screenshots within sway
|
|
||||||
|
|
||||||
# SYNOPSIS
|
|
||||||
|
|
||||||
*grimshot* [--notify] [--cursor] (copy|save) [TARGET] [FILE]++
|
|
||||||
*grimshot* check++
|
|
||||||
*grimshot* usage
|
|
||||||
|
|
||||||
# OPTIONS
|
|
||||||
|
|
||||||
*--notify*
|
|
||||||
Show notifications to the user that a screenshot has been taken.
|
|
||||||
|
|
||||||
*--cursor*
|
|
||||||
Include cursors in the screenshot.
|
|
||||||
|
|
||||||
*save*
|
|
||||||
Save the screenshot into a regular file. Grimshot will write image
|
|
||||||
files to *XDG_SCREENSHOTS_DIR* if this is set (or defined
|
|
||||||
in *user-dirs.dir*), or otherwise fall back to *XDG_PICTURES_DIR*.
|
|
||||||
Set FILE to '-' to pipe the output to STDOUT.
|
|
||||||
|
|
||||||
*copy*
|
|
||||||
Copy the screenshot data (as image/png) into the clipboard.
|
|
||||||
|
|
||||||
# DESCRIPTION
|
|
||||||
|
|
||||||
Grimshot is an easy-to-use screenshot utility for sway. It provides a
|
|
||||||
convenient interface over grim, slurp and jq, and supports storing the
|
|
||||||
screenshot either directly to the clipboard using wl-copy or to a file.
|
|
||||||
|
|
||||||
# EXAMPLES
|
|
||||||
|
|
||||||
An example usage pattern is to add these bindings to your sway config:
|
|
||||||
|
|
||||||
```
|
|
||||||
# Screenshots:
|
|
||||||
# Super+P: Current window
|
|
||||||
# Super+Shift+p: Select area
|
|
||||||
# Super+Alt+p Current output
|
|
||||||
# Super+Ctrl+p Select a window
|
|
||||||
|
|
||||||
bindsym Mod4+p exec grimshot save active
|
|
||||||
bindsym Mod4+Shift+p exec grimshot save area
|
|
||||||
bindsym Mod4+Mod1+p exec grimshot save output
|
|
||||||
bindsym Mod4+Ctrl+p exec grimshot save window
|
|
||||||
```
|
|
||||||
|
|
||||||
# TARGETS
|
|
||||||
|
|
||||||
grimshot can capture the following named targets:
|
|
||||||
|
|
||||||
_active_
|
|
||||||
Captures the currently active window.
|
|
||||||
|
|
||||||
_screen_
|
|
||||||
Captures the entire screen. This includes all visible outputs.
|
|
||||||
|
|
||||||
_area_
|
|
||||||
Allows manually selecting a rectangular region, and captures that.
|
|
||||||
|
|
||||||
_window_
|
|
||||||
Allows manually selecting a single window (by clicking on it), and
|
|
||||||
captures it.
|
|
||||||
|
|
||||||
_output_
|
|
||||||
Captures the currently active output.
|
|
||||||
|
|
||||||
# OUTPUT
|
|
||||||
|
|
||||||
Grimshot will print the filename of the captured screenshot to stdout if called
|
|
||||||
with the _save_ subcommand.
|
|
||||||
|
|
||||||
# SEE ALSO
|
|
||||||
|
|
||||||
*grim*(1)
|
|
@ -1,69 +0,0 @@
|
|||||||
#!/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()
|
|
Loading…
Reference in new issue