Releases: cuiko/TermIMS
Releases · cuiko/TermIMS
Release list
v1.3.0
What's Changed
- ci: Add macOS build workflow by @cuiko in #3
- ref: Reorganise into Swift Package Manager layout by @cuiko in #2
- ci: Add tag-triggered release workflow by @cuiko in #4
- fix(monitor): Only switch input method for the frontmost app by @cuiko in #6
- feat(settings): Launch at login via SMAppService in Settings by @cuiko in #5
Full Changelog: v1.2.0...v1.3.0
v1.2.0
Highlights
- Precise IM switching in same-cwd tabs — when several Ghostty/Warp tabs share a working directory, a sibling tab running
claudeno longer triggers the rule on the focused (non-Claude) tab. Process rules only fire when every focus-candidate independently agrees, otherwise we fall through to the terminal default. - Regex patterns — wrap a rule pattern in
/.../(optionaliflag for case-insensitive) to opt into ICU regex. Combined with the matcher fix above this unlocks the cleanest way to switch IM on Claude Code:/^[⠁-⣿✳] /as a Tab Title rule catches cc's spinner and idle (✳) title prefixes precisely on the focused tab. - Note column on terminal rules — annotate each rule in Settings → Terminal Rules so cryptic patterns like the Claude regex don't sit unexplained. Existing stored rules upgrade with an empty note.
Fixes
- Cmd+C/V/X/A/Z now work in the Pattern and Note text fields. An LSUIElement app gets no main menu by default, so the standard edit shortcuts had nowhere to dispatch — a hidden Edit menu now routes them.
Polish
- Status menu's App Rules and Terminal Rules sections share the same layout, only enabled rules are listed, and the redundant ✓ prefix is gone.
- README trimmed: tighter Features, Warp/Alacritty rows, plus new tmux and Process names vs. user-typed commands notes covering pty visibility limits and
exec-into-binary wrapper scripts.
v1.1.0
Highlights
- Native terminal adapters — strategy-pattern layer that picks the most precise channel each terminal offers
- Apple Terminal / iTerm2 via AppleScript (
tty of selected tab/tty of current session of current window) - kitty via
kitten @ lsover its remote-control socket - WezTerm via
wezterm cli list-clients+list - Ghostty continues on AXDocument cwd + process-tree heuristic
- Warp falls through a descendant heuristic — limited because Warp does not yet expose tabs to the AX tree (tracked upstream as warpdotdev/warp#11160)
- Apple Terminal / iTerm2 via AppleScript (
- Settings polish — drag-and-drop reordering for App Rules and Terminal Rules (only the new grip column initiates a drag, so adjusting a popup never triggers an accidental reorder), centered checkbox / drag-handle cells, and an open-hand cursor on hover
- Debug logging — toggle a persistent log at `~/Library/Logs/TermIMS/termims.log` from Settings → General → Debug, with a Clear button
- macOS 15 deprecation fix —
String(contentsOfFile:)now passes an explicitencoding
Behavioural fixes
- Don't flap to ABC mid-cc-session: rule matching now scans every process on the focused tty (not just the foreground process group), so transient tool subprocesses (`bash`, `grep`, …) don't hide `claude`
- Don't misclassify cc's spinner / summary titles as shell prompts in the Ghostty cwd-multi path
- Detect cwd display in the title (basename / absolute / `~` / Ghostty's `…/` truncation) instead of any `/`, so titles like "Running zsh in ~/foo" don't misroute the cc tab
- Subscribe to `kAXTitleChangedNotification` only where it carries signal (currently kitty) — Ghostty would otherwise re-resolve on every cc spinner frame
- Multi-instance support: prefer the `isActive` running app and pass per-event PID to adapters so multiple kitty windows or WezTerm GUI clients route correctly
Tooling
- Bundled `uninstall.sh` removes the app, launch agent (if any), UserDefaults, logs, and caches in one go — see the new "Uninstall" section in the README
- README documents the full Terminal Support matrix, required Automation prompts, and the kitty config setup
v1.0.3
v1.0.2
v1.0.1
Bug Fixes
- Fix terminal tab disambiguation when multiple tabs run different non-shell programs (e.g.
claude, nvim, claude) and share the same working directory. Previously picked an arbitrary tty; now uses tty device mtime to select the focused tab's tty.
v1.0.0
TermIMS v1.0.0
Initial release.
Features
- Per-app input method switching
- Terminal sub-rules: match by process name or tab title
- Supports Ghostty, Terminal.app, iTerm2, kitty, wezterm, Warp, Alacritty
- Switch indicator overlay with configurable position
- Launch at Login
- Accessibility permission detection and guidance