2012-06-13 4 views
19

대체 화면은 vim, htop, screen, alsamixer, less 등과 같은 많은 "사용자 대화 형"터미널 응용 프로그램에서 사용됩니다. 응용 프로그램이 종료 될 때 사라지는 터미널 내용이므로 전체 터미널이 복원되고 응용 프로그램이 아무 것도 출력하지 않은 것처럼 보입니다.bash 스크립트의 "대체 화면"사용

필자는 자신의 셸 (bash) 스크립트에서 똑같은 것을 달성하고 싶다.하지만 이식 할 필요는 없다는 점이 다르다. 나는 리눅스와 xterm 기반의 터미널 에뮬레이터에만 집중할 것이다. 가능하다면 해결책은 tput과 같은 것을 사용해야합니다. 그러나 일부 외부 스크립팅 언어 (또는 C와 같은 것)를 사용하고 싶지 않습니다.

비록 C를 사용하고 싶지는 않지만 (가능한 한 의존성이 거의없는 bash 스크립트 여야 함), 나는 less의 소스 코드를 살펴 보았다. 그것은 데이터베이스로 terminfo를 사용하는 것 같으며 그것의 초기화에서 "티"터미널 기능을 찾습니다. 선을 제거 할 때 대체 sceen을 사용하지 않으므로 책임있는 코드 줄을 찾았습니다.

그러나 이러한 기능은 man terminfo에서 찾을 수 없습니다. 그러나 어쩌면 나는 이것을위한 해결책을 찾기위한 잘못된 길을 가고있다. 아마도 terminfo/tput은 내 친구가 아닙니다.

그래서 (어떻게) bash 스크립트에서 대체 화면을 사용할 수 있습니까? 누군가가 소스 코드에서 힌트를 찾을 수있는 간단한 응용 프로그램을 알고 있습니까? (C 응용 프로그램 또는 bash는 스크립트 또는 무엇이든 ...)

당신은이 명령을 사용하여 다른 화면으로 전환 할 수 있습니다

답변

29

다음

$ tput rmcup 

이 명령 만 출력 :와 다시

$ tput smcup 

과 터미널에 적합한 이스케이프 시퀀스. 그 텀이 경우 그들은 (기타 공지 미만 우아한 또는 휴대용)에 해당 될 것이다 :

$ echo -e "\e[?1049h" 

: 그리고

$ echo -e "\e[?1049l" 

이상의 단말 제어 명령 man 5 terminfo를 참조.

C 콘솔 응용 프로그램에 대한
+0

아아 아아입니다. 매력처럼 작동합니다. 감사! :) – leemes

+0

@leemes - 사실, 당신의 질문을 다시 읽으면,'ti' 터미널 기능에 대해서 이야기 할 것입니다. 그러나'man terminfo'를 신중하게 보면, 그것은'smcup'의 termcap 이름입니다 !!! – rodrigo

+0

Lol? 나는'ti '(질문에서 언급했듯이)를 찾았으며 그 능력을 찾지 못했다고 * 맹세 할 수있었습니다! 젠장 ... -.- – leemes

2

:

ncurses를

위키 백과 :

의 ncurses (새 저주)는 텍스트 기반 작성하는 프로그래머를 수있는 API를 제공하는 프로그래밍 라이브러리 사용자 인터페이스를 제공합니다.

less이 라이브러리를 사용합니다.

안녕하세요 월드 프로그램 here에서 gcc로 컴파일하려면 -lncurses 플래그가 필요합니다.

#include <ncurses.h> 

int main() 
{ 
    initscr();   /* Start curses mode   */ 
    printw("Hello World !!!"); /* Print Hello World   */ 
    refresh();   /* Print it on to the real screen */ 
    getch();   /* Wait for user input */ 
    endwin();   /* End curses mode  */ 

    return 0; 
} 
+2

** 그러나 일부 외부 스크립팅 언어 (또는 C와 같은 것)를 사용하고 싶지 않습니다. ** –

4

smcup/rmcup이 사용됩니다,하지만 부작용에 대한 : 대체/일반 화면 사이를 전환하는 이스케이프 시퀀스 보통 사람들의 terminfo 기능에 포함 - 항상.

어떤 배경이 잘 음, xterm 등 자주 묻는 질문 Why doesn't the screen clear when running vi?