scaffold-scripts
Version:
Simple CLI tool for managing and running your own scripts. Add any script, run it anywhere.
89 lines (78 loc) âĸ 3.05 kB
text/typescript
// Cross-platform symbol utilities
// Emojis can be problematic on older Windows terminals and some Unix systems
interface SymbolMap {
[key: string]: {
emoji: string;
fallback: string;
};
}
const symbols: SymbolMap = {
rocket: { emoji: 'đ', fallback: '>>' },
package: { emoji: 'đĻ', fallback: '[*]' },
check: { emoji: 'â
', fallback: '[OK]' },
cross: { emoji: 'â', fallback: '[X]' },
warning: { emoji: 'â ī¸', fallback: '[!]' },
search: { emoji: 'đ', fallback: '...' },
list: { emoji: 'đ', fallback: '[-]' },
trash: { emoji: 'đī¸', fallback: '[DEL]' },
bulb: { emoji: 'đĄ', fallback: '[?]' },
book: { emoji: 'đ', fallback: '[i]' },
party: { emoji: 'đ', fallback: '[DONE]' },
memo: { emoji: 'đ', fallback: '[-]' },
wrench: { emoji: 'đ§', fallback: '[CFG]' },
folder: { emoji: 'đī¸', fallback: '[DIR]' },
page: { emoji: 'đ', fallback: '[DOC]' },
diamond: { emoji: 'đ¸', fallback: '*' },
target: { emoji: 'đ¯', fallback: '=>' },
info: { emoji: 'âšī¸', fallback: '[i]' }
};
// Detect if terminal supports emojis
function supportsEmojis(): boolean {
// Windows Command Prompt and older PowerShell versions often have issues
if (process.platform === 'win32') {
// Check if we're in Windows Terminal or newer PowerShell
const term = process.env.WT_SESSION || process.env.TERM_PROGRAM;
const pwsh = process.env.PSModulePath?.includes('PowerShell/7') || process.env.PSModulePath?.includes('PowerShell\\7');
if (term || pwsh) {
return true; // Windows Terminal or PowerShell 7+ likely supports emojis
}
// Legacy cmd.exe or older PowerShell
return false;
}
// Unix-like systems - check TERM environment
const term = process.env.TERM;
if (!term) return false;
// Most modern terminals support emojis
if (term.includes('xterm') || term.includes('screen') || term.includes('tmux')) {
return true;
}
// Conservative fallback for unknown terminals
return false;
}
// Get symbol based on platform capability
export function getSymbol(name: keyof typeof symbols): string {
const symbol = symbols[name];
if (!symbol) return '';
return supportsEmojis() ? symbol.emoji : symbol.fallback;
}
// Convenience functions for common symbols
export const sym = {
rocket: () => getSymbol('rocket'),
package: () => getSymbol('package'),
check: () => getSymbol('check'),
cross: () => getSymbol('cross'),
warning: () => getSymbol('warning'),
search: () => getSymbol('search'),
list: () => getSymbol('list'),
trash: () => getSymbol('trash'),
bulb: () => getSymbol('bulb'),
book: () => getSymbol('book'),
party: () => getSymbol('party'),
memo: () => getSymbol('memo'),
wrench: () => getSymbol('wrench'),
folder: () => getSymbol('folder'),
page: () => getSymbol('page'),
diamond: () => getSymbol('diamond'),
target: () => getSymbol('target'),
info: () => getSymbol('info')
};