[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-76138":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":13,"stars7d":16,"stars30d":17,"stars90d":15,"forks30d":15,"starsTrendScore":12,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":20,"hasPages":20,"topics":22,"createdAt":9,"pushedAt":9,"updatedAt":23,"readmeContent":24,"aiSummary":25,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":26,"discoverSource":27},76138,"cmdcmd","peterp\u002Fcmdcmd","peterp","Keyboard-first window switcher for macOS. Press both ⌘ keys to fan windows into a grid of live previews.",null,"Swift",165,6,2,1,0,9,22,53.24,"Other",false,"main",[],"2026-06-12 04:01:20","\u003Cp align=\"center\">\n  \u003Cimg src=\"Resources\u002FAppIcon.png\" width=\"128\" height=\"128\" alt=\"cmdcmd\">\n\u003C\u002Fp>\n\n# cmdcmd\n\nA keyboard-first window switcher for macOS. Press both ⌘ keys at once to fan every visible window out into a grid of live previews, then jump straight to the one you want.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"cmdcmd.webp\" alt=\"cmdcmd demo\">\n\u003C\u002Fp>\n\nRequires macOS 14+.\n\n## Trigger\n\n**⌘ + ⌘** — tap left and right Command at the same time (no other key in between). Tap again, or press `esc`, to dismiss.\n\n## Keybindings (overlay)\n\n| Key | Action |\n|---|---|\n| arrow keys | Move selection |\n| type a tile's prefix | Pick that tile (e.g. `gc` for Google Chrome — see Tile labels below) |\n| `return` | Pick selected tile |\n| `space` (hold) | Peek (zoom selected tile while held) |\n| click \u002F drag | Pick or drag-to-reorder |\n| ⌘ + arrow | Swap selected tile with neighbour in that direction |\n| ⌘W | Close selected window |\n| ⌘F | Search \u002F filter visible windows (substring match on app + title) |\n| ⌥`g`\u002F`b`\u002F`r`\u002F`y`\u002F`o`\u002F`p` | Tag selected tile (green\u002Fblue\u002Fred\u002Fyellow\u002Forange\u002Fpurple) |\n| ⌥`0` | Clear tag on selected tile |\n| `delete` | Pop the last char from the pick buffer |\n| `esc` | Clear pick buffer, or dismiss overlay |\n\n### Tile labels\n\nEach tile gets a 2-char prefix derived from its app name — `gc` for Google Chrome, `wa` for WhatsApp, `cu` for Cursor, `cc` for Claude Code. Type the prefix to pick + activate the window; the matched portion highlights in yellow as you type, and tiles whose prefix doesn't match dim.\n\nA second window of the same app keeps the first letter and grabs the next home-row letter (`gj`, `gk`, …). Cross-app collisions extend to 3 chars (Calendar vs Camera → `ca` vs `cam`). Assignments are sticky — closing one window doesn't reshuffle the others.\n\nSwitch to numeric `1`–`9` picks (and `wasd` movement, `⌃+letter` app jump) by setting `\"tilePicks\": \"numbers\"` in the config or via Settings.\n\nTile order persists per display via `UserDefaults`. Idle windows (no draw activity for ~2.5s) get a subtle indicator dot.\n\n### Config file\n\nRight-click the `⌘ ⌘` Dock icon and pick **Open Config…** — that opens `~\u002FLibrary\u002FApplication Support\u002Fcmdcmd\u002Fconfig.json` in your default editor. The file is auto-created on first launch, pre-populated with every default binding annotated by an inline `\u002F\u002F comment`. Loaded at app launch; restart after edits. `\u002F\u002F line comments` are stripped before JSON parsing.\n\n```json\n{\n  \"animations\": true,\n  \"trigger\": \"cmd-cmd\",\n  \"bindings\": {\n    \"h\": \"move-left\",\n    \"j\": \"move-down\",\n    \"k\": \"move-up\",\n    \"l\": \"move-right\",\n    \"cmd+x\": \"close\"\n  }\n}\n```\n\n`animations: false` skips the show \u002F pick zoom transitions.\n\n`trigger` chooses what summons the overlay. Default `\"cmd-cmd\"` is the both-Command-keys chord. Anything else is treated as a regular hotkey spec — e.g. `\"cmd+shift+space\"` or `\"f13\"` (uses the same shortcut grammar as `bindings`). Hotkeys other than the chord require Accessibility permission to be globally observable.\n\nBinding spec — modifier tokens: `cmd`, `shift`, `opt` (or `option`\u002F`alt`), `ctrl`. Special keys: `esc`, `space`, `return`, `delete`, `left`, `right`, `up`, `down`. Anything else is a single character.\n\nActions: `pick`, `dismiss`, `move-left|right|up|down`, `swap-left|right|up|down`, `pick-1` … `pick-9`, `close`, `search`, `tag-green|blue|red|yellow|orange|purple|clear`.\n\n## Build\n\n```sh\n.\u002Fbuild-app.sh           # debug build → cmdcmd.app\n.\u002Fbuild-app.sh release   # release build\nopen cmdcmd.app\n```\n\nOr run the binary directly:\n\n```sh\nswift build\n.build\u002Fdebug\u002Fcmdcmd\n```\n\n## Releasing\n\nEach user-visible change drops a markdown entry into `.changeset\u002F`:\n\n```sh\n.\u002Fchangeset.sh \"Short description\"           # patch (default)\n.\u002Fchangeset.sh minor \"New feature\"\n.\u002Fchangeset.sh major \"Breaking change\"\n```\n\nCut a release with:\n\n```sh\n.\u002Frelease.sh\n```\n\nThat bumps the version (highest level across pending changesets wins), prepends a `CHANGELOG.md` section, regenerates `appcast.xml`, builds + signs the zip with the Sparkle key from 1Password, tags, pushes, and creates the GitHub release. Pending `.changeset\u002F*.md` files are removed by the same commit. See `.changeset\u002FHOWTO.md` for the file format.\n\n## Permissions\n\nOn first launch you'll see an onboarding window explaining what the app needs and why:\n\n- **Screen Recording** — for live tile previews (ScreenCaptureKit).\n- **Accessibility** — for the ⌘⌘ chord listener and to raise \u002F forward keys to the chosen window.\n\nEach row has a Grant button that opens the matching pane in System Settings. Click Continue once both are toggled on. Both are required; the app does nothing without them.\n\nThe app shows in the Dock as `⌘ ⌘`. Right-click it for **Open Config…** (or quit it the normal way).\n\n## Layout\n\n```\nSources\u002Fcmdcmd\u002F\n  main.swift          # entry point, AppDelegate (Dock menu), trigger wiring\n  AppIcon.swift       # ⌘⌘ glyph icon, also writes the iconset for make-icon.sh\n  Onboarding.swift    # first-run permission window\n  Overlay.swift       # overlay window, tile grid, selection, animations\n  OverlayView.swift   # NSWindow + NSView event router for the overlay\n  HintPill.swift      # bottom-center mode-hint label\n  Config.swift        # JSON config loader (animations, trigger, bindings)\n  Keymap.swift        # default shortcuts + override resolver\n  HotkeyMonitor.swift # global hotkey trigger (alternative to CmdChord)\n  Tile.swift          # per-window SCStream preview layer\n  GridLayout.swift    # grid sizing for N tiles at the screen aspect ratio\n  CmdChord.swift      # left+right Command chord detector\n  SpaceTracker.swift  # private CGS\u002FSkyLight space + window enumeration\n  Log.swift           # stderr logger\nResources\u002F             # Info.plist + AppIcon.icns + AppIcon.png\nbuild-app.sh           # swift build → .app bundle + ad-hoc codesign\nmake-icon.sh           # regenerate Resources\u002FAppIcon.icns + .png\n```\n\n## Status\n\nPre-release.\n","cmdcmd 是一个专为 macOS 设计的键盘优先窗口切换工具。用户只需同时按下两侧的 Command 键，即可将所有可见窗口以实时预览的形式展开成网格布局，便于快速选择所需窗口。该项目采用 Swift 语言编写，具备直观的快捷键绑定和自定义配置功能，允许用户通过方向键、特定字符前缀等方式高效地浏览和操作窗口。此外，它还支持窗口标签化管理以及动画效果开关等特性。适用于需要频繁在多个应用程序或窗口间切换的工作场景，能够显著提升工作效率。","2026-06-11 03:54:37","CREATED_QUERY"]