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).
60 lines
2 KiB
Bash
Executable file
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"
|