mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-08-09 16:36:40 -07:00
fix(cli): handle tmux false positive background detection (#27572)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Gal Zahavi <38544478+galz10@users.noreply.github.com>
This commit is contained in:
@@ -117,6 +117,51 @@ describe('TerminalCapabilityManager', () => {
|
||||
expect(manager.getTerminalBackgroundColor()).toBe('#00ff00');
|
||||
});
|
||||
|
||||
it('should ignore #ffffff in tmux as it is a common false positive', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
vi.spyOn(manager, 'isTmux').mockReturnValue(true);
|
||||
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Simulate OSC 11 response for white
|
||||
stdin.emit('data', Buffer.from('\x1b]11;rgb:ffff/ffff/ffff\x1b\\'));
|
||||
// Complete detection with DA1
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.getTerminalBackgroundColor()).toBeUndefined();
|
||||
});
|
||||
|
||||
it('should not ignore #ffffff when NOT in tmux', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
vi.spyOn(manager, 'isTmux').mockReturnValue(false);
|
||||
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Simulate OSC 11 response for white
|
||||
stdin.emit('data', Buffer.from('\x1b]11;rgb:ffff/ffff/ffff\x1b\\'));
|
||||
// Complete detection with DA1
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.getTerminalBackgroundColor()).toBe('#ffffff');
|
||||
});
|
||||
|
||||
it('should NOT ignore other colors in tmux', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
vi.stubEnv('TMUX', '1');
|
||||
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
// Simulate OSC 11 response for grey
|
||||
stdin.emit('data', Buffer.from('\x1b]11;rgb:8888/8888/8888\x1b\\'));
|
||||
// Complete detection with DA1
|
||||
stdin.emit('data', Buffer.from('\x1b[?62c'));
|
||||
|
||||
await promise;
|
||||
expect(manager.getTerminalBackgroundColor()).toBe('#888888');
|
||||
});
|
||||
|
||||
it('should detect Terminal Name', async () => {
|
||||
const manager = TerminalCapabilityManager.getInstance();
|
||||
const promise = manager.detectCapabilities();
|
||||
|
||||
@@ -161,9 +161,21 @@ export class TerminalCapabilityManager {
|
||||
match[2],
|
||||
match[3],
|
||||
);
|
||||
debugLogger.log(
|
||||
`Detected terminal background color: ${this.terminalBackgroundColor}`,
|
||||
);
|
||||
|
||||
// Heuristic: tmux 3.5+ may report #ffffff when it doesn't know the
|
||||
// actual host terminal color (e.g. over mosh). We ignore this specific
|
||||
// fallback value to prevent blinding the user with a light theme in a
|
||||
// likely dark terminal.
|
||||
if (this.terminalBackgroundColor === '#ffffff' && this.isTmux()) {
|
||||
debugLogger.log(
|
||||
'Ignored #ffffff background in tmux (common false positive over mosh).',
|
||||
);
|
||||
this.terminalBackgroundColor = undefined;
|
||||
} else {
|
||||
debugLogger.log(
|
||||
`Detected terminal background color: ${this.terminalBackgroundColor}`,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user