-
Notifications
You must be signed in to change notification settings - Fork 7
Troubleshooting
Solutions to common BossTerm issues.
Symptom: Blank screen, no prompt appears.
Solutions:
-
Check SHELL environment variable:
echo $SHELL
Should output
/bin/bash,/bin/zsh, or similar. -
Try explicit shell:
EmbeddableTerminal( command = "/bin/zsh" )
-
Check working directory exists:
EmbeddableTerminal( workingDirectory = System.getProperty("user.home") )
Symptom: Terminal shows briefly then closes.
Causes:
- Shell configuration error (
.bashrc,.zshrc) - Non-interactive shell
Solutions:
-
Test shell directly:
bash -l -c "echo OK" zsh -l -c "echo OK"
-
Check shell config files for syntax errors.
-
View exit code:
EmbeddableTerminal( onExit = { code -> println("Exit: $code") } )
Symptom: Boxes or blank spaces instead of characters.
Solutions:
-
BossTerm includes MesloLGS Nerd Font by default with powerline symbols.
-
For custom fonts, use one with good Unicode coverage:
EmbeddableTerminal( settings = TerminalSettings(fontName = "JetBrains Mono") )
-
Use a Nerd Font for maximum glyph coverage.
Symptom: Emoji appear as separate characters or wrong symbols.
BossTerm handles emoji with variation selectors (☁️). If issues persist:
- Update to the latest BossTerm version
- Some complex emoji sequences (ZWJ families) may have limitations
Symptom: Terminal apps show wrong or no colors.
Solutions:
-
Verify TERM environment:
echo $TERM # Should be xterm-256color
-
Force color support:
export COLORTERM=truecolor
Symptom: Click on terminal doesn't give it focus, keys ignored.
Cause: Parent containers with .focusable() or .clickable { requestFocus() } steal focus.
Solution: Remove competing focus modifiers:
// WRONG - steals focus
Column(
modifier = Modifier
.focusable()
.clickable { requestFocus() }
) {
EmbeddableTerminal()
}
// CORRECT - observe without competing
Column(
modifier = Modifier
.onFocusChanged { state ->
// Track focus state
}
) {
EmbeddableTerminal()
}Solution: Return focus to terminal after toolbar actions:
val focusRequester = remember { FocusRequester() }
Column {
Button(onClick = {
terminalState.write("command\n")
focusRequester.requestFocus() // Return focus
}) { Text("Run") }
Box(modifier = Modifier.focusRequester(focusRequester)) {
EmbeddableTerminal(state = terminalState)
}
}Symptom: CPU spikes when terminal has heavy output.
Solutions:
-
Switch to throughput mode:
{ "performanceMode": "throughput" } -
Reduce scrollback buffer:
{ "bufferMaxLines": 5000 }
Symptom: Lag when typing in vim, ssh, etc.
Solution: Switch to latency mode:
{
"performanceMode": "latency"
}Checklist:
- ☐ OSC 133 configured in shell (Shell-Integration)
- ☐
notifyOnCommandComplete: truein settings - ☐ Window was unfocused when command completed
- ☐ Command ran >
notifyMinDurationSeconds(default: 5) - ☐ macOS notification permissions granted
On first notification, macOS asks for permission. If denied:
- Open System Settings > Notifications
- Find BossTerm
- Enable notifications
Symptom: New tabs don't inherit working directory.
Solutions:
- Verify shell integration configured (Shell-Integration)
- Test emission:
cd /tmp # New tab should open in /tmp
- Use debug panel (Ctrl/Cmd+Shift+D) to check for OSC 7 sequences
Symptom: No command notifications.
Solutions:
- Add shell integration code (Shell-Integration)
- Verify with long command:
sleep 6 # Then switch to another app - Check debug panel for OSC 133 sequences
Press Ctrl/Cmd+Shift+D to open the debug panel.
Features:
- View incoming escape sequences
- Inspect buffer state
- Track I/O data
{
"debugModeEnabled": true
}If issues persist:
- Check GitHub Issues
- Enable debug mode and collect logs
- Open a new issue with:
- BossTerm version
- OS and version
- Steps to reproduce
- Debug panel output (if applicable)
- Configuration - All settings
- Shell-Integration - OSC setup
- Frequently-Asked-Questions - Common questions