mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-18 01:51:20 -07:00
68 lines
1.4 KiB
TypeScript
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;
|
|
}
|