[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-75726":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":14,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":14,"lastSyncTime":31,"discoverSource":32},75726,"tmux-palette","eduwass\u002Ftmux-palette","eduwass","Raycast-style command palette for tmux — fast, scriptable, easy to extend","",null,"TypeScript",363,13,2,9,0,19,226,17,63.94,false,"main",true,[25,26,27],"cli","command-palette","tmux","2026-06-12 04:01:18","# tmux-palette\n\nA command palette for tmux. It runs on [Bun](https:\u002F\u002Fbun.sh), has no runtime\ndependencies, and opens quickly enough to use as a regular tmux binding.\n\nType a few letters, pick a command, hit enter: split a pane, jump to a window,\ndetach a session, open a popup tool, or switch to a custom palette. User config\nlives in `~\u002F.config\u002Ftmux-palette\u002F*.json`, so local changes survive repo updates.\n\n**Commands** — main palette for panes, windows, sessions, and built-in tmux actions.\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F3a8f3951-619f-46b4-a180-b9a03ccb8593\n\n**Themes + plugins** — theme picker with live preview, plus custom palettes powered by shell commands.\n\nhttps:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F5edce838-9199-4123-8262-352bc47e989c\n\n## Status\n\nThe tool is in beta. It's stable enough to use day-to-day, but the surface area\nis still settling — I want the next few weeks to be about running it myself,\ngathering feedback, and shaking out bugs rather than growing the feature set.\n\nIf you'd like to contribute, the most useful work right now is anything that\nimproves the existing base (refactors, perf, polish, docs) or fixes a bug. New\nfeatures will likely get closed — no hard feelings, but please open an issue\nfirst to discuss before writing code.\n\n## Highlights\n\n- **Fast startup** — designed for frequent use from a tmux key binding\n- **Custom palettes** — define your own with [a single JSON file](#custom-palettes), bind to any key\n- **Hide built-ins** — declutter the default palette via [`hidden.json`](#hiddenjson--hide-built-in-items)\n- **Mobile-aware** — [auto-fullscreens](#sizingjson--popup-dimensions-and-borders) on narrow terminals (Moshi \u002F Blink on iOS)\n- **Curated themes** — 12 built-in themes including Shades of Purple, Dracula, Tokyo Night, Catppuccin, Gruvbox, Nord, and Solarized. [Pick one with live preview](#themes), or [drop your own](#custom-themes)\n- **Popup tools** — use `{ \"popup\": \"htop\" }` to open tools like `btop`, `lazygit`, log tails, or `fzf` scripts in a tmux popup\n- **Scriptable sources** — point a palette at a shell command that prints JSON or one item per line. Examples live in [`examples\u002F`](examples)\n- **Small codebase** — roughly 2k LOC, so it is easy to audit, fork, or patch locally\n- **No fork required** — every customization lives in `~\u002F.config\u002Ftmux-palette\u002F*.json`\n\n## What you can build\n\n- Open `lazygit`, `htop`, `btop`, or log tails in a centered tmux popup.\n- Create a PR explorer from `gh pr list` that opens PRs in your browser.\n- Create a GitHub Actions picker that jumps straight to a workflow run.\n- Pick a Docker container and tail its logs in a popup.\n- List npm scripts from the current project and run one from tmux.\n- Bind focused palettes to separate keys, like `M-t` for Tools or `M-a` for Appearance.\n- Keep a personal favorites palette without editing the repo.\n\nSee [`examples\u002F`](examples) for drop-in palettes you can copy into\n`~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002F`.\n\n## Install\n\nUse TPM if you already use it; otherwise manual install is the simplest path.\nThe AI-agent option is just a guided setup flow.\n\n### Requirements\n\n- [Bun](https:\u002F\u002Fbun.sh)\n- tmux 3.4+ recommended (`display-popup -E` support)\n- Optional tools for examples only: `gh`, `jq`, `docker`, `npm`, `git`, etc.\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Manual install\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\nRequires Bun: https:\u002F\u002Fbun.sh\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Feduwass\u002Ftmux-palette ~\u002FSites\u002Ftmux-palette\ncd ~\u002FSites\u002Ftmux-palette\nbun install\n```\n\nBind it to a tmux key in your `.tmux.conf` — `Ctrl+Space` gives the most \"Raycast-feel\" since it skips the prefix:\n\n```tmux\nbind -n C-Space run-shell \"~\u002FSites\u002Ftmux-palette\u002Fbin\u002Ftmux-palette.sh\"\n```\n\nOr if you'd rather go through the tmux prefix:\n\n```tmux\nbind p run-shell \"~\u002FSites\u002Ftmux-palette\u002Fbin\u002Ftmux-palette.sh\"\n```\n\nReload: `tmux source-file ~\u002F.tmux.conf` and hit your binding.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Install via TPM\u003C\u002Fb> (Tmux Plugin Manager)\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\nRequires Bun: https:\u002F\u002Fbun.sh\n\nAdd to your `.tmux.conf`:\n\n```tmux\nset -g @plugin 'eduwass\u002Ftmux-palette'\nset -g @palette-key 'C-Space'             # optional, default: C-Space (no-prefix)\nset -g @palette-find-pane-key 'M-f'       # optional, no binding by default\nset -g @palette-move-pane-key 'M-m'       # optional, no binding by default\n```\n\nThen `prefix + I` (TPM's install key) to install. TPM clones the repo,\nruns `bun install` on first load, and binds the keys for you. Set\n`@palette-key 'off'` to skip the main binding and bind it yourself.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cb>Guided onboarding with an AI agent\u003C\u002Fb>\u003C\u002Fsummary>\n\n\u003Cbr\u002F>\n\nThis is optional; it is just a guided setup flow. Choose it if you want an\nagent to drive the onboarding experience: install the repo, set up the tmux\nbinding, test that it opens, and optionally create your first custom commands\nor theme.\n\nPaste the prompt below into [Claude Code](https:\u002F\u002Fclaude.com\u002Fclaude-code), [Codex](https:\u002F\u002Fgithub.com\u002Fopenai\u002Fcodex), [opencode](https:\u002F\u002Fopencode.ai), Cursor, or any AI coding agent.\n\n````\nYou are helping a user onboard tmux-palette, a small command palette for tmux. Repo: https:\u002F\u002Fgithub.com\u002Feduwass\u002Ftmux-palette\n\nGoal: get the palette installed, bound to a key, tested inside tmux, and leave the user with one useful next customization if they want it.\n\nFollow steps in order. Confirm with the user before any change that modifies their files.\n\n1. Prerequisites\n- Run `bun --version`. If Bun is missing, point them to https:\u002F\u002Fbun.sh\u002Fdocs\u002Finstallation and stop — do not auto-install.\n- Run `tmux -V`. If lower than 3.4, warn that `display-popup -E` may not work, then proceed.\n\n2. Clone and install\n- Default path: `~\u002FSites\u002Ftmux-palette`. Ask the user if they want a different location.\n- If the path already exists and contains the repo, run `git -C \u003Cpath> pull` and skip cloning.\n- Otherwise: `git clone https:\u002F\u002Fgithub.com\u002Feduwass\u002Ftmux-palette \u003Cpath> && cd \u003Cpath> && bun install`.\n\n3. Bind it to a tmux key (required — the palette doesn't open without one)\n- Default suggestion: `bind -n C-Space run-shell \"\u003Cabsolute-path>\u002Fbin\u002Ftmux-palette.sh\"` (no-prefix, opens with Ctrl+Space). Ask the user if they want a different key.\n- Append the bind line to `~\u002F.tmux.conf` (create it if missing).\n- Run `tmux source-file ~\u002F.tmux.conf` to reload (or tell them to do it).\n\n4. Pick a theme (optional)\nAsk: \"Want to choose a built-in theme now, or should I try to match your terminal's theme?\"\n\nIf they want a built-in theme:\n- Tell them they can open the palette and choose **Switch Theme...** for live preview.\n- Mention the curated built-ins: Shades of Purple, Dracula, Tokyo Night, Catppuccin Mocha, Gruvbox Dark, Rosé Pine, Nord, Solarized Dark, Kanagawa Wave, GitHub Dark, One Dark, Ayu Dark.\n\nIf they want to match their terminal, detect it:\n- Check $TERM_PROGRAM and $TERM. Common values: ghostty, iTerm.app, vscode, WezTerm, Apple_Terminal.\n- Read the relevant config:\n  - Ghostty:    ~\u002F.config\u002Fghostty\u002Fconfig\n  - Alacritty:  ~\u002F.config\u002Falacritty\u002Falacritty.toml (or .yml)\n  - Kitty:      ~\u002F.config\u002Fkitty\u002Fkitty.conf  (follow `include` lines)\n  - WezTerm:    ~\u002F.wezterm.lua or ~\u002F.config\u002Fwezterm\u002Fwezterm.lua\n  - iTerm2 \u002F others: ask the user for hex codes; their configs are hard to parse.\n- Extract: background → `bg`, foreground → `fg`, cursor color → `accent`, selection bg → `selected`. Derive `panel` (slightly lighter than bg) and `muted` (fg dimmed).\n- Write `~\u002F.config\u002Ftmux-palette\u002Ftheme.json` with `{ bg, panel, selected, fg, muted, accent }`. The palette reads this at runtime; do NOT edit source files.\n- Report the colors you picked.\n\n5. Test\nTell the user to press their binding. Ask what they see.\n\n6. Offer one useful follow-up\nWhen it works, ask:\n- \"Want a quick custom command, like opening lazygit or htop in a popup?\" — write items to `~\u002F.config\u002Ftmux-palette\u002Fcommands.json` (array of Items). Action types: `{ \"tmux\": \"...\" }`, `{ \"shell\": \"...\" }`, `{ \"popup\": \"...\" }`, `{ \"palette\": \"name\" }`. Do NOT edit source files.\n- \"Want a focused palette for PRs, Docker logs, npm scripts, or git branches?\" — copy an example from `examples\u002F` into `~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002F` and bind it.\n- \"Want custom shortcut labels?\" — write `~\u002F.config\u002Ftmux-palette\u002Fshortcuts.json` mapping item titles to label strings.\n\nOnly do one follow-up unless the user asks for more.\n\nConstraints\n- Prefer `~\u002F.config\u002Ftmux-palette\u002F*.json` over source edits. The user's config survives upstream pulls; source edits don't.\n- Do not push to git or modify files outside the user's home directory.\n- Do not auto-install Bun or any other system package.\n- If anything fails, stop and explain what went wrong.\n````\n\n\u003C\u002Fdetails>\n\n## Usage\n\n- **Type** to filter. Multi-word search is supported (`split horiz`).\n- **Up\u002FDown arrows** or **Ctrl+P \u002F Ctrl+N** to move selection.\n- **Enter** to run the selected command.\n- **Esc** to cancel.\n- **Mouse** works too — click rows, scroll the wheel.\n\n**Auto-aliases**: initials of multi-word titles match automatically. Type `nw` for \"New\nWindow\", `cs` for \"Choose Session\", `sh` for \"Split Horizontal\", etc.\n\n## Trust And Safety\n\n- CI runs `bun test`, TypeScript, Fallow dead-code, and Fallow duplication checks.\n- The codebase is intentionally small and has no runtime package dependencies.\n- Custom palettes are local JSON files, but they can run shell commands. Only copy\n  palette examples you understand, especially if they come from outside this repo.\n- User config lives under `~\u002F.config\u002Ftmux-palette\u002F`; normal customization should not\n  require editing source files.\n\n## Known Limitations\n\n- Requires tmux popup support; tmux 3.4+ is recommended.\n- Plugin commands run each time their palette opens. Add your own cache layer for\n  slow commands.\n- This is currently installed from the repo or via TPM, not a packaged npm release.\n- `{ \"shell\": \"...\" }` and `{ \"popup\": \"...\" }` actions execute through the user's\n  shell by design.\n\n## Customize\n\nDrop-in user config lives in `~\u002F.config\u002Ftmux-palette\u002F`. One JSON file per\nconcern — no source edits, no fork, survives upstream pulls.\n\n### Custom palettes\n\nPath: `~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002F\u003Cname>.json`\n\nDefine a brand-new palette and bind any key to its name:\n\n```tmux\nbind -n M-q run-shell \"~\u002FSites\u002Ftmux-palette\u002Fbin\u002Ftmux-palette.sh my-favs\"\n```\n\n```jsonc\n\u002F\u002F ~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002Fmy-favs.json\n{\n  \"title\": \"Favorites\",\n  \"from\": [\"Toggle Diff Viewer\", \"Find Pane\", \"Choose Session\"],\n  \"fromCategory\": \"Tools\",\n  \"items\": [\n    {\n      \"icon\": \"\",\n      \"title\": \"Custom item only in this palette\",\n      \"action\": { \"tmux\": \"run-shell '~\u002Fscripts\u002Fx.sh'\" }\n    }\n  ]\n}\n```\n\n- `from` — array of item titles to pull from the main commands palette (built-ins + your `commands.json`)\n- `fromCategory` — pull every item from one category\n- `command` — shell command that prints a JSON array of `Item` objects to stdout (see [plugins](#plugins) below)\n- `items` — brand-new items defined inline\n- `title` \u002F `grouped` \u002F `emptyText` — same as built-in palettes\n\nAll keys optional. Resolution order: `from` → `fromCategory` → `command` → `items`.\n\n#### Plugins\n\n> Drop-in ready-to-use palettes live in [`examples\u002F`](examples) — git branches,\n> GitHub PRs (with color-coded status dots), Docker container logs,\n> npm scripts, file picker. Copy one and bind a key.\n\nThe `command` field is the plugin escape hatch — fzf-style. Anything\nthat prints to stdout becomes a palette. Two output modes:\n\n**JSON mode** — full control. Print a JSON array of `Item` objects:\n\n```jsonc\n\u002F\u002F ~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002Fgithub-prs.json\n{\n  \"title\": \"GitHub PRs\",\n  \"command\": \"gh pr list --json number,title,url --jq '[.[] | {icon: \\\"\\\", title: ((.number|tostring) + \\\" \\\" + .title), action: {shell: (\\\"gh pr view \\\" + (.number|tostring) + \\\" --web\\\")}}]'\"\n}\n```\n\n**Plain-text mode** — fzf-style. Print one item per line, define a\ndefault `action` template at the palette level with `{}` substituted\nfor the selected line:\n\n```jsonc\n\u002F\u002F ~\u002F.config\u002Ftmux-palette\u002Fpalettes\u002Fgit-branches.json\n{\n  \"title\": \"Git Branches\",\n  \"command\": \"git branch --format='%(refname:short)'\",\n  \"action\": { \"tmux\": \"send-keys 'git checkout {}' Enter\" }\n}\n```\n\nThis means most \"command that prints lines\" tools you'd pipe through\nfzf can become tmux-palette palettes with no scripting — just the JSON\nconfig and an action template.\n\nWrite the command in any language, distribute it however you want\n(gist, repo, copy-paste). The plugin runs every time the palette opens\n(no caching), so for expensive calls add your own cache layer. Errors\nare surfaced as a single item in the palette so failures stay visible\nwithout crashing the popup.\n\n### `hidden.json` — hide built-in items\n\nDrop a JSON array of item titles to skip them in the main commands\npalette:\n\n```json\n[\"Toggle Status Bar\", \"Reload Config\", \"Toggle OpenTUI Top Bar\"]\n```\n\nItems still appear if you reference them by title in a custom palette\n(see above) — `hidden.json` is just about decluttering the default.\n\n### `commands.json` — your own items\n\nAppend items to the `commands` palette without editing source:\n\n```json\n[\n  {\n    \"icon\": \"\",\n    \"title\": \"Toggle Diff Viewer\",\n    \"category\": \"Tools\",\n    \"action\": { \"tmux\": \"run-shell '\u002Fpath\u002Fto\u002Fscript.sh'\" }\n  },\n  {\n    \"icon\": \"󱂬\",\n    \"title\": \"Open Project in Cursor\",\n    \"category\": \"Tools\",\n    \"action\": { \"shell\": \"cursor \u002Fpath\u002Fto\u002Fproject\" }\n  },\n  {\n    \"icon\": \"\",\n    \"title\": \"htop\",\n    \"category\": \"Tools\",\n    \"action\": { \"popup\": \"htop\" }\n  }\n]\n```\n\nAction types: `{ \"tmux\": \"...\" }`, `{ \"shell\": \"...\" }`, `{ \"popup\": \"...\" }`, `{ \"palette\": \"find-pane\" }`.\n\n`{ \"popup\": \"htop\" }` opens the given command in a centered tmux popup\n(80% × 80%, closes when the command exits). Handy for log viewers,\nhtop, btop, less, fzf-driven tools, etc.\n\n### `sizing.json` — popup dimensions and borders\n\n```json\n{\n  \"maxHeight\": 28,\n  \"width\": 90,\n  \"padX\": 3,\n  \"mobileWidth\": 80,\n  \"border\": \"none\",\n  \"popupBorder\": \"none\"\n}\n```\n\nAll keys optional. `maxHeight` caps how tall the popup gets when you\nhave lots of commands. `width` is the fixed popup width. `padX` is the\nhorizontal padding inside the popup.\n\n`mobileWidth` is the client-width threshold for auto-fullscreen mode:\nwhen the terminal is narrower than this many columns (iOS terminals\nlike Blink or Moshi typically run 50-60 cols), the popup goes\nedge-to-edge with `padX=1`. Defaults to 80, set to 0 to disable.\n\n`border` is the main palette border, `popupBorder` is the border for\n`{ \"popup\": \"...\" }` action popups. Both default to `none`. Accepted\nvalues: `none`, `single`, `double`, `heavy`, `rounded`, `padded`,\n`simple` — passed straight to `tmux display-popup -b`. `rounded` works\nbut its corner glyphs can leave small visual gaps against the\nsurrounding terminal, so it is not the default.\n\n### Themes\n\nOpen the main palette and pick **Switch Theme...** (under *Appearance*).\nArrow-key through the list — every theme lives-previews instantly so you\nsee the colors apply before you commit. Enter saves it and returns you to\nthe previous palette with the new theme on; Esc cancels.\n\nThe theme picker also includes **Add custom theme...**, which opens this\nREADME's custom-theme instructions in your default browser.\n\nBundled themes are intentionally limited to a small curated set: Shades of\nPurple, Dracula, Tokyo Night, Catppuccin Mocha, Gruvbox Dark, Rosé Pine, Nord,\nSolarized Dark, Kanagawa Wave, GitHub Dark, One Dark, and Ayu Dark. Their\npanel\u002Fselected\u002Fmuted\u002Faccent colors are tuned for readable contrast. To tweak a\ntheme without editing the repo, add a custom theme file or override individual\ncolors in `theme.json`.\n\n### `theme.json` — set the active theme\n\nTwo forms. Pick a bundled (or custom) theme by name:\n\n```json\n{ \"name\": \"tokyo-night\" }\n```\n\nOr full color override (applied on top of the resolved theme):\n\n```json\n{\n  \"bg\": \"#1a1b26\",\n  \"panel\": \"#16161e\",\n  \"selected\": \"#283457\",\n  \"fg\": \"#c0caf5\",\n  \"muted\": \"#565f89\",\n  \"accent\": \"#7aa2f7\"\n}\n```\n\nThe theme switcher writes the `{ \"name\": \"...\" }` form for you. You can\nalso mix: pick a name, then add individual keys to nudge specific colors.\n\n### Custom themes\n\nDrop one JSON file per theme into `~\u002F.config\u002Ftmux-palette\u002Fthemes\u002F`:\n\n```jsonc\n\u002F\u002F ~\u002F.config\u002Ftmux-palette\u002Fthemes\u002Fmy-theme.json\n{\n  \"bg\": \"#0d0f12\",\n  \"panel\": \"#171a1f\",\n  \"selected\": \"#2c3038\",\n  \"fg\": \"#e6e8eb\",\n  \"muted\": \"#7d8590\",\n  \"accent\": \"#ff6b6b\"\n}\n```\n\nCustom themes show up in the **Switch Theme...** picker alongside the\nbundled ones (tagged `custom`). The filename becomes the slug — drop\n`my-theme.json` → reference it as `{ \"name\": \"my-theme\" }` in\n`theme.json`, or just pick it from the switcher.\n\n### Category hotkeys\n\nPass `--category=\u003Cname>` to open the main palette filtered to one\ncategory, Raycast-favorites style:\n\n```tmux\nbind -n M-t run-shell \"~\u002FSites\u002Ftmux-palette\u002Fbin\u002Ftmux-palette.sh commands --category=Tools\"\nbind -n M-a run-shell \"~\u002FSites\u002Ftmux-palette\u002Fbin\u002Ftmux-palette.sh commands --category=Appearance\"\n```\n\nThe popup title auto-updates to the category name and the category\nheader gets hidden (since everything is the same category anyway).\n\n### `shortcuts.json` — custom shortcut labels\n\nWhen your terminal has a key-remap layer (Ghostty \u002F iTerm2 \u002F Karabiner) that\ntranslates something like `Cmd+D` into a tmux binding, tmux only sees the\ntmux side and doesn't know the original key. Use this to show what you\nactually press:\n\n```json\n{\n  \"Split Horizontal\": \"Cmd+D\",\n  \"Find Pane\": \"Cmd+Shift+P\",\n  \"Choose Session\": \"Cmd+S\"\n}\n```\n\nKeys are item titles; values are whatever text you want on the right side.\n\n### `aliases.json` — extra visible alias chips\n\n```json\n{\n  \"Split Horizontal\": [\"sh\"],\n  \"Find Pane\": [\"fp\"]\n}\n```\n\nAuto-aliases (initials like `nw`) still work for free, invisibly.\n\n## Extending (deeper)\n\nFor things JSON can't express — custom row rendering, dynamic item\ngenerators, custom filter logic — edit the TS source. Items in\n`src\u002Fpalettes\u002Fcommands.ts` have this shape:\n\n```ts\n{\n  icon: \"󰍉\",              \u002F\u002F any nerd-font glyph\n  title: \"Find Pane\",\n  description?: \"...\",    \u002F\u002F optional, dimmed text after title\n  shortcut?: \"Cmd+Shift+P\", \u002F\u002F optional, right-aligned label\n  category?: \"Panes\",     \u002F\u002F optional, groups items under a header\n  aliases?: [\"fp\"],       \u002F\u002F optional, visible chip + searchable\n  action: { tmux: \"...\" } \u002F\u002F see Actions below\n}\n```\n\n### Actions\n\n```ts\n{ tmux: \"split-window -h\" }     \u002F\u002F runs `tmux \u003Ccmd>` after the popup closes\n{ shell: \"echo hi\" }            \u002F\u002F runs a shell command after the popup closes\n{ popup: \"htop\" }               \u002F\u002F opens cmd in a centered 80% tmux popup\n{ palette: \"find-pane\" }        \u002F\u002F chains into another palette\n{ run: (ctx) => { ... } }       \u002F\u002F custom JS, runs in-process, then exits\n{ apply: (ctx) => { ... } }     \u002F\u002F custom JS, runs in-process, then pops\n                                \u002F\u002F back to the previous palette (used by\n                                \u002F\u002F the theme switcher to \"apply + return\")\n```\n\n`{ tmux }` is special: it dispatches *after* the popup closes, so interactive\ntmux prompts (`confirm-before`, `command-prompt`) actually get keyboard\ninput. Without this, prompts hang because the popup still owns stdin.\n\n## How it works (the trick)\n\nThe bash wrapper opens a `tmux display-popup` running the palette. When you\npick an item, the palette writes the encoded command to a tempfile and exits.\nThe wrapper *then* reads the tempfile and runs the command — *after* the\npopup is gone. This matters because interactive tmux commands like\n`confirm-before` need stdin, which is captured by the popup while it's open.\n\n## License\n\nMIT\n","tmux-palette 是一个为 tmux 设计的命令面板，灵感来源于 Raycast，旨在提供快速、可编程且易于扩展的命令访问方式。该项目使用 TypeScript 编写，并基于 Bun 运行，无运行时依赖，启动迅速，适合作为 tmux 的常规绑定使用。其核心功能包括通过简单输入即可执行分割窗口、切换会话等操作；支持自定义配置文件，使得用户可以在不修改源代码的情况下调整设置；还提供了多种主题选择和插件扩展能力。适用于需要频繁在 tmux 中进行复杂操作的开发者或系统管理员，能够显著提升工作效率。","2026-06-11 03:53:10","CREATED_QUERY"]