korean-input / issues

한국어 입력 이슈 트래커
91 stars 0 forks source link

jetbrain 끝글자 입력 버그 #5

Open 2NN300HU opened 3 years ago

2NN300HU commented 3 years ago

문제가 있는 프로그램

jetbrain ide들

환경

요약

마지막글자를 다쓰면 여전히 입력 중 상태이기에 컨트롤, 방향키 등을 별도로 사용하지 않으면 글자가 커서가 있는 곳에 써짐

재현방법

마지막 글자가 한글이게 주석을 쓰고 다른 곳에 커서를 클릭한뒤 글을 쓰면 글을 쓰는곳에 주석의 마지막 글자가 딸려옴

이미지

참고자료

기타

tian jetbrain ide 둘다 클로즈 소스라 의미는 없는데 한번 남겨봄

Riey commented 3 years ago

제보 감사합니다

jetbrains ide가 다 오픈소스가 아닌건 아니고 https://github.com/JetBrains/intellij-community

설령 오픈소스가 아니라고 해서 제보가 안되는건 아닙니다 클로즈드 소스도 버그제보가 안되는건 아니고 여긴 그런걸 추적하기 위해서 있으니까요

PhysSong commented 3 years ago

IntelliJ IDEA community edition + uim(Byeoru) 조합으로도 실험해 봤는데 같은 현상이 나타났습니다. JAVA 다운로드에 포함된 OpenJDK 11.0을 사용했습니다. @Riey님 링크를 따라가서 이것저것 찾아 보니 에디터java.awt 클래스를 사용하는 걸 확인했습니다. 한국어 입력 도중 커서 이동이나 포커스 전환 등 입력 중이던 글자의 처리를 완료해야 하는 상황에서 프로그램은 java.awt.im.InputContext에 있는 endComposition() 함수를 호출해서 JAVA 내부 로직이나 입력기와 상호작용을 통해 진행 중인 입력을 완전히 처리하도록 해야 하는 것 같던데 아직은 그런 고려가 되어 있지 않은 것으로 보입니다. 일단 다른 OS나 입력기로 테스트를 좀 더 해 보고 자료가 모이면 제가 issue tracker에 제보해 보는 걸 검토하겠습니다.

PhysSong commented 3 years ago

OpenJDK 11 기준 에디터 컴포넌트의 base class인 JTextComponent에는 그런 문제가 없었는데 이는 JTextComponent가 내부적으로 사용하는 ComposedTextCaret 클래스에서 해당 부분을 신경쓰고 있기 때문인 것으로 보입니다. 원인 파악이 어느 정도 된 것 같으니 며칠 내로 데모 영상 포함해서 제보해 보도록 하겠습니다.

Riey commented 3 years ago

@PhysSong 잘 찾으셨네요 아직 올라오진 않아서 불명으로 뒀습니다 정리되면 언제든 확인됨으로 바꿔주세요

PhysSong commented 3 years ago

버그 트래커를 검색한 결과 이미 제보가 되어 있어서 위의 내용을 바탕으로 댓글을 추가했습니다. https://youtrack.jetbrains.com/issue/JBR-1995

kakadais commented 3 years ago

나이스한 트래킹이네요.

그러나 저러나.. JDK 이벤트 관련 문제라면 awt 패키지를 패치(?) 하는 형태로 수정이 과연 가능할까요? 그렇게만 된다면 linux + mac 한코에 문제가 해결 될 텐데요. 아니면 JDK 진영에 요청해서 반영이 되기를 기다려야 하는게 되겟군요.

Jetbrains에 위 버그 리포팅 한게 저였는데, 꽤 오래도록 영 반응이 없습니다. 한글 뿐만 아니라 아랍권이나 기타 비영어권에서도 같은 문제가 발생한다는 리포트들을 봤었는데, 이 부분에 대해서는 Jetbrains 가 실망 스럽네요.

참고로 Mac용 Notability에는 더욱 요상한 한글 버그가 있어서 리포팅 했었는데, 어느샌가 패치가 되어 있습니다. 얘는 자바가 아닌 느낌인데용.

암튼 젯브레인즈 실망스-

구름 입력기로 현재는 나름 잘 쓰고 있긴한데, 같이 일하던 친구 하나는 이 문제로 웹스톰 쓰기를 거부 했던 기억이 나네요.

kakadais commented 3 years ago

짐 보니까 웹스톰은 /Applications/WebStorm.app/Contents/jdk 내부에 jre도 끌어 안고 있군요. 리스키하지만 java 능력자 형님들이 나선다면 가능하지 않을까요 ㅋ

PhysSong commented 3 years ago

OpenJDK 내부 JTextComponent 구현에서는 마우스 클릭 시 마지막 글자를 커밋하도록 되어 있어서 커스텀 클래스를 사용하는 게 아닌 이상 큰 문제는 없습니다. 사실 저 구현에도 버그가 하나 있었던 것 같긴 한데 마지막 글자가 입력 중인 상태에서 마지막 글자부터 왼쪽에 있는 몇 글자를 선택해도 입력 중인 상태에 그대로 머물러서 Ctrl + X로 잘라냈을 때 이상해졌던 것 같습니다(아직 확실히 테스트해 보진 않았습니다). Jetbrains IDE들은 JAVA Swing에서 제공하는 에디터 컴포넌트를 커스터마이징해서 쓰는데 커스터마이징 과정에서 마우스 이벤트에 마지막 글자를 처리하는 부분을 구현하지 않았던 게 문제입니다. 저도 JAVA 개발자가 아니고 저쪽 코드를 잘 아는 게 아니라 어떻게 고쳐야 할지는 모르겠는데 그래도 뭐가 문제인지 알았으니 Jetbrains 개발자 분들이 잘 고쳐 주시기를 기대하는 것 말고는 할 수 있는 게 없네요.

kakadais commented 3 years ago

Youtrack 광고 만큼만 콜라보를 잘 해주면 금방 해결 해주지 싶네요.

근데 생각해보니 일개 개발사에서 고쳐봐야 여전히 땜빵질에 지나지 않는군요. 2byte 캐릭터 입력 일 때로 추정되는데 마우스 클릭 이벤트가 당최 왜 마지막 캐릭터를 긁어 오는지 해당 버그가 os 레벨에서 패치가 되지 않는다면 계속해서 발생 할 일이라는 건데...

mac은 sw레벨에서 워낙들 잘 개발하니까 괜찮은데, linux 쪽은 어떻게든 해결 해야 할근데. 흠.

무튼 수고 하셨습니다.

PhysSong commented 3 years ago

참고로 말씀드리자면 2byte 입력과 관련된 건 아니고 한국어 입력 과정이 서양 언어와 다르기 때문입니다. 영어 알파벳은 키 하나만 누르면 그 즉시 글자가 완성되지만 한국어는 띄어쓰기, 특수문자, 방향키 등을 누르기 전에는 마지막 글자가 항상 입력이 덜 끝난 상태로 인식되기 때문에 특별한 처리가 없으면 입력 중인 마지막 문자가 커서를 따라가게 됩니다. 중국어, 일본어 등에서도 이런 버그가 꽤 있긴 한데 한국어에서 유독 심한 건 한국어 입력은 중국어, 일본어 입력처럼 영어 키보드로 발음을 입력하고 후보군 중에서 선택하는 방식이 아니기 때문이기도 하고 다른 이유도 더 있습니다.

kakadais commented 3 years ago

오 그렇군요. 종종 os/input sw 에 따라 buffer 형태로 보이고 최종적으로 입력 되는 것과 연관이 있나보네요. 후보군 중에 선택하는, 다소 사용에 폭력적인 언어가 장점이 될때도 있군요.

그렇다고 해도 마우스 이벤트가 키보드 이벤트를 끌고 오다니 상식적으로는 심각한 OS 레벨 버그로 생각이 되네요. 키보드/마우스 드라이버 차원에서도 해결 하기에는 거시기 해보이고..

공짜로 자꾸 물어봐서 미안한데, 다른 이유에 대해서 시간 날때 알려주시면 대단히 감사하겠습니다-

인코딩 관련 사항은 아는 것도 아니고 모르는 것도 아닌 상태로 평생을 가는 듯 하네요.

Riey commented 3 years ago

변경사항을 추가합니다 macOS의 경우에는 해결이 된다고 하는데 리눅스는 아직이라네요 https://youtrack.jetbrains.com/issue/JBR-1995#focus=Comments-27-4685665.0-0