# focal
Terminal focus library - focus terminal windows and multiplexer panes.
## Features
- **Terminal detection**: Identify which terminal emulator owns a TTY
- **Cross-platform activation**: Bring terminal windows to front (macOS + Linux)
- **Terminal-specific handlers**: Precise tab/pane focusing for iTerm2, Terminal.app, WezTerm, Kitty
- **Multiplexer support**: Switch to the correct tmux/zellij/screen pane
## Usage
```rust
use focal::{focus_session, FocusResult};
// Focus the terminal containing a process
match focus_session(pid, None) {
FocusResult::Success => println!("Focused!"),
FocusResult::MuxSwitched { mux, target } => {
println!("Switched to {mux} {target}");
}
FocusResult::NotFound => println!("Terminal not found"),
_ => {}
}
// With a multiplexer hint (for faster tmux detection)
let _ = focus_session(pid, Some("tmux"));
```
## Supported Terminals
### macOS
- iTerm2 (tab-specific focusing via JXA)
- Terminal.app (tab-specific focusing via JXA)
- WezTerm (pane-specific focusing via CLI)
- Kitty (window-specific focusing via remote control)
- Ghostty (window-specific focusing via JXA)
- Generic terminals (Alacritty, etc.) via osascript
### Linux
- WezTerm (pane-specific focusing via CLI)
- Kitty (window-specific focusing via remote control)
- Ghostty (window-specific focusing via wmctrl/xdotool/swaymsg/hyprctl)
- Generic terminals via wmctrl, xdotool, swaymsg, or hyprctl
## Supported Multiplexers
- tmux
- zellij (planned)
- screen (planned)