navilera/NavilIME

세벌식 390 사용시 버그

Closed this issue · 1 comments

세벌식 390사용시 버그가 있습니다.
한글 모드에서 Shift누르고 오른손에 해당되는 키를 누르면
영어가 나옵니다.
예를 들면

한글 모드에서 Shift 누른상태에서 오른손에 해당되는 키(예를 들면 T,G,B,Y,H,N,U,J,M,I,K,<,P) 를 누르면
한글이나 숫자가 나와야 하는데 영어가 나옵니다.

원대대로라면 Shift + M를 누르면 숫자 0이 나와야 합니다.

좋은 프로그램를 만들어 주셔서 감사합니다.^^

버그 리포트 감사합니다.

원인

libhangul은 한글의 조합이 끝나지 않은 상태에서 숫자나 특수문자등이 입력되면 조합 완료(commit)로 직전에 조합 중이던 글자와 방금 입력한 숫자나 특수 문자를 배열로 리턴합니다. 그리고 조합중(preedit)인 글자는 없다고 (0 리턴) 나옵니다.

현재 버전 나빌 입력기는 이 상황에서 그냥 입력 문자를 처리하지 않고 현재 완료되지 않은 글자를 완료 해 버리고 입력으로 들어온 값을 그대로 출력합니다.

이렇게 처리했을 때, 두벌식이나 세벌식 318Na에서는 문제가 되지 않습니다. 숫자나 특수문자 키를 리맵하지 않기 때문에 libhangul을 거치지 않고 입력을 바로 출력해도 되기 때문이죠.

그러나 세벌식 390 같이 시프트 키를 이용해 숫자나 특수문자를 일반 영문 자판에 배치해놓으면 libhangul을 거쳐서 리맵된 입력 값을 받아 와야 합니다. 현 버전 나빌 입력기는 이 작업을 하지 않고 있어서 영어가 그대로 출력되는 것입니다.

해결 방법

libhangul에서 commit[0]이 0이 아니고 preedit[0]이 0이면 입력기의 composition을 종료하고 commit[1]부터 commit[N]까지 중 0이 아닌 값을 append로 내보냅니다.