이 블로그 검색

2022년 10월 26일 수요일

kile+fcitx 끝글자 버그 수정법. (kile 코드들 고치는 방식을 시도함)

https://cogniti-works.blogspot.com/2018/09/blog-post_4.html

위 블로그 포스팅을 보고 힌트를 얻어서 하기로 한다. 



한글입력기 끝글자 관련해서 검색해보면, ibus는 문제가 많아서 fcitx로 간다느니 뭐 그런글들이 많다. 하지만 중요한건 내가 fcitx를 쓰고 있는데도 이런문제가 생겼다는거다. 

많은 입력기들은 cjk외에는 ime입력기 같은거 없어도, compose키나 alt_gr키 같은거 이용하면, 되서그런지 중국,일본, 한국 말고는 관심이 없는 듯 하다.  

그러다 보니, 끝글자 버그 이슈는 20년이 넘는 아주 오래된 이슈, 한국인 기준으로는 버그이지만, x-window qt gtk 개발자도 기반 어플리케이션 개발자들도 무관심한 버그이다. 뭐 자기들은 영어나 영어기반 언어 쓴다 이거다. 


여기저기 보면, 코드 고쳐서 입에다 떠먹여줘도 그거 버그 아니라서 이슈 닫는다는 반응을 겪었다는 사람들이 보인다. 

뭐 어쩌겠는가, 목마른 사람이 우물을 파야지. 끝글자 버그는 초성중성종성을 조합해서 글자가 나가기 전에 ime가 조립을 하면서도 화면에는 보여줘야하고 다른 글자를 누르면 수정도 해야하는 복잡한 한글 같은 언어에서만 나타난다. 뭐 로만자(??)를 사용하는 일본, 중국애들도 겪을 것 같은데도 2022년 오늘 내게도 똑같이 일어나는거 보면 , 한글만의 문제인건가 싶기도 하다. 


뭐 이제 더 이야기할 것은 없고, 저 블로그에서, qt, gtk, X11 어떤 gui프레임웍을 쓰는지에 따라 검색해야할 키워드를 주었기에, 반신반의 하고, 검색을 해서 답을 얻었다. 


kde는 qt위에다가 올린 것이니, 

grep -i qinput -R . 이라는 

검색으로 찾았다. eventfilter.cpp라는 파일에 해당하는 부분이 있다. 

kile은 위젯이 워낙많기에 modal dialog가 아닌 widget도 아주 많이 화면상에 비친다. 그렇지만 우리의 텍스트 입력은 당연히 text input 위젯에 바로바로 적용이 되어야 한다. 그러다보니 중앙에서 키보드 event를 감시한다. 

kile은 또 그리스어 특수문자 입력 때문인지, ime event도 감시한다. unicode text가 나올 때, tex format으로 할지 unicode문자를 그대로 보여줄지 뭐 이런걸 하려고 하는거 같은데, qimeevent라는거에... 잠시 속아서 헛짓을 좀 했다. 

다시 돌아와서, 마우스 더블클릭 이벤트 위에서 마우스 press 이벤트를 가져오자. 


 11 +#include <QInputMethod>

 19 +static void  reset_im()  
20 +{

21 +  QInputMethod* ime =   QGuiApplication::inputMethod();
22 +  ime->reset();
23 +}

 31 +    else if(e->type() == QEvent::MouseButtonPress) {
32 +      reset_im();
33 +    }

 34      else if(e->type() == QEvent::MouseButtonDblClick) {
]

QInputMethod 를 Include한다. 
reset_im함수를 static하게 만든다. (네임스페이스 오염방지)
mouse press 이벤트를 받으면 reset_im 함수를 호출한다. 
원래의 마우스 입력 이벤트가 그대로 사용되어야 하므로 return을 하지 않는다. 
(결국은 맨 뒤로가서 return false가 되어 해당 qwidget에 이벤트가 전달)


빌드해서 설치한다. 

결과적으로 끝글자 버그는 사라졌다. 

kate에 이버그가 있언는지 기억이 안나는데 그거 확인하고 고쳐야겠다. 

chrome에는 이 버그가 없는데, 대신, 강제로 조합을 중간에 깨뜨리는 미친 짓거리가 일어난다. 
요거 아무래도, 이벌식 사용자 기준으로 끝글자 버그 해결하려고... 뭐 하다가 이렇게 된거 같은데, 
요건 고칠 엄두가 안나므로, 주소표시줄에서 글자를 만들어서 복붙을 하고 있다. 
아무래도, chrome 에서 EDITOR를 불러서 강제로 텍스트 편집기를 띄우는 플러그인을 찾아봐야겠다. 어차피 짜증나는거, vim이나 emacs라도 올려서 써봐야지.

댓글 없음:

댓글 쓰기

가장 많이 본 글