터미널 상호 작용을 허용해야하는 C 프로그램에서 작업하고 있습니다. 백 스페이스 키를 올바로 작동 시키려고 노력하는 데 며칠 동안 노력했습니다.VT100 이스케이프 코드 C에서 이상한 행동 커서 이동 프로그램
내 프로그램에서 터미널에서 입력을 폴링합니다. I 입력을 검출 할 때, I는 눌려진 키가 백 스페이스가 있었다면 확인 :
if((letter == 8 || letter == 127) && cursorPosition >= 1)
cursorPosition
터미널의 커서의 현재 위치를 유지한다. 사용자가 내 프롬프트 (>
)를 삭제할 수 없는지 확인하기 위해이 검사를 수행합니다. 이 코드는 내가 운영체제의 일부이기 때문에
serial_print("\033[1D");
serial_print("\033[K");
serial_print 날에 의해 정의 된 함수입니다 : 검사가 통과되면
다음, 나는 다시 커서를 이동하고 문자를 제거하려면 다음 코드를 사용 쓰기 및 실행 qemu. 나는 터미널에 입출력을 위해 시리얼 포트를 사용하기 때문에 c printf에 접근 할 수 없다. 이 함수는 이미 올바르게 작동하는 것으로 알려져 있습니다.
본질적으로 생각한 첫 번째 줄은 커서를 한 열 왼쪽으로 이동시키고 두 번째 줄은 커서 오른쪽으로 모든 내용을 지워야한다는 것입니다.
3 개 이상의 문자가 터미널의 행에 입력 될 때까지 제대로 작동합니다. 나는 하나 개의 문자가있는 경우
는 : 1
을 다음 백 스페이스를 누르면, 내가 얻을 : 두 개의 문자를 입력했을 때 나는 또한 제대로 작동
. 나는 세 문자가있는 경우 그러나 : 123456
백 스페이스 6 번을 누른 후 : 123456454
123
: 123
다음 백 스페이스를 세 번 눌러,이 같은 라인 모습입니다
터미널이 이스케이프 시퀀스를 해석하는 방식이 현재 줄에 몇 개의 문자가 있는지에 따라 달라지는 것 같아서 혼란 스럽습니다. 내 Mac에서 VirtualBox로 Ubuntu 16.04를 실행하고 qemu를 사용하여 우분투 터미널에 쓰고있는 OS를 실행합니다. 정보가 다를 경우.
아무도이 문제를 일으킬 수있는 아이디어가 있습니까? 더 자세한 정보가 필요하거나 잘못 입력 한 경우 알려 주시기 바랍니다.
버퍼 저장/인쇄 코드 란 무엇입니까? 즉, 화면을 올바로 조작 할 수 있지만 저장 버퍼가 아닌 것은 가능합니까? – usr2564301
문제를 시연하는 (짧은) 프로그램이 없다면 아무 것도 언급 할 사항이 없습니다. –