Node.js로 뭔가 관리하는 프로그램을 만들다 보면 터미널을 다루고 싶을때가 있다.
단순히 Console.log로 로그만 남기던 수준에서 좀 더 높은 레벨로 터미널을 다루고 싶을경우 process.stdout 을 이용하면 더 많은걸 할 수 있다.
사실 이 글을 남기는 이유는 미래에 내가 까먹을 것을 대비해서 일종의 백업용으로..
우선 화면을 정리하는거 부터.
process.stdout.write('\033c');
위와 같이 입력을 하면 전체 화면이 클리어가 된다. 터미널에서 clear를 입력한 효과를 볼 수 있다.
현재 화면의 터미널의 크기는 다음과 같이 구할 수 있다.
console.log(`${process.stdout.columns}x${process.stdout.rows}`);
만약에 화면을 리사이즈 했을 경우 사이즈를 실시간으로 구하려면 다음과 같은 코드도 가능하다.
process.stdout.on('resize', () => {
process.stdout.write('\033c');
console.log('screen size has changed!');
console.log(`${process.stdout.columns}x${process.stdout.rows}`);
});
다음으로 커서를 위치하는 방법이다.
2가지 방법이 있는데, 상대 위치를 이용하는 방법과, 다른 하나는 절대 위치를 이용하는 방법이다.
이 방법에는 기본 모듈이 하나 필요하다.
const readline = require('readline');
위와 같은 모듈을 먼저 불러오고..
readline.cursorTo(process.stdout, posx,posy);
이 방법은 절대 위치로 화면 왼쪽위를 0,0 으로 기준으로 하여 x 값 , y 값으로 커서를 이동시키는것.
readline.moveCursor(process.stdout, posx,posy);
이 방법은 현재 커서의 위치를 기준으로 하여 이동시키게 된다. posy 는 둘다 생략 가능.
그리고 아쉽게도, 현재 위치를 얻어올 수 있는 방법은 없다. 따라서 계산하는 수밖에 없음.