* Add tab color feature to sidebar workspaces Lets users assign a custom background color to any sidebar workspace tab via a right-click "Tab Color" submenu. The primary motivation is working across multiple projects simultaneously — coloring tabs by project makes it instant to visually locate the right workspace without reading the title. - Workspace: adds `customColor: String?` (@Published hex string) and `setCustomColor()` setter - TabManager: adds `setTabColor(tabId:color:)` convenience method - ContentView: 16-color dark palette (all luminance < 0.30, white text always readable), `Color(hex:)` extension, `coloredCircleImage(hex:)` helper to render bitmapped NSImage circles (needed because macOS menus strip SwiftUI foregroundColor from SF Symbols), updated `backgroundColor` to use custom color at full/70%/35% opacity for active/inactive/ multi-selected states, "Tab Color" submenu in context menu with "Clear Color" option, and a 1.5pt `Color.primary` border overlay on the active tab for clear selection indication when custom colors are set * Add workspace tab color schemes with settings and debug toggles * Remove Kelly scheme and keep only original tab color palette * Preserve neutral grayscale when brightening tab colors * Harden UpdatePill UI test polling timeouts --------- Co-authored-by: Andreas Fruth <andreas.fruth@gmail.com>
190 lines
6.8 KiB
Bash
Executable file
190 lines
6.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
usage() {
|
|
cat <<'USAGE'
|
|
Usage: debug_windows_snapshot.sh [--domain <defaults-domain>] [--copy]
|
|
|
|
Collect Sidebar Debug, Background Debug, Menu Bar Extra, and Browser DevTools debug values
|
|
from macOS defaults and print a combined payload. Use --copy to also copy the payload.
|
|
|
|
Examples:
|
|
debug_windows_snapshot.sh
|
|
debug_windows_snapshot.sh --copy
|
|
debug_windows_snapshot.sh --domain dev.manaflow.cmux --copy
|
|
USAGE
|
|
}
|
|
|
|
domain=""
|
|
copy_flag=0
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--domain)
|
|
shift
|
|
[[ $# -gt 0 ]] || { echo "Missing value for --domain" >&2; exit 1; }
|
|
domain="$1"
|
|
;;
|
|
--copy)
|
|
copy_flag=1
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Unknown argument: $1" >&2
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
discover_domain() {
|
|
defaults domains 2>/dev/null \
|
|
| tr ',' '\n' \
|
|
| tr -d ' ' \
|
|
| grep -E 'cmux' \
|
|
| head -n1 || true
|
|
}
|
|
|
|
read_value() {
|
|
local key="$1"
|
|
local fallback="$2"
|
|
local value
|
|
value=$(defaults read "$domain" "$key" 2>/dev/null || true)
|
|
if [[ -z "$value" ]]; then
|
|
printf '%s' "$fallback"
|
|
else
|
|
printf '%s' "$value"
|
|
fi
|
|
}
|
|
|
|
format_number() {
|
|
local raw="$1"
|
|
local precision="$2"
|
|
if [[ "$raw" =~ ^-?[0-9]+([.][0-9]+)?$ ]]; then
|
|
printf "%.*f" "$precision" "$raw"
|
|
else
|
|
printf "%.*f" "$precision" 0
|
|
fi
|
|
}
|
|
|
|
if [[ -z "$domain" ]]; then
|
|
domain="$(discover_domain)"
|
|
fi
|
|
|
|
if [[ -z "$domain" ]]; then
|
|
echo "Could not auto-detect a cmux defaults domain. Pass --domain <bundle-id>." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! defaults domains 2>/dev/null | tr ',' '\n' | tr -d ' ' | grep -Fxq "$domain"; then
|
|
echo "Defaults domain '$domain' was not found on this machine." >&2
|
|
exit 1
|
|
fi
|
|
|
|
sidebarPreset="$(read_value sidebarPreset nativeSidebar)"
|
|
sidebarMaterial="$(read_value sidebarMaterial sidebar)"
|
|
sidebarBlendMode="$(read_value sidebarBlendMode behindWindow)"
|
|
sidebarState="$(read_value sidebarState followWindow)"
|
|
sidebarBlurOpacity="$(format_number "$(read_value sidebarBlurOpacity 0.79)" 2)"
|
|
sidebarTintHex="$(read_value sidebarTintHex '#101010')"
|
|
sidebarTintOpacity="$(format_number "$(read_value sidebarTintOpacity 0.54)" 2)"
|
|
sidebarCornerRadius="$(format_number "$(read_value sidebarCornerRadius 0.0)" 1)"
|
|
sidebarActiveTabIndicatorStyle="$(read_value sidebarActiveTabIndicatorStyle solidFill)"
|
|
shortcutHintSidebarXOffset="$(format_number "$(read_value shortcutHintSidebarXOffset 0.0)" 1)"
|
|
shortcutHintSidebarYOffset="$(format_number "$(read_value shortcutHintSidebarYOffset 0.0)" 1)"
|
|
shortcutHintTitlebarXOffset="$(format_number "$(read_value shortcutHintTitlebarXOffset 4.0)" 1)"
|
|
shortcutHintTitlebarYOffset="$(format_number "$(read_value shortcutHintTitlebarYOffset 0.0)" 1)"
|
|
shortcutHintPaneTabXOffset="$(format_number "$(read_value shortcutHintPaneTabXOffset 0.0)" 1)"
|
|
shortcutHintPaneTabYOffset="$(format_number "$(read_value shortcutHintPaneTabYOffset 0.0)" 1)"
|
|
shortcutHintAlwaysShow="$(read_value shortcutHintAlwaysShow 0)"
|
|
|
|
bgGlassEnabled="$(read_value bgGlassEnabled 1)"
|
|
bgGlassMaterial="$(read_value bgGlassMaterial hudWindow)"
|
|
bgGlassTintHex="$(read_value bgGlassTintHex '#000000')"
|
|
bgGlassTintOpacity="$(format_number "$(read_value bgGlassTintOpacity 0.05)" 2)"
|
|
|
|
menubarDebugPreviewEnabled="$(read_value menubarDebugPreviewEnabled 0)"
|
|
menubarDebugPreviewCount="$(read_value menubarDebugPreviewCount 1)"
|
|
menubarDebugBadgeRectX="$(format_number "$(read_value menubarDebugBadgeRectX 5.38)" 2)"
|
|
menubarDebugBadgeRectY="$(format_number "$(read_value menubarDebugBadgeRectY 6.43)" 2)"
|
|
menubarDebugBadgeRectWidth="$(format_number "$(read_value menubarDebugBadgeRectWidth 10.75)" 2)"
|
|
menubarDebugBadgeRectHeight="$(format_number "$(read_value menubarDebugBadgeRectHeight 11.58)" 2)"
|
|
menubarDebugSingleDigitFontSize="$(format_number "$(read_value menubarDebugSingleDigitFontSize 6.70)" 2)"
|
|
menubarDebugMultiDigitFontSize="$(format_number "$(read_value menubarDebugMultiDigitFontSize 6.70)" 2)"
|
|
menubarDebugSingleDigitYOffset="$(format_number "$(read_value menubarDebugSingleDigitYOffset 0.60)" 2)"
|
|
menubarDebugMultiDigitYOffset="$(format_number "$(read_value menubarDebugMultiDigitYOffset 0.60)" 2)"
|
|
legacySingleDigitX="$(read_value menubarDebugTextRectXAdjust '')"
|
|
if [[ -n "$legacySingleDigitX" ]]; then
|
|
menubarDebugSingleDigitXAdjust="$(format_number "$legacySingleDigitX" 2)"
|
|
else
|
|
menubarDebugSingleDigitXAdjust="$(format_number "$(read_value menubarDebugSingleDigitXAdjust -1.10)" 2)"
|
|
fi
|
|
menubarDebugMultiDigitXAdjust="$(format_number "$(read_value menubarDebugMultiDigitXAdjust 2.42)" 2)"
|
|
menubarDebugTextRectWidthAdjust="$(format_number "$(read_value menubarDebugTextRectWidthAdjust 1.80)" 2)"
|
|
|
|
browserDevToolsIconName="$(read_value browserDevToolsIconName 'wrench.and.screwdriver')"
|
|
browserDevToolsIconColor="$(read_value browserDevToolsIconColor bonsplitInactive)"
|
|
|
|
payload="$(cat <<PAYLOAD
|
|
# Defaults domain
|
|
$domain
|
|
|
|
# Sidebar Debug
|
|
sidebarPreset=$sidebarPreset
|
|
sidebarMaterial=$sidebarMaterial
|
|
sidebarBlendMode=$sidebarBlendMode
|
|
sidebarState=$sidebarState
|
|
sidebarBlurOpacity=$sidebarBlurOpacity
|
|
sidebarTintHex=$sidebarTintHex
|
|
sidebarTintOpacity=$sidebarTintOpacity
|
|
sidebarCornerRadius=$sidebarCornerRadius
|
|
sidebarActiveTabIndicatorStyle=$sidebarActiveTabIndicatorStyle
|
|
shortcutHintSidebarXOffset=$shortcutHintSidebarXOffset
|
|
shortcutHintSidebarYOffset=$shortcutHintSidebarYOffset
|
|
shortcutHintTitlebarXOffset=$shortcutHintTitlebarXOffset
|
|
shortcutHintTitlebarYOffset=$shortcutHintTitlebarYOffset
|
|
shortcutHintPaneTabXOffset=$shortcutHintPaneTabXOffset
|
|
shortcutHintPaneTabYOffset=$shortcutHintPaneTabYOffset
|
|
shortcutHintAlwaysShow=$shortcutHintAlwaysShow
|
|
|
|
# Background Debug
|
|
bgGlassEnabled=$bgGlassEnabled
|
|
bgGlassMaterial=$bgGlassMaterial
|
|
bgGlassTintHex=$bgGlassTintHex
|
|
bgGlassTintOpacity=$bgGlassTintOpacity
|
|
|
|
# Menu Bar Extra Debug
|
|
menubarDebugPreviewEnabled=$menubarDebugPreviewEnabled
|
|
menubarDebugPreviewCount=$menubarDebugPreviewCount
|
|
menubarDebugBadgeRectX=$menubarDebugBadgeRectX
|
|
menubarDebugBadgeRectY=$menubarDebugBadgeRectY
|
|
menubarDebugBadgeRectWidth=$menubarDebugBadgeRectWidth
|
|
menubarDebugBadgeRectHeight=$menubarDebugBadgeRectHeight
|
|
menubarDebugSingleDigitFontSize=$menubarDebugSingleDigitFontSize
|
|
menubarDebugMultiDigitFontSize=$menubarDebugMultiDigitFontSize
|
|
menubarDebugSingleDigitYOffset=$menubarDebugSingleDigitYOffset
|
|
menubarDebugMultiDigitYOffset=$menubarDebugMultiDigitYOffset
|
|
menubarDebugSingleDigitXAdjust=$menubarDebugSingleDigitXAdjust
|
|
menubarDebugMultiDigitXAdjust=$menubarDebugMultiDigitXAdjust
|
|
menubarDebugTextRectWidthAdjust=$menubarDebugTextRectWidthAdjust
|
|
|
|
# Browser DevTools Button
|
|
browserDevToolsIconName=$browserDevToolsIconName
|
|
browserDevToolsIconColor=$browserDevToolsIconColor
|
|
PAYLOAD
|
|
)"
|
|
|
|
printf '%s\n' "$payload"
|
|
|
|
if [[ "$copy_flag" -eq 1 ]]; then
|
|
if command -v pbcopy >/dev/null 2>&1; then
|
|
printf '%s' "$payload" | pbcopy
|
|
echo "Copied debug snapshot to clipboard."
|
|
else
|
|
echo "pbcopy not available; skipped clipboard copy." >&2
|
|
fi
|
|
fi
|