내 응용 프로그램에 문제가 있습니다. Dosemu2가 -dumb -td -kt
모드에 있고 내 MATE 터미널 창을 엉망으로 만들고 있습니다. (MATE 터미널 창에서 직접 또는 그 사이에 GNU 화면을 사용합니다.) killall -v dosemu.bin
signal()을 사용하여 응용 프로그램을 종료하거나 충돌시킨 후 이 창에서 계속 실행되는 bash 셸은 MATE 터미널로 많은 텍스트 데이터를 받게 됩니다. 창은 마우스 커서 이동 데이터를 받습니다.
명령을 실행 하고 reset
때로는 tset
. 항상 마우스 입력을 재설정하지만 피하고 싶은 화면도 항상 지워집니다. 화면이 지워지지 않았고 마우스 입력 문제가 해결되지 않았습니다.tset
reset
reset -I
reset
보이는 화면 영역을 지우지 않고 마우스 입력을 비활성화 하는 방법이 있습니까 ?
나는 이전에 Dosemu2 토론에서 이 문제에 대해 다음과 같이 썼습니다.https://github.com/dosemu2/dosemu2/discussions/2061
아래 이미지는 텍스트로 입력된 최종 마우스 데이터를 보여줍니다.
답변1
이 reset
명령은 의 단축키입니다 tput reset
. 이 명령에 대한 문서에는 다음과 같이 나와 있습니다.
reset
[...] 존재하는 경우 터미널의 재설정 문자열이 출력됩니다(rs1
,rs2
,rs3
,rf
). 재설정 문자열은 없지만 초기화 문자열이 있는 경우 초기화 문자열이 출력됩니다. 그렇지 않으면 재설정은 init와 동일한 효과를 갖습니다.
따라서 다양한 모드에서 터미널을 전환하기 위해 실제로 터미널에 전송되는 명령의 순서를 알아내려면 , 및 에 대한 설정을 reset
살펴봐야 합니다 .rs1
rs2
rs3
rf
이 시점에서 , , , 및 대신 어떤 것이 화면을 지우지 않고 문제를 해결하는지 확인할 reset
수 있습니다 .tput rs1
tput rs2
tput rs3
tput 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