From e1dbbc2c07face29ff2d0291b4301f226742055a Mon Sep 17 00:00:00 2001 From: noctuum <25441068+noctuum@users.noreply.github.com> Date: Thu, 19 Mar 2026 15:12:33 +0700 Subject: [PATCH] fix: accept boolean aliases for CLAUDE_MENU_BAR env var CLAUDE_MENU_BAR=0 was silently ignored after 07c1388 added strict validation. Since CLAUDE_USE_WAYLAND=1 establishes a boolean env var convention, users naturally try 0/1 for other vars too. Add alias resolution: 0/false/no/off -> hidden, 1/true/yes/on -> visible. Named values (auto/visible/hidden) continue to work as before. Invalid values still fall back to auto with a warning. Fixes #298 Co-Authored-By: Claude --- docs/CONFIGURATION.md | 6 +++--- scripts/frame-fix-wrapper.js | 14 +++++++++++--- scripts/launcher-common.sh | 12 +++++++++--- 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/docs/CONFIGURATION.md b/docs/CONFIGURATION.md index e703ca1..cd5c1b2 100644 --- a/docs/CONFIGURATION.md +++ b/docs/CONFIGURATION.md @@ -14,7 +14,7 @@ Model Context Protocol settings are stored in: | Variable | Default | Description | |----------|---------|-------------| | `CLAUDE_USE_WAYLAND` | unset | Set to `1` to use native Wayland instead of XWayland. Note: Global hotkeys won't work in native Wayland mode. | -| `CLAUDE_MENU_BAR` | unset (`auto`) | Controls menu bar behavior: `auto` (hidden, Alt toggles), `visible` (always shown), `hidden` (always hidden, Alt disabled). See [Menu Bar](#menu-bar) below. | +| `CLAUDE_MENU_BAR` | unset (`auto`) | Controls menu bar behavior: `auto` (hidden, Alt toggles), `visible` / `1` (always shown), `hidden` / `0` (always hidden, Alt disabled). See [Menu Bar](#menu-bar) below. | ### Wayland Support @@ -37,8 +37,8 @@ By default, the menu bar is hidden but can be toggled with the Alt key (`auto` m | Value | Menu visible | Alt toggles | Use case | |-------|-------------|-------------|----------| | unset / `auto` | No | Yes | Default — hidden, Alt toggles | -| `visible` | Yes | No | Stable layout, no shift on Alt | -| `hidden` | No | No | Menu fully disabled, Alt free | +| `visible` / `1` / `true` / `on` | Yes | No | Stable layout, no shift on Alt | +| `hidden` / `0` / `false` / `off` | No | No | Menu fully disabled, Alt free | ```bash # Always show the menu bar (no layout shift on Alt) diff --git a/scripts/frame-fix-wrapper.js b/scripts/frame-fix-wrapper.js index 0d3d7f3..0fc9b31 100644 --- a/scripts/frame-fix-wrapper.js +++ b/scripts/frame-fix-wrapper.js @@ -22,11 +22,19 @@ if (derivedResourcesPath !== process.resourcesPath) { // 'auto' - hidden by default, Alt toggles visibility (current default) // 'visible' - always visible, Alt does not toggle (stable layout) // 'hidden' - always hidden, Alt does not toggle +// Also accepts boolean-style aliases: 1/true/yes/on -> visible, 0/false/no/off -> hidden const VALID_MENU_BAR_MODES = ['auto', 'visible', 'hidden']; +const MENU_BAR_ALIASES = { + '1': 'visible', 'true': 'visible', 'yes': 'visible', 'on': 'visible', + '0': 'hidden', 'false': 'hidden', 'no': 'hidden', 'off': 'hidden', +}; const rawMenuBarMode = (process.env.CLAUDE_MENU_BAR || 'auto').toLowerCase(); -const MENU_BAR_MODE = VALID_MENU_BAR_MODES.includes(rawMenuBarMode) ? rawMenuBarMode : 'auto'; -if (rawMenuBarMode !== MENU_BAR_MODE) { - console.warn(`[Frame Fix] Unknown CLAUDE_MENU_BAR value '${process.env.CLAUDE_MENU_BAR}', falling back to 'auto'. Valid: ${VALID_MENU_BAR_MODES.join(', ')}`); +const resolvedMode = MENU_BAR_ALIASES[rawMenuBarMode] || rawMenuBarMode; +const MENU_BAR_MODE = VALID_MENU_BAR_MODES.includes(resolvedMode) ? resolvedMode : 'auto'; +if (resolvedMode !== rawMenuBarMode) { + console.log(`[Frame Fix] CLAUDE_MENU_BAR '${rawMenuBarMode}' resolved to '${resolvedMode}'`); +} else if (resolvedMode !== MENU_BAR_MODE) { + console.warn(`[Frame Fix] Unknown CLAUDE_MENU_BAR value '${process.env.CLAUDE_MENU_BAR}', falling back to 'auto'. Valid: ${VALID_MENU_BAR_MODES.join(', ')}, or 0/1/true/false/yes/no/on/off`); } console.log(`[Frame Fix] Menu bar mode: ${MENU_BAR_MODE}`); diff --git a/scripts/launcher-common.sh b/scripts/launcher-common.sh index 20b4994..ad7f7ac 100755 --- a/scripts/launcher-common.sh +++ b/scripts/launcher-common.sh @@ -271,14 +271,20 @@ run_doctor() { # -- Menu bar mode -- local menu_bar_mode="${CLAUDE_MENU_BAR:-}" if [[ -n $menu_bar_mode ]]; then - case "${menu_bar_mode,,}" in + local resolved_mode="${menu_bar_mode,,}" + # Resolve boolean-style aliases + case "$resolved_mode" in + 1|true|yes|on) resolved_mode='visible' ;; + 0|false|no|off) resolved_mode='hidden' ;; + esac + case "$resolved_mode" in auto|visible|hidden) - _pass "Menu bar mode: ${menu_bar_mode,,} (CLAUDE_MENU_BAR=$menu_bar_mode)" + _pass "Menu bar mode: $resolved_mode (CLAUDE_MENU_BAR=$menu_bar_mode)" ;; *) _warn "Unknown CLAUDE_MENU_BAR: '$menu_bar_mode'" _info 'Will fall back to auto' - _info "Valid values: auto, visible, hidden" + _info "Valid values: auto, visible, hidden (or 0/1/true/false/yes/no/on/off)" ;; esac else