Node.js Terminal 다루기

in #kr7 years ago

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 는 둘다 생략 가능.

그리고 아쉽게도, 현재 위치를 얻어올 수 있는 방법은 없다. 따라서 계산하는 수밖에 없음.