OS X 터미널 라인이 스크롤 백되지 않습니다


12

Mac OS X의 터미널 (TERM = xterm)을 사용할 때 잘리는 문제가 있습니다. 때로는 상단에서 스크롤되는 행이 스크롤 백 버퍼에 추가되지 않는 상태가됩니다. 나는 사용하지 screen않거나 비슷 하지 않다 . 이것은 터미널 탭 안에있는 일반 bash 쉘입니다.

새 탭을 연 직후에는이 작업을 수행하지 않습니다. 문제 탭에서 실행 한 것의 부작용이라고 생각합니다. 내 생각에 그것은 xterm 에뮬레이션, 아마도 스크롤 영역과 관련이 있다고 생각합니다.

작동하지 않는 것 :

  • Shell 메뉴를 통한 소프트 및 하드 리셋
  • reset탭에서 실행

터미널 및 / 또는 xterm 상태를 재설정하는 신뢰할 수있는 방법이 있습니까?

유일한 해결책은 탭을 닫고 새 탭을 여는 것만으로도 무슨 일이 일어나고 있는지에 대한 설명을 제공 할 수 있습니까?


어떤 Mac OS X 버전을 사용하고 있습니까? 버퍼에 "무제한"보다 적은 것이 있고 누락 된 줄은 단순히 버퍼의 백엔드에서 떨어진 가장 오래된 줄입니까?
Spiff

Mac OS X 10.6.2 및 버퍼는 10,000 행이지만 손실 된 행은 화면 바로 스크롤되는 것입니다. 한 화면을 위로 올리면 해당 줄이없고 실제로 줄이 맨 위로 스크롤 될 때 가장 최근의 스크롤 백 페이지가 변경되지 않습니다.
Steve Madsen

답변:


19

이것은 터미널이 대체 화면 버퍼를 사용하고 있음을 의미합니다. 스크롤 백 로그로 스크롤되는 기본 화면과 그렇지 않은 대체 화면이 있습니다. top, less, emacs, vim 및 screen과 같은 "Full screen"또는 "screen-oriented"프로그램은 기본적으로 터미널을 대체 화면으로 전환합니다.

각 화면에는 자체 내용과 상태가 있습니다. 대체 화면이 있으면 프로그램이 전체 디스플레이를 인계 한 다음 메인 화면으로 다시 전환하여 종료시 이전 내용을 복원 할 수 있습니다.

Mac OS X Lion 10.7부터 터미널에는 화면을 수동으로 전환하는 데 사용할 수있는 메뉴 항목이 있습니다.

보기> 대체 화면 표시 / 숨기기

"전체 화면"프로그램이 종료 된 후 대체 화면에서 텍스트를 보거나 복사 할 수 있도록 주로 제공됩니다. Xterm은 비슷한 명령을 가지고 있습니다.

또한이를 사용하여 프로그램이 특정 화면을 수동으로 사용하도록하여 출력이 스크롤 백 로그로 이동하는지 여부를 제어 할 수도 있습니다. 그러나 현재 대체 화면으로 명시 적으로 전환하는 프로그램을 사용하는 경우 프로그램이 실행되는 동안 기본 화면으로 강제 전환하면 혼동되거나 예기치 않은 결과가 발생할 수 있으므로주의해서 사용하십시오.

프로그램에 따라 명령 줄 인수 나 주 화면을 대신 사용하도록 구성 할 수있는 다른 방법이있을 수 있습니다. 예를 들어, less -X.

일부 terminfo 항목은 대체 화면 (예 :)을 사용하지 않도록 특별히 설계되었습니다 xterm1. TERM=xterm1 emacs메인 화면에서 Emacs를 실행합니다. Lion xterm1의 기본값과 비교할 때 다른 유용한 기능을 많이 사용할 수 없으므로 영구적으로 사용하지 않는 것이 좋습니다 xterm-256color.

tput명령을 사용하여 화면을 전환하여 쉘 또는 스크립트 내부에서 이스케이프 시퀀스를 실행할 수도 있습니다. tput smcup대체 화면으로 tput rmcup전환하고 기본 화면으로 다시 전환합니다.

현재 실행중인 프로그램을 보려면 터미널 창 또는 탭 제목에 표시된 프로그램 이름을 보거나 검사기 창 ( 셸> 검사기 표시 )을보십시오. 인스펙터 목록의 마지막 프로세스는 (일반적으로) 화면을 사용하는 현재 프로그램입니다. 기본 화면을 대신 사용하도록 구성해야합니다.


1
이것은 매우 유망한 답변처럼 들립니다. 대체 화면이 활성화 된 상태에서 프로그램이 비정상적으로 종료 될 수 있다는 합리적인 설명입니까?
Steve Madsen

"전체 화면"프로그램을 실행 한 후 셸로 돌아온 경우, 예를 들어 나열된 프로그램과 같이 가장 많이 사용되는 프로그램은 스스로 정리하는 것이 신뢰할 수 있지만 가능합니다. "전체 화면"프로그램이 충돌하면 터미널을 대체 화면에 남겨 둘 수 있습니다. 그러나 메인 화면으로 다시 전환하는 것을 포함하여 Shell> Send Hard Reset 을 시도했다고 말했습니다 . 다시 발생하면이 명령을 사용하여 다시 전환 할 수 있습니다.tput rmcup
Chris Page

또 다른 가능성은 프로그램이 "스크롤 영역"으로 터미널을 떠난 것입니다. 스크롤 할 때 터미널이 하위 범위의 행만 스크롤하도록 터미널에 지시하는 코드가 있습니다. 프로그램은이 기능을 사용하여 화면에서 스크롤되지 않는 상태 표시 줄을 표시합니다. 스크롤 영역에 맨 윗줄이 없으면 텍스트가 스크롤 백 로그로 스크롤되지 않습니다. 그러나 다시, 당신은 하드 리셋을 시도했다고 말했다.
Chris 페이지

2
필자의 경우 ssh원격 컴퓨터에 대한 세션이 실패 (시간 초과 되었습니까?) 된 상태 vi에서 터미널이 대체 화면에 남아있는 것처럼 보입니다 ( vi정리할 기회가 없었기 때문에 ). 그 후 보기> 대체 화면 숨기기 메뉴 항목 ssh을 선택하여 문제를 해결할 때까지 동일한 터미널의 새 세션에서 OP에 의해 설명 된 문제가 나타납니다 .
Hephaestus

감사합니다. 보기> 대체 화면 표시 / 숨기기가 도움이되었습니다. 그것은 무의식적으로 부딪쳐 야 할 중요한 조합을 가지고 있으며, 무슨 일이 있었는지 또는 어떻게 취소 할 것인지 몰랐습니다
aexl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.