mirror of
https://github.com/jarrodwatts/claude-hud.git
synced 2026-05-21 07:22:44 +00:00
fix: wrap HUD output when terminal width is unavailable
This commit is contained in:
@@ -13,6 +13,7 @@ import {
|
||||
renderMemoryLine,
|
||||
} from './lines/index.js';
|
||||
import { dim, RESET } from './colors.js';
|
||||
import { UNKNOWN_TERMINAL_WIDTH } from '../utils/terminal.js';
|
||||
|
||||
// eslint-disable-next-line no-control-regex
|
||||
const ANSI_ESCAPE_PATTERN = /^\x1b\[[0-9;]*m/;
|
||||
@@ -25,7 +26,7 @@ function stripAnsi(str: string): string {
|
||||
return str.replace(ANSI_ESCAPE_GLOBAL, '');
|
||||
}
|
||||
|
||||
function getTerminalWidth(): number | null {
|
||||
function getTerminalWidth(): number {
|
||||
const stdoutColumns = process.stdout?.columns;
|
||||
if (typeof stdoutColumns === 'number' && Number.isFinite(stdoutColumns) && stdoutColumns > 0) {
|
||||
return Math.floor(stdoutColumns);
|
||||
@@ -43,7 +44,7 @@ function getTerminalWidth(): number | null {
|
||||
return envColumns;
|
||||
}
|
||||
|
||||
return null;
|
||||
return UNKNOWN_TERMINAL_WIDTH;
|
||||
}
|
||||
|
||||
function splitAnsiTokens(str: string): Array<{ type: 'ansi' | 'text'; value: string }> {
|
||||
@@ -459,9 +460,7 @@ export function render(ctx: RenderContext): void {
|
||||
}
|
||||
|
||||
const physicalLines = lines.flatMap(line => line.split('\n'));
|
||||
const visibleLines = terminalWidth
|
||||
? physicalLines.flatMap(line => wrapLineToWidth(line, terminalWidth))
|
||||
: physicalLines;
|
||||
const visibleLines = physicalLines.flatMap(line => wrapLineToWidth(line, terminalWidth));
|
||||
|
||||
for (const line of visibleLines) {
|
||||
const outputLine = `${RESET}${line}`;
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
export const UNKNOWN_TERMINAL_WIDTH = 40;
|
||||
|
||||
// Returns a progress bar width scaled to the current terminal width.
|
||||
// Wide (>=100): 10, Medium (60-99): 6, Narrow (<60): 4. Defaults to 10.
|
||||
// Wide (>=100): 10, Medium (60-99): 6, Narrow (<60): 4.
|
||||
export function getAdaptiveBarWidth(): number {
|
||||
const stdoutCols = process.stdout?.columns;
|
||||
const cols = (typeof stdoutCols === 'number' && Number.isFinite(stdoutCols) && stdoutCols > 0)
|
||||
|
||||
Reference in New Issue
Block a user