Skip to content

Releases: cuiko/TermIMS

v1.3.0

Choose a tag to compare

@github-actions github-actions released this 05 Jun 14:07

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

Choose a tag to compare

@cuiko cuiko released this 21 May 18:44

Highlights

  • Precise IM switching in same-cwd tabs — when several Ghostty/Warp tabs share a working directory, a sibling tab running claude no 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 /.../ (optional i flag 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

Choose a tag to compare

@cuiko cuiko released this 21 May 17:02

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 @ ls over 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)
  • 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 fixString(contentsOfFile:) now passes an explicit encoding

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

Choose a tag to compare

@cuiko cuiko released this 20 May 18:03

What's Changed

  • fix: Improve terminal tab disambiguation — when multiple non-shell tabs share the same CWD, match window title against candidate process names before falling back to tty mtime
  • ref: Rename make restart to make run

v1.0.2

Choose a tag to compare

@cuiko cuiko released this 20 May 05:54

Features

  • Support input method switching for terminal split panes. Previously only tab/window switches were detected; now switching between split panes within the same tab also triggers input method resolution.

v1.0.1

Choose a tag to compare

@cuiko cuiko released this 20 May 03:08

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

Choose a tag to compare

@cuiko cuiko released this 19 May 12:13

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