Something went wrong. Try again.
more up to date at codeberg https://codeberg.org/cowie/tau.git
Something went wrong. Try again.
1.5 kB · 48 lines
TypeScript
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849/** * Utilities for formatting keybinding hints in the UI. */
import { getKeybindings, type Keybinding, type KeyId } from "@earendil-works/pi-tui";import { theme } from "../theme/theme.ts";
export interface KeyTextFormatOptions { capitalize?: boolean;}
function formatKeyPart(part: string, options: KeyTextFormatOptions): string { const displayPart = process.platform === "darwin" && part.toLowerCase() === "alt" ? "option" : part; return options.capitalize ? displayPart.charAt(0).toUpperCase() + displayPart.slice(1) : displayPart;}
export function formatKeyText(key: string, options: KeyTextFormatOptions = {}): string { return key .split("/") .map((k) => k .split("+") .map((part) => formatKeyPart(part, options)) .join("+"), ) .join("/");}
function formatKeys(keys: KeyId[], options: KeyTextFormatOptions = {}): string { if (keys.length === 0) return ""; return formatKeyText(keys.join("/"), options);}
export function keyText(keybinding: Keybinding): string { return formatKeys(getKeybindings().getKeys(keybinding));}
export function keyDisplayText(keybinding: Keybinding): string { return formatKeys(getKeybindings().getKeys(keybinding), { capitalize: true });}
export function keyHint(keybinding: Keybinding, description: string): string { return theme.fg("dim", keyText(keybinding)) + theme.fg("muted", ` ${description}`);}
export function rawKeyHint(key: string, description: string): string { return theme.fg("dim", formatKeyText(key)) + theme.fg("muted", ` ${description}`);}