Add the "improved-workspace-indicator" GNOME extension
This commit is contained in:
parent
f9601c310c
commit
f52d4e4cc6
6 changed files with 124 additions and 5 deletions
|
|
@ -3,7 +3,7 @@
|
|||
# This file's name matches the CLI convention in ~/.local/bin
|
||||
# pylint: disable=invalid-name
|
||||
|
||||
# Templates for six consumers live here
|
||||
# Templates for seven consumers live here
|
||||
# => Length of file is managable
|
||||
# pylint: disable=too-many-lines
|
||||
|
||||
|
|
@ -884,6 +884,41 @@ def render_rofi(colors: dict[str, str]) -> str:
|
|||
""")
|
||||
|
||||
|
||||
def render_workspace_indicator(colors: dict[str, str]) -> str:
|
||||
"""Render ~/.config/improved-workspace-indicator/stylesheet.css."""
|
||||
return textwrap.dedent(f"""\
|
||||
/* Written by ~/.local/bin/color-palette */
|
||||
/* accent={colors['_accent']} scheme={colors['_scheme']} */
|
||||
|
||||
.panel-workspace-indicator {{
|
||||
padding: 0 2px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
}}
|
||||
|
||||
.panel-workspace-indicator-box {{
|
||||
padding: 0;
|
||||
}}
|
||||
|
||||
.panel-workspace-indicator {{
|
||||
padding: 1px 8px;
|
||||
margin: 0 3px;
|
||||
border: 0;
|
||||
border-radius: 8px;
|
||||
font-size: 10pt;
|
||||
font-weight: 600;
|
||||
color: {colors['chrome-quiet']};
|
||||
background-color: {colors['surface-dim']};
|
||||
}}
|
||||
|
||||
.panel-workspace-indicator.workspace-indicator-active {{
|
||||
font-weight: 700;
|
||||
color: {colors['text']};
|
||||
background-color: {colors['accent']};
|
||||
}}
|
||||
""")
|
||||
|
||||
|
||||
def show_colors(colors: dict[str, str]) -> None:
|
||||
"""Print all derived colors of this run for debugging."""
|
||||
print(
|
||||
|
|
@ -997,6 +1032,10 @@ def write_consumers(colors: dict[str, str]) -> int:
|
|||
content=render_rofi(colors),
|
||||
target=config_home / "rofi" / "colors.rasi",
|
||||
),
|
||||
write_file(
|
||||
content=render_workspace_indicator(colors),
|
||||
target=config_home / "improved-workspace-indicator" / "stylesheet.css",
|
||||
),
|
||||
)
|
||||
|
||||
return 0 if all(results) else 1
|
||||
|
|
|
|||
|
|
@ -48,5 +48,12 @@ if gnome-extensions list --enabled 2>/dev/null | grep -qxF "forge@jmmaranan.com"
|
|||
gsettings set $Forge window-gap-size "uint32 $_gap"
|
||||
fi
|
||||
|
||||
# The "workspace indicator" extension only re-reads its stylesheet on a restart
|
||||
_iwi=improved-workspace-indicator@michaelaquilina.github.io
|
||||
if gnome-extensions list --enabled 2>/dev/null | grep -qxF "$_iwi"; then
|
||||
gnome-extensions disable "$_iwi"
|
||||
gnome-extensions enable "$_iwi"
|
||||
fi
|
||||
|
||||
|
||||
echo "Switched the color theme to $new_theme"
|
||||
|
|
|
|||
38
.local/bin/workspace-switch-to-empty
Executable file
38
.local/bin/workspace-switch-to-empty
Executable file
|
|
@ -0,0 +1,38 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Jump to the first empty workspace
|
||||
#
|
||||
# Triggered by <Super>n
|
||||
# as defined in [org/gnome/settings-daemon/plugins/media-keys]
|
||||
# in ~/.config/gnome-settings/key-bindings.ini
|
||||
#
|
||||
# Note: This assumes that only the main monitor has workspaces enabled
|
||||
# (see ~/.local/bin/move-window-to-empty-workspace)
|
||||
|
||||
set -eu
|
||||
|
||||
|
||||
occupied=$(wmctrl -l) || exit 1 # fail safe
|
||||
occupied=$(echo "$occupied" | awk '{print $2}' | sort -u)
|
||||
|
||||
total=$(wmctrl -d | wc -l)
|
||||
|
||||
|
||||
# 0-based index for the first workspace
|
||||
i=0
|
||||
|
||||
while [ "$i" -lt "$total" ]; do
|
||||
|
||||
if ! echo "$occupied" | grep -qx "$i"; then
|
||||
exec wmctrl -s "$i"
|
||||
fi
|
||||
|
||||
i=$((i + 1))
|
||||
|
||||
done
|
||||
|
||||
|
||||
command -v notify-send >/dev/null \
|
||||
&& notify-send 'Workspaces' 'No empty workspace available'
|
||||
|
||||
exit 1
|
||||
Loading…
Reference in a new issue