나는 "할 수 없다"라고 말하지는 않겠지 만, Curses/NCurses의 재고가있는 상태에서 "할 수 없다"라고 말할 것입니다.
근본적인 문제는 curses 라이브러리가 초기화 될 때 터미널의 현재 상태, 특히 현재 표시되는 문자와 글리프를 확인할 수 없다는 것입니다.
예전에는 PC에서 화면을 메모리 매핑 했으므로 프로그램을 실행하면 나중에 캡처하고 나중에 복원하기 위해 기존 화면 상태에 액세스 할 수있었습니다.
일반적인 스마트 단말기의 경우 반드시 그런 것은 아닙니다. Linux 나 Mac에서 터미널 유형은 일종의 "xterm"입니다. Windows 콘솔 터미널에서 ANSI 스타일 터미널입니다 (xterm은 일종의 ANSI 터미널이기도합니다). 터미널 유형은 termcap/terminfo 라이브러리에서 사용하는 코드입니다. curses는 커서 이동, 문자 및 행 삭제, 색상 또는 비디오 반전 설정 방법을 알아야합니다.
화면과 관련된 모든 상호 작용은 다음과 같습니다. 메모리 조작보다 ESCape 시퀀스의 인쇄. 프레임 버퍼에서는 작동하지 않습니다.
XTerm escape sequences의 목록을 보면 화면의 내용을 호스트 프로그램에 다시보고 할 필요가 없음을 알 수 있습니다. 그러나 대체 프레임 버퍼가 있습니다. 예를 들어 vim
일 수 있습니다. vim
으로 파일을 편집하면 vim
이 전체 화면을 차지합니다. 그러나 종료하면 원래 화면이 복원됩니다. vim
이 대체 화면 버퍼로 전환하고 모든 작업을 수행 한 다음 종료시 기본 화면 버퍼를 복원합니다. 그러나 이것은 간단한 스위칭 연습으로 vim
은 원본 화면 버퍼의 내용을 "알지 못하거나 액세스하지 못합니다."
Linux 콘솔 (FKeys를 사용하여 화면을 전환 할 수있는 곳) 또는 GNU Screen과 같은 유틸리티를 사용하는 경우에는이 기능이 다릅니다. 이것들은 다른 개념 (Linux 콘솔 용 장치 드라이버 및 GNU Screen 용 가상 터미널)에 의존하며, 전체 프로그램은 각 화면 자체의 상태를 유지합니다. 그러나이 정보는 내가 알고있는 일반 프로그램에서는 사용할 수 없습니다. 그렇다면 Curses가 아닌 독점적 인 방법을 통해 이루어집니다.
나는 같은 질문을했다. 나는 그 대답에 실망했지만 이해합니다. 미학은 나에게 중요하기 때문에 다음과 같은 해킹을 시도해 볼 것입니다. 프로그램 시작시 창의 스크린 샷 찍기, OCD를 사용하여 캐릭터를 파악한 다음 Curses를 시작하고 내가 찍은 스크린 샷을 재생 한 다음 그것 이상의 UI. 아마도 크로스 플랫폼이나 순수 파이썬 방법으로 생각하지 않기 때문에 원시 코드가 필요합니다. 만약 내가 그것을 가능하게 만들 수 있다면 여기에 대답을 공유 할 수도 있습니다. – ArtOfWarfare