벌써 1년이나 되어 버린 내용이지만, 혹시나 다른 분들에게 도움이 될까 해서 정리해봅니다.
우분투가 버전업 될 때 마다 항상 빠지지 않고 나오는 이야기중에 하나가 한글 입력이 제대로 안된다 입니다. scim 시절에는 잘 쓰고 있었는데, 한동안 안쓰다가 다시 되돌아와 보니, 한글입력이 되긴 하는데 이건 원.. 된다고 말 할 수조차 없는 상황이 되버렸습니다. ibus를 쓰니 KDE에서 입력도 안되고, 몇년째 같은 버그는 해결이 되지도 않고 있고, 그나마 새로 만들어서 나아 보이는 fcitx는 KDE에서 입력이 잘되는데, ibus와 똑같은 한글 입력 문제를 가지고 있고, 벼루나 나비를 쓰려니 qt creator에서 뭔가 부자연스러운 듯 해서, 삽을 들어 버렸습니다.
우선 어떤 문제인지 정리를 먼저 했습니다.
1. 띄어쓰기가 제멋대로 나온다.
"클리앙은 인터넷" 이라고 치면 "클리앙 은인터넷”이라고 나옵니다.
2. 마지막 글자가 사라진다.
클리앙Clien이라고 치면, 클리Clien이라고 한영변환이 일어나기 직전의 글자가 사라집니다.
3. 글자를 입력하는 도중에 마우스 포커스를 이동하면, 이동한 포커스를 따라서 글자가 날아다님.
클리앙 이라도 치는 도중에 다른 창을 선택하면, 입력하던 창에서는 클리가 남아 있고 옮겨간 창에 앙이 붙어 있습니다.
생판 처음 보는 남의 소스를 들여다 보니 감을 잡기 힘듭니다. 근데 현상을 보니 ibus와 매우 유사한 것 같아서 ibus 버그 리포팅을 뒤지기 시작 했습니다. ibus에서는 2009년에 이미 확인되어 해결된 문제 였습니다.(https://code.google.com/p/ibus/issues/detail?id=654)
소스를 들여다 보니, 한글을 입력하는 도중에 한글외 문자가 들어오면 입력기를 거치지 않고, 바로 바이패스 하고, 입력중이 문자는 그 뒤로 전달이 되어 문자열 역전현상이 일어 난것처럼 보였습니다. 우선 github에서 fcitx 소스를 클론하고, 수정한 후에 원저작자에게 ibus와 똑같은 버그에 똑같은 해결 법이라고 pull request를 보냅니다. 그리고, fcitx-qt5도 수정 합니다. 이제 첫번째 문제는 해결이 됐습니다.
두번째는 한글 입력 특성에 있습니다. 조합을 해야 하는 한글 특성상, preedit->commit의 단계를 거쳐야 합니다. 한글은 중국어와 다른게 한글은 입력하는 그대로 쓰면 되지만, 중국어는 입력하는 내용을 바탕으로 후보중에서 골라야하는 상황이 발생합니다. 따라서 입력하는 도중에 입력언어가 달라지면, preedit 텍스트를 reset시켜야 합니다. 근데, 원저작자가 중국사람이다보니 한글입력과 중국어 입력의 차이를 이해하지 못하여 만들어진 버그 였습니다. 즉 중국어는 입력 하다가 취소를 누르면 다시 원상복귀하지만, 한글은 입력하는 도중에 취소를 선택하더라도 그 때까지 입력하던 문자는 그대로 남아 있어야 합니다.
마지막 문제는 입력기에서 focus out 이벤트에 대해서 처리를 제대로 하지 못해서 벌어지는 문제 였습니다. 즉 focus out이 일어날 때 commit을 시키든가 reset을 시키든가 했었어야 하는데, 그러지 못해서 포커스를 따라서 둥둥 떠다니고 있었습니다.(애석하게도 해결은 했는데 어떻게 해결했는지 남아있지나 않네요;;;), focus out이 일어날 때 reset을 시키도록 수정 했습니다.
두번째와 세번째는 pull request를 보냈지만, 거절 당하고, 대신 어떤 문제인지 확인해준 원저작자 덕분에 다른 방식으로 해결이 되었습니다.
모든 패치를 보내고 다시 소스를 받아서 한글을 입력해보니, 원하는 대로 잘 입력이 되고 있습니다. 오픈소스 프로젝트답게 불편하면 고쳐서 쓰지라는 상황이 잘 들어 맞기도 하고, kubuntu 15.04를 쓰는데 한글 입력에 스트레스를 받지 않으니 참 좋습니다.
from CV
#CLiOS
근데 해결하셨다니 !!! 감사합니다 ㅠㅠ
소스를 들여다보고 수정해서 전송까지 해주시는 덕분에 저희같은 엔드유저는 도움을 받고 삽니다. 글쓴이의 수고로움에ㅡ다시한번 감사드립니다.