Files
gemini-cli/packages/cli/src/ui/utils/terminalUtils.ts
2026-02-10 03:24:41 +00:00

68 lines
1.4 KiB
TypeScript

/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import process from 'node:process';
/**
* Returns the color depth of the current terminal.
* Returns 24 (TrueColor) if unknown or not a TTY.
*/
export function getColorDepth(): number {
return process.stdout.getColorDepth ? process.stdout.getColorDepth() : 24;
}
/**
* Returns true if the terminal has low color depth (less than 24-bit).
*/
export function isLowColorDepth(): boolean {
return getColorDepth() < 24;
}
let cachedIsITerm2: boolean | undefined;
/**
* Returns true if the current terminal is iTerm2.
*/
export function isITerm2(): boolean {
if (cachedIsITerm2 !== undefined) {
return cachedIsITerm2;
}
cachedIsITerm2 = process.env['TERM_PROGRAM'] === 'iTerm.app';
return cachedIsITerm2;
}
/**
* Resets the cached iTerm2 detection value.
* Primarily used for testing.
*/
export function resetITerm2Cache(): void {
cachedIsITerm2 = undefined;
}
/**
* Returns true if the terminal likely supports emoji.
*/
export function shouldUseEmoji(): boolean {
const locale = (
process.env['LC_ALL'] ||
process.env['LC_CTYPE'] ||
process.env['LANG'] ||
''
).toLowerCase();
const supportsUtf8 = locale.includes('utf-8') || locale.includes('utf8');
if (!supportsUtf8) {
return false;
}
if (process.env['TERM'] === 'linux') {
return false;
}
return true;
}