aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2023-04-14 19:04:51 +0200
committerSimon Ser <contact@emersion.fr>2023-08-02 17:18:38 +0200
commitbb91b7f5fa7fddb582b8dddf208cc335d39da9e7 (patch)
tree74711d51b92a86ad5d633ea57e6198a7bdd86545
parenteebbecc7801ea520dd5644b08e884fbe27c2eeda (diff)
Move contrib/ to separate repository
User-contributed scripts are being moved over to this repository: https://github.com/OctopusET/sway-contrib
-rwxr-xr-xcontrib/autoname-workspaces.py124
-rwxr-xr-xcontrib/grimshot168
-rw-r--r--contrib/grimshot.1109
-rw-r--r--contrib/grimshot.1.scd80
-rwxr-xr-xcontrib/inactive-windows-transparency.py69
5 files changed, 0 insertions, 550 deletions
diff --git a/contrib/autoname-workspaces.py b/contrib/autoname-workspaces.py
deleted file mode 100755
index 3ec39928..00000000
--- a/contrib/autoname-workspaces.py
+++ /dev/null
@@ -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()
-
diff --git a/contrib/grimshot b/contrib/grimshot
deleted file mode 100755
index 1ec19def..00000000
--- a/contrib/grimshot
+++ /dev/null
@@ -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
diff --git a/contrib/grimshot.1 b/contrib/grimshot.1
deleted file mode 100644
index 2c4c6a95..00000000
--- a/contrib/grimshot.1
+++ /dev/null
@@ -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)
diff --git a/contrib/grimshot.1.scd b/contrib/grimshot.1.scd
deleted file mode 100644
index e356f99d..00000000
--- a/contrib/grimshot.1.scd
+++ /dev/null
@@ -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)
diff --git a/contrib/inactive-windows-transparency.py b/contrib/inactive-windows-transparency.py
deleted file mode 100755
index b81134dd..00000000
--- a/contrib/inactive-windows-transparency.py
+++ /dev/null
@@ -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() \ No newline at end of file