scroll/src/bun/terminal_io.ts

39 lines
852 B
JavaScript
Raw Normal View History

/**
* Wrap the runtime-specific hook into stdin
*/
import { ITerminalIO, ITerminalSize } from '../common/mod.ts';
function getSizeFromTput(): ITerminalSize {
const rows = parseInt(
Bun.spawnSync(['tput', 'lines']).stdout.toString().trim(),
10,
);
const cols = parseInt(
Bun.spawnSync(['tput', 'cols']).stdout.toString().trim(),
10,
);
return {
2023-11-09 12:05:30 -05:00
rows: (rows > 0) ? rows + 1 : 25,
cols: (cols > 0) ? cols + 1 : 80,
};
}
2023-11-08 18:07:34 -05:00
const BunTerminalIO: ITerminalIO = {
inputLoop: async function* inputLoop() {
for await (const chunk of Bun.stdin.stream()) {
yield chunk;
}
},
getSize: function getSize(): ITerminalSize {
return getSizeFromTput();
2023-11-08 18:07:34 -05:00
},
write: async function write(s: string): Promise<void> {
const buffer = new TextEncoder().encode(s);
2023-11-08 18:07:34 -05:00
await Bun.write(Bun.stdout, buffer);
},
};
export default BunTerminalIO;