1
0
Fork 0
gnu-plus-dotfiles/dot_config/sway/toggle-dropdown.sh
rain 27ae3a3b18 sway: drop -t 2000/-t 3000 from notify-send, source restore-wayland-env in toggle-dropdown/wifi-menu
The actual cause of 'caffeine notification doesn't show' was the
-t 2000 timeout: the notification popped for 2 seconds and self-cleared
before the user could see it. Manual notify-send from a terminal (no
-t flag) used mako's default-timeout=5000 and was visible — so the user
saw my test notifications but not their own clicks.

Fix: drop the -t flag everywhere so mako config owns the duration.
Added: source restore-wayland-env.sh in toggle-dropdown.sh and
wifi-menu.sh — same env-loss pattern as caffeine.sh, would have
been next on the bug list.

Verified on tadbit: -t 2000 notification visible at +0.5s, gone at
+2.5s (user missed it). No -t flag: visible at +0.5s, gone at +5.5s
(visible long enough to read).
2026-06-23 22:24:16 -04:00

60 lines
2 KiB
Bash
Executable file

#!/bin/bash
# toggle-dropdown.sh — toggle the dropdown foot terminal
# Writes debug info to /tmp/sway-f12.log so we can diagnose from SSH
#
# waybar's on-click context strips WAYLAND_DISPLAY, which swaymsg + foot
# both need. Source restore-wayland-env.sh at the top so the entire
# script runs with the right env (mirrors caffeine.sh's pattern).
# shellcheck source=restore-wayland-env.sh
source "$HOME/.config/sway/restore-wayland-env.sh"
LOG=/tmp/sway-f12.log
echo "=== $(date) F12/Super+grave pressed ===" >> "$LOG"
echo "WAYLAND_DISPLAY=$WAYLAND_DISPLAY" >> "$LOG"
echo "USER=$USER XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR" >> "$LOG"
# Find the sway socket
SOCK=$(ls -t /run/user/$(id -u)/sway-ipc.*.sock 2>/dev/null | head -1)
echo "SOCK=$SOCK" >> "$LOG"
if [ -z "$SOCK" ]; then
echo "ERROR: no sway socket found" >> "$LOG"
notify-send "sway: no IPC socket" 2>>"$LOG" || true
exit 1
fi
# Check if a foot window is in the scratchpad (hidden)
HIDDEN=$(SWAYSOCK=$SOCK swaymsg -t get_tree 2>>"$LOG" | python3 -c "
import sys, json
try:
tree = json.load(sys.stdin)
def find_app(node, app_id):
if node.get('app_id') == app_id and node.get('name', '').startswith('__i3'):
return node
for c in node.get('nodes', []) + node.get('floating_nodes', []):
r = find_app(c, app_id)
if r is not None:
return r
return None
dd = find_app(tree, 'foot')
print('hidden' if dd is not None else 'none')
except Exception as e:
print(f'err:{e}')
" 2>>"$LOG")
echo "HIDDEN=$HIDDEN" >> "$LOG"
if [ "$HIDDEN" = "hidden" ]; then
SWAYSOCK=$SOCK swaymsg '[app_id="foot"] scratchpad show' >>"$LOG" 2>&1
echo "toggled: scratchpad show" >> "$LOG"
else
# Spawn a new foot. WAYLAND_DISPLAY is now set by restore-wayland-env.sh.
if [ -n "$WAYLAND_DISPLAY" ]; then
WAYLAND_DISPLAY=$WAYLAND_DISPLAY foot >>"$LOG" 2>&1 &
else
foot >>"$LOG" 2>&1 &
fi
echo "spawned foot" >> "$LOG"
fi
echo "=== done ===" >> "$LOG"