nimf 에서 dvorak 영문자판을 사용하여 한글 입력할 때 발생하는 오류 수정 패치

cogniti3의 이미지

수개월 전에 libhangul 이 업데이트되면서 nimf 에서 dvorak 영문자판을 사용하여 한글 입력할 때 오류가 발생하는데 이 오류를 수정하는 패치입니다. 참고 사이트 https://www.nemonein.xyz/2020/02/3397/

본 패치의 저작권은 김호동에게 있으며 공공재가 아닙니다.
이 코드는 김호동이 제작하는 프리웨어/애드웨어/셰어웨어 등에 사용될 수 있음을 미리 알려드립니다.
타인이 작성한 코드를 김호동이 가로챘다는 등의 악성 루머를 퍼뜨리는 일이 재발되어서는 안 될 것입니다.
본인은 libhangul 을 대체할 신규 한글 오토마타 및 신규 한자 사전을 개발하여 사용 중이며 이제 더 이상 아래 코드는 필요하지 않습니다.
하지만 드보락 자판을 사용하시는 nimf 사용자분들께 도움이 되는 코드라 LGPL 라이선스로 공개합니다.

LGPL 라이선스로 제공하며, 아래 nimf 저장소에 적용이 가능하며, 개인적으로 적용하셔도 됩니다.
약속대로 오픈소스 프로젝트를 하지 않고 있으며, 앞으로도 계속 오픈소스 프로젝트를 하지 않을 것임을 약속드립니다.
nimf 애용에 감사드립니다.

https://gitlab.com/nimf-i18n/nimf
https://github.com/hamonikr/nimf

PS. 아래 패치 이름을 nimf-2020.04.16.patch 라고 합시다. 과거에 하모니카 게시판에 공개한 패치 파일도 첨부했습니다. 그외 발견한 버그로는, 1. qt4 의존성 문제가 있긴한데 qt4 는 그냥 삭제하시면 될 듯합니다. nimf qt4 모듈을 삭제한 상태에서 qt4 어플을 실행시키면 아마 nimf-xim 이 작동할거고, 입력 문제도 발생하지 않을 것 같습니다. 다만, nimf-qt4 를 삭제해도 입력이 가능한지 실제 확인이 필요합니다. 2. g_get_user_*_dir() 함수를 사용하면서 발생하는 문제도 있고, 이 문제가 해결되면 FreeBSD 도 완벽 지원됩니다. 3. g_signal_connect() 사용하여 언어엔진 로딩/언로딩할 때 nimf 가 죽는 문제, (이 문제는 g_signal_connect_data() 함수를 사용하여 해결 가능) 4. 메모리 누수 2건. 5. g_settings_new() 에서 에러나는 문제.. 제가 확인한 이슈가 여러건 있습니다.

이미 저는 다 고쳤고 기능도 추가하여 리눅스 및 FreeBSD 에서도 사용 중인데, 저작권도 존중받지 못하는 현실에서 소스코드를 공개해드릴 수 있는 방법이 마땅치 않습니다. 자체 개발한 또 다른 사유/독점 입력기와 소스코드가 겹치지 않는 부분에 대해 제공하는 방법이 있을지를 모색해보고, 웹 사이트를 제작하여 패치 파일을 공개하는 방법을 모색해보겠습니다. 열심히 돈 벌고 열심히 모아서 악성 행위에 법적 대응할 수 있는 힘을 키우겠습니다.
nimf 애용에 감사드립니다.

diff --git a/modules/engines/nimf-libhangul/nimf-libhangul.c b/modules/engines/nimf-libhangul/nimf-libhangul.c index 21d9f7d..f4af5fe 100644 --- a/modules/engines/nimf-libhangul/nimf-libhangul.c +++ b/modules/engines/nimf-libhangul/nimf-libhangul.c @@ -612,6 +612,35 @@ nimf_libhangul_filter_event (NimfEngine *engine, gchar *new_preedit = g_ucs4_to_utf8 (ucs_preedit, -1, NULL, NULL, NULL); nimf_libhangul_update_preedit (engine, target, new_preedit); + if (!retval) + { + switch (keyval) + { + case '_': + case '-': + case '+': + case '=': + case '{': + case '[': + case '}': + case ']': + case ':': + case ';': + case '\"': + case '\'': + case '<': + case ',': + case '>': + case '.': + case '?': + case '/': + nimf_libhangul_emit_commit (engine, target, (char *) &keyval); + retval = TRUE; + default: + break; + } + } + return retval; }

PS 본문 업데이트: nimf-2019.08.14 버전에 nimf-2020.04.28.patch 패치를 적용하시면 되겠습니다.
세벌님이 말씀하신 한글 오타 자동 교정도 해결했습니다.

File attachments: 
첨부파일 크기
파일 nimf-2020.04.28.patch96.84 KB
cogniti3의 이미지

입력기 프로젝트를 2015년부터 2019년 8월까지 대략 4년 반 정도 한 같은데
사람들과 마찰이 생겼던 부분은 다음과 같습니다.

1. 한글 입력기인데 왜 README 설명이 영어?
2. 타 어플 버그 고쳐달라는 것
3. 각종 배포판 패키지 제작 관련 문의
4. 각종 기능 추가
5. 개발(기능 추가)/기술지원/유지보수 유료화 선언
6. 이슈 게시판 폐쇄

그래서 앞으로 어떻게 할 거냐면, 현재처럼 오픈소스 프로젝트를 하지 않습니다.

업데이트 함: nimf-2020.04.28.patch 파일을 위 본문에 첨부했습니다.
홈페이지에 제공할 계획이었으나, 먹고살기 힘들어서 리눅스가 설치된 컴퓨터를 팔아버리려고요.
리눅스를 사용하지 않는 관계로 지속적인 업데이트는 매우 어려울 것 같습니다.

불편 사항에 대해 가끔 패치를 해서 그걸 https://www.nimfsoft.com 에 게시할 생각입니다. 웹 사이트는 영원하지 않습니다. 여러 사정으로 언젠가 중단됩니다. 미리 말씀드립니다. nimf 사용하시다가 뭔가가 잘 안 된다 싶으면 https://www.nimfsoft.com 사이트 방문하셔서 신규 패치 파일 올라와 있는거 있나 확인해보시고 만약 있다면 다운 받아서 패치를 해서 사용하시면 되겠습니다.

그리고, nimf 에서 기여받은 코드를 모두 제거하고 tian 이라는 이름의 입력기로 계속 개발 중이니 nimf 를 패치해서 컴파일하여 사용하기 곤란한 분은 tian 을 설치하여 사용하셔도 됩니다. 만약 제가 tian 소스코드를 제공한다면 오픈소스 라이선스가 아닌 라이선스로 제공할 것입니다.

그리고, tian 은 자유/오픈소스 소프트웨어가 아니고 기여받은 코드가 없기 때문에

1. 여러 사정으로 인해 라이선스가 변경될 수 있고,
2. 여러 사정으로 인해 개발/기술지원/유지보수가 지연/불가/가능할 수 있고,
3. 커뮤니티의 간섭을 받지 않기 위해 코드 기여를 받지 않습니다.
4. 제가 손해가 발생하지 않는 시간 또는 제가 원하는 시간에 개발/기술지원/유지보수를 하여 시간/금전 손실을 최소화합니다.
5. 생활비(의식주 비용)/병원비/컴퓨터/법률 상담/특허 상담 등에, 돈이 필요하면 소프트웨어/기능추가/기술지원/유지보수/적합성 테스트 등을 유료화할 수 있습니다. 옷이나 하드웨어를 판매할 수도 있습니다.

저는 입력기 개발자이기도 하지만, 사용자이기도 합니다. 사용자끼리 욕하고 싸우면 무슨 소용이 있겠습니까? 기업들은 오픈소스라는 형식을 활용하여 기업들끼리 열심히 품앗이하여 유료 클라우드 서비스를 구축하고 있습니다. 기업들은 유닉스/리눅스 데스크탑 시장을 버린 것 같습니다.

저는 제가 필요한 소프트웨어를 본인이 직접 개발하여 제 홈페이지에 게시할 것입니다. 오픈소스 소프트웨어가 아니며 기여를 받지 않습니다. 오픈소스 정신이 결여되었네, 남의 작업물을 가로챘네, 커밋을 조작하네 등의 악성 루머를 퍼뜨리는 일은 없어야할 것입니다.
여러분들께서는 선택할 수 있는 유/무료 소프트웨어가 하나 더 늘어나는 것이므로 손해볼 것이 없습니다.
그리고 저는 이제 리눅스를 사용하지 않습니다. 원래가 솔라리스 사용자였는데, 어찌어찌하다가 리눅스를 25년 정도 써온 것 같습니다. 그동안 리눅스를 사용하면서 몸에 맞지 않는 옷이라는 느낌을 많이 받았었습니다. 예전에 리눅스 커뮤니티에서는 '리눅스 정신'을 얘기하는 사람들이 많았습니다. 그런 사람들 보면 종교집단 보는거 같아서 굉장히 거북했습니다. 자유/오픈소스라고 해서 다 똑같은 것이 아닙니다. 리눅스는 GNU GPL 이 기반이 되는건데, GNU GPL 을 좋아하는 사람들은 영리 추구, 수익 사업(사례; 우분투 원)을 부정적으로 바라보는 경향이 있습니다. 반면 저는 GNU GPL 을 싫어하는 사람입니다. GPL 보다 BSD 계열을 좋아하는 사람이며 영리 추구, 수익 사업을 찬성하는 입장입니다.

nimf 가 현재 리눅스용 입력기이고 라이선스가 GNU LGPL 이지만 막상 저는 그러한 철학을 반대하는 입장이었습니다. 원래는 nimf 를 BSD 나 퍼블릭 도메인으로 하고 싶었지만 리눅스용 핵심 라이브러리들이 LGPL 이기 때문에 시한폭탄 같은 라이선스 문제가 발생되는 걸 원치 않아서 nimf 의 라이선스를 LGPL 로 한 것입니다.

지금은 리눅스를 벗어버리고 BSD 계열의 FreeBSD 를 사용하고 있습니다. 솔라리스를 사용하고 싶었지만, 솔라리스를 다운받기 위해서는 회원 가입과 많은 개인 정보를 요구하기 때문에 FreeBSD 를 앞으로 계속 사용하기로 했습니다.

그동안 리눅스 커뮤니티와 많은 마찰이 있었는데, 상호 마음의 앙금이 가라앉기를 바라겠습니다.
자유소프트웨어 운동을 존중합니다.
그리고 제가 여건이 되면 BSD 계열이나 퍼블릭 도메인으로 가끔 소스코드를 공개하겠습니다.
오픈소스 프로젝트를 하겠다는 것이 아닙니다.
kldp 가 격전지였던 만큼 이곳에 글을 남깁니다.
감사합니다.

Yi Soo An@Google의 이미지

뭘 하시던지 그건 cogniti님 저작물이니까 맘대루 하시고 이제 nimf 얘기 그만좀 합시다.. 딴 사람은 가만히 있는데 님 혼자 글쓰고 부스럼 만들고 있는거 같아요.

---------------
Happy Hacking!

cogniti3의 이미지

전에 nimf 얘기만 나오면 이러쿵저러쿵 했으니 제가 먼저 얘기 꺼내서 사람들 반응이 어떤지 확인해보려구요~~~
kldp 가 격전지여서 확인해보는거에요. 별뜻 없어요

세벌의 이미지

한 때 저도 cogniti3 님과 사이가 안 좋았던 때가 있어서 글 쓰기가 조심스럽습니다만 궁금한 게 있어서요.

저는 ibus를 쓰는데 그게 libhangul과 엮이어 있는 거 같아요.
우분투에서 한글 입력 할 때 오타 자동 교정 되더군요.
예를 들어 강 치려다 실수로 ᄀᅠᆼㅏ 순서로 쳐도 자동으로 강으로 되는...
그러다가 데비안 쓰게 되었는데 거기서는 한글 오타 자동 교정 안 되더군요.
전에는 자동 교정 기능 있었는데 그 기능에 부작용이 있어서 없앤 건 같더군요.
부작용이 문제라면 사용자가 자동교정기능을 끄거나 켤 수 있도록 옵션을 만들면 좋을 텐데, 그런 옵션은 안 보이네요.
자동교정기능 동작하려면 libhangul을 건드려야 되는지 ibus-hangul 건드려야 되는지 모르겠고요...

질문. NIMF에서는 한글 오타 자동 교정 되나요?

cogniti3의 이미지

우선, libhangul 개발자님과 기여자분들께 수년간의 노고에 감사하다는 말씀을 드립니다.
libhangul 라이브러리 감사하게 잘 쓰고 있습니다.

nimf 도 libhangul 을 사용하기 때문에, 최신 libhangul 을 사용할 경우, 한글 자동 교정이 작동하지 않습니다.

업데이트된 libhangul 의 변경된 부분을 찾아서 libhangul의 구버전/신버전에서도 작동되게 nimf-libhangul 의 소스코드를 고쳐주는게 제일 좋은 방법입니다.
또 다른 방법으로는, 구형 libhangul 을 nimf-libhangul 에 스태틱 링킹하는 방법이 있습니다. libhangul 이 LGPL 로 배포되기 때문에, libhangul 수정없이 스태틱 링킹해도 라이선스상의 문제는 발생하지 않을 것 같습니다.

cogniti3의 이미지

본문 내용 업데이트했습니다. nimf-2020.08.14 버전에
nimf-2020.04.28.patch 를 적용하면 해결됩니다.
세벌님이 말씀하신 문제는..
nimf_libhangul_update_transition_cb (hangul); 함수를

  hangul_ic_set_option (hangul->context, HANGUL_IC_OPTION_AUTO_REORDER,
                        hangul->auto_reordering);

로 교체하고 그로인해 불필요해진 on_libhangul_transition() 함수를 삭제하는 10줄 내외의 매우 단순한 작업이었습니다.
사람들에게 패치 어떻게 적용시켜서 컴파일하는지 물어보셔서 패키지 제작 및 설치하시기 바랍니다.
세벌의 이미지

패치 적용 어떻게 하는지는 다른 데 물어보겠습니다.
아니, 물어보기 전에 제가 인터넷 검색 먼저 해 보고요...
libhangul 패치 적용 테스트 해보고 잘 되면 libhangul 메인 페이지에 pull request 보내야겠습니다.
고맙습니다.

cogniti3의 이미지

그거는 libhangul 패치는 아니고요..
nimf 만들때가 2015년이라 그후,
libhangul에 신규 함수가 추가된 걸 몰랐습니다.
시간 좀 지나면 패치해서 deb 파일 만들어주시는 분 계시겠죠. 수고하세용

cogniti3의 이미지

이번 nimf-2020.04.28.patch 는 dvorak 사용할 때, 심각한 입력 오류가 발생함에 따라 제공하게 되었고, 엔진 on/off 할 때 간헐적으로 죽는 문제랑 하는 김에 세벌님께서 말씀하신 오류도 해결했습니다.
자작 홈페이지에 제공할 계획이었으나, 경제적 문제 및 여러 개인 사정으로 며칠 만에 생각이 바뀌어 그러지 않기로 했습니다. 아마 이번 패치가 마지막 패치일 것입니다. 여러 사정으로 다음 번에 심각한 오류가 발생해도 제가 어떻게 해드리지 못할 거 같네요.

nimf-2020.04.28.patch 는
https://gitlab.com/nimf-i18n/nimf/-/tree/dec1a11c3034677a825b0dff319a05a8d019ae08
2019.08.14 버전에 적용시켜야 합니다.
하모니카에서 관리하는 거에 적용하면 적용이 아마 안 될 거에요.
그거는 제가 일부러 안 되게 해놓고 그런게 아니라... 하모니카쪽 nimf 저장소에 개발과 무관한 커밋들이 많이 들어가서 충돌 일어날 겁니다.
그럼 수고하세요~~