@shutootaki/gwm
Version:
git worktree manager CLI
33 lines • 1.22 kB
JavaScript
import { useState, useEffect } from 'react';
import { useStdout } from 'ink';
/**
* ターミナルの現在幅を返し、リサイズにも追従するカスタムフック。
*
* - TTY でない環境 (CI, Jest など) では `stdout` が undefined になる場合があるため、
* その際はフォールバック値を返す。
* - `resize` イベントを購読し、幅が変わる度に再レンダーを発生させる。
*/
export const useTerminalWidth = (fallback = 120) => {
const { stdout } = useStdout();
const [width, setWidth] = useState(stdout?.columns ?? fallback);
useEffect(() => {
if (!stdout)
return;
const handler = () => {
setWidth(stdout.columns ?? fallback);
};
stdout.on('resize', handler);
return () => {
const stream = stdout;
if (typeof stream.off === 'function') {
// Node v14 以降は off API がある
stream.off('resize', handler);
}
else {
stdout.removeListener('resize', handler);
}
};
}, [stdout, fallback]);
return width;
};
//# sourceMappingURL=useTerminalWidth.js.map