터미널에서 화면 복원을 구성하는 방법은 무엇입니까?


10

터미널 / 환경에 따라 다음 순서는 다른 영향을 미칩니다.

$ ls
1
2
$ man ls
enter q

현재 프롬프트 위에 마지막으로 표시된 맨 페이지 화면이 보이거나 ls 출력 및 이전 셸 출력이 복원되었습니다. 예를 들어 vim쉘에서 무언가를하기 위해 사용 하고 중단 할 때 동일한 효과가 관찰됩니다 .

Fedora 19에서-화면의 기본값은 복원이없는 것으로 보입니다. gnome-terminal / xterm은 기본적으로 do-restore를 사용합니다.

Solaris에서는 사용 된 터미널 / 터미널 데이터베이스에 따라 다릅니다.

다른 시스템 / 터미널간에 일관되게 복원 동작을 구성하고 싶습니다.


항상 GNU 화면을 실행하면 일관된 동작이 나타납니다.
jordanm

답변:


16

이 기능은 '대체 화면'또는 일반 화면과 대체 화면 간 전환이라고합니다.

xterm을 사용하여 탐색 할 수 있습니다. 예를 들어 유형에 대한 man man에서 xterm종료 남자. 이제 Ctrl+ Mouse2 (중간 클릭)-> '대체 화면 표시' 를 통해 대체 화면으로 전환 할 수 있습니다 . 또는 다음과 같이 xterm 제어 시퀀스를 직접 입력 할 수 있습니다 .

$ echo -e '\033[?47h' # alternate screen
$ echo -e '\033[?47l' # normal screen

마지막 두 명령은 그놈 터미널에서도 작동합니다 (아마도 다른 명령에서도).

man/ vi/ less등을 시작할 때 기본적으로 추상적 인 명확한 화면 명령을 보냅니다. 종료 (또는 일시 중단)시 추상 복원 화면 명령을 보냅니다. 명령이 구체적인 터미널 제어 시퀀스로 변환되는 방법은 terminfo 데이터베이스에 정의되어 있습니다.

대체 화면 전환 비활성화

모든 터미널에서 작동해야하는 것은 로컬 terminfo 항목을 조정하는 것입니다. 즉, 추상 지우기 / 복원 화면 명령의 매핑을 제거합니다.

현재 $TERM입력에 대해 다음과 같이 할 수 있습니다 (예 : Fedora 19의 gnome-terminal) :

$ echo $TERM
xterm-256color
$ infocmp -1 > xterm-256color
$ sed 's/^\(xterm-256color\)|/\1-na|/ ; /smcup\|rmcup/d ' \
    xterm-256color > xterm-256color-na
$ diff -u xterm-256color* 
--- xterm-256color  2013-08-04 16:33:52.041393461 +0200
+++ xterm-256color-na   2013-08-04 16:36:56.829930520 +0200
@@ -1,5 +1,5 @@
 #  Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-256color
-xterm-256color|xterm with 256 colors,
+xterm-256color-na|xterm with 256 colors,
    am,
    bce,
    ccc,
@@ -155,7 +155,6 @@
    rin=\E[%p1%dT,
    rmacs=\E(B,
    rmam=\E[?7l,
-   rmcup=\E[?1049l,
    rmir=\E[4l,
    rmkx=\E[?1l\E>,
    rmm=\E[?1034l,
@@ -170,7 +169,6 @@
    sgr0=\E(B\E[m,
    smacs=\E(0,
    smam=\E[?7h,
-   smcup=\E[?1049h,
    smir=\E[4h,
    smkx=\E[?1h\E=,
    smm=\E[?1034h,
$ tic xterm-256color-na # loads the file to $HOME/.terminfo
$ find ~/.terminfo -type f
$ HOME/.terminfo/x/xterm-256color-na

이제 다음을 통해 테스트 할 수 있습니다.

$ TERM=xterm-256color-na man man # and then hit q

여러 터미널을 사용하는 경우 다른 터미널에 대해 위의 단계를 반복 할 수 있습니다. 모든 것이 예상대로 작동하면 TERM쉘 rc 파일을 통해 설정할 수 있습니다 .

다음과 같이 터미널 이름을 매개 변수로 직접 지정할 수도 있습니다 infocmp.

$ infocmp -1 screen > screen

대체 화면 전환 사용

일부 터미널은 대체 화면 전환 기능 (예 : 화면 )을 지원하지만 기본적으로 비활성화합니다 .

들어 screen당신은 당신을 통해 활성화 할 수 있습니다 ~/.screenrc:

$ cat ~/.screenrc
altscreen

ssh를 통해 원격으로 로그인하는 경우 (예 : Solaris 시스템) 아마도 원격으로 구성된 시스템 전체 terminfo-database 데이터베이스는 일종의 역사적이거나 고장 났거나 'bleeding edge'터미널과 일치하지 않는 특이한 / Solaris 관련 기본값을 포함합니다. 당신은 ssh를 실행합니다.

따라서 로컬 terminfo 데이터베이스를 / usr / share / info (클라이언트)에서 host:~/.terminfo(서버)로 복사하는 옵션 입니다.

컴파일 된 terminfo 형식이 호환되지 않는 경우 이전 단락과 같이 항목을 내보내거나 가져올 수도 있습니다.

Cygwin 설치 에서 terminfo-db를 사용해 보았고 Solaris 10 시스템에 직접 복사했습니다.

사용자간에 대체 terminfo db를 공유하려는 경우 TERMINFO환경 변수 를 통해 해당 경로를 지정 하십시오.

제어 순서 무시

일부 터미널은 대체 화면 전환을위한 제어 순서 비활성화를 지원합니다. 예를 들어 xterm에는 gnome-terminal에는없는 옵션이 있습니다.

xterm의 경우 X 자원입니다 . 예 :

XTerm*titeInhibit: true

프로그램 별 구성

일부 프로그램에는 전송하는 제어 순서 / terminfo 명령을 구성하기위한 구성 파일이 있습니다. 예를 들어

$ LESS=X less foo

less화면을 지우거나 복원하지 않도록 구성 합니다.

들어 vim당신은 같은 것을 포함 할 수

set t_ti= t_te=

당신 안에 ~/.vimrc.

옵션에서 해당 동작을 구성하는 방법을 찾지 못했습니다. 기본적으로 복원 화면을 보내지 않습니다.


나오지 cmd를 실제로 포함하는 전체 라인 삭제 smcup또는 rmcup. 제 경우에는 다른 것들이 같은 줄에 있습니다. 다른 것들도 삭제되었습니다. 아마 어쩌면 s/[sr]mcup=[^,]*,//'더 좋을 것입니다.
Mingliang
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.