화면을 지우지 않고 재설정 명령으로 입력 설정을 재설정할 수 있는 방법이 있습니까?

화면을 지우지 않고 재설정 명령으로 입력 설정을 재설정할 수 있는 방법이 있습니까?

내 응용 프로그램에 문제가 있습니다. Dosemu2가 -dumb -td -kt모드에 있고 내 MATE 터미널 창을 엉망으로 만들고 있습니다. (MATE 터미널 창에서 직접 또는 그 사이에 GNU 화면을 사용합니다.) killall -v dosemu.binsignal()을 사용하여 응용 프로그램을 종료하거나 충돌시킨 후 이 창에서 계속 실행되는 bash 셸은 MATE 터미널로 많은 텍스트 데이터를 받게 됩니다. 창은 마우스 커서 이동 데이터를 받습니다.

명령을 실행 하고 reset때로는 tset. 항상 마우스 입력을 재설정하지만 피하고 싶은 화면도 항상 지워집니다. 화면이 지워지지 않았고 마우스 입력 문제가 해결되지 않았습니다.tsetresetreset -I

reset보이는 화면 영역을 지우지 않고 마우스 입력을 비활성화 하는 방법이 있습니까 ?

나는 이전에 Dosemu2 토론에서 이 문제에 대해 다음과 같이 썼습니다.https://github.com/dosemu2/dosemu2/discussions/2061

아래 이미지는 텍스트로 입력된 최종 마우스 데이터를 보여줍니다.

osemu2를 종료한 후 터미널 창은 텍스트 형식으로 마우스 이동 데이터를 받습니다.

답변1

reset명령은 의 단축키입니다 tput reset. 이 명령에 대한 문서에는 다음과 같이 나와 있습니다.

reset[...] 존재하는 경우 터미널의 재설정 문자열이 출력됩니다( rs1, rs2, rs3, rf). 재설정 문자열은 없지만 초기화 문자열이 있는 경우 초기화 문자열이 출력됩니다. 그렇지 않으면 재설정은 init와 동일한 효과를 갖습니다.

따라서 다양한 모드에서 터미널을 전환하기 위해 실제로 터미널에 전송되는 명령의 순서를 알아내려면 , 및 에 대한 설정을 reset살펴봐야 합니다 .rs1rs2rs3rf

이 시점에서 , , , 및 대신 어떤 것이 화면을 지우지 않고 문제를 해결하는지 확인할 reset수 있습니다 .tput rs1tput rs2tput rs3tput rf

그러나 계속 다이빙하십시오. man terminfo문서 에는 간단히 다음과 같이 나와 있습니다.

reset_1string        rs1        r1         reset string
reset_2string        rs2        r2         reset string
reset_3string        rs3        r3         reset string
reset_file           rf         rf         name of reset file

이는 terminfo 데이터베이스로 직접 복원해야 함을 의미합니다.

infocmp | grep -Po '\w+=[^,]*' | grep -E '^(rs[123]|rf)='

나에게 이것은 두 개의 항목을 반환합니다.

rs1=\Ec
rs2=\E[!p\E[?3;4l\E[4l\E>

\E이는 표현으로 직접 읽을 수 있고 시퀀스 Escape로 다시 작성할 수 있습니다 .printf

printf '\ec'
printf '\e[!p'; printf '\e[?3;4l'; printf '\e[4l'; printf '\e>'

이스케이프 시퀀스가 ​​실제로 무엇을 의미하는지 알아내는 것은 아마도 이 답변의 범위를 벗어나지만 다음은 몇 가지입니다.

ESC c          # Reset and clear screen
ESC [!p
ESC [?e;4l
ESC [4l
ESC >

마지막으로, 다음이 있다는 점에 주목할 가치가 있습니다.최근 제출됨dosemu필요한 재설정을 직접 수행하십시오.

# disable xterm mouse tracking
printf '\033[?1006l\033[?1003l\033[?1002l\033[?1000l\033[?9l'
# disable xterm cursor keys
printf '\033[?1l'

ESC [?1006l ESC [?1003l ESC [?1002l ESC [?1001l ESC ?9l
ESC [?1l

관련 정보