윈도우 오픈 소스 한글 입력기를 만들었습니다.

나빌레라의 이미지

나빌입력기는 윈도우에서 동작하는 오픈 소스 한글 입력기 입니다. libhangul 자체를 윈도우에서 빌드하여 직접 사용하는 한글 입력기입니다. 그래서 한글 오토마타는 리눅스의 ibus, fcitx와 동일합니다. 모두 libhangul을 사용하니까요.

기존에 오픈 소스 윈도우 한글 입력기는 제가 조사한 범위에서는 새나루 입력기(https://kldp.net/saenaru/)가 유일했습니다. 새나루 입력기 역시 KLDP에서 활동하시던 개발자님들께서 만든 작품이지요. 새나루 입력기에 이어서 나빌 입력기는 사실상 두번째로 공개된 윈도우용 오픈 소스 한글 입력기입니다.

윈도우용 오픈 소스 한글 입력기 나빌 입력기


어쩌다가 시작하게 되었나...


지난 크리스마스 휴가 때 저는 기존 세벌식 자판을 연습하다가 도저히 적응하지 못하고 그냥 저 혼자 사용할 요량으로 3-18Na 자판(https://kldp.org/node/160815)을 만들었습니다. 그리고 만든 자판을 실제로 사용하기 위해서 리눅스용 입력기 3종 (scim, ibus, fcitx)를 수정해서 3-18Na 자판을 실사용 가능하도록 만들었습니다. 저는 이것만으로 충분했습니다. 왜냐하면 저는 한글 입력을 리눅스에서만 하거든요. 윈도우에서는 사실 한글 입력을 할 일이 별로 없었습니다.

다만, 윈도우에서 한글 입력을 할 일이 별로 없을 뿐이지 아예 없는 것은 아니니깐요. 어쩌다 한 번씩 윈도우에서 한글 입력을 하는데 이 때도 3-18Na 자판으로 입력이 하고 싶다는 생각이 갑자기 들었습니다. 무엇보다 더 큰 이유는 크리스마스가 지나도 새해까지 아직 휴가가 남아 있었기 때문이지요.. 이 때 그냥 독서나 하면서 휴가를 보냈어야 했습니다.

이 일이 이리 큰 삽질이 될 줄이야.. 그 땐 몰랐습니다.

새나루 입력기나 대충 고쳐서 구현하면 되겠지 했습니다...


저는 애초에 윈도우에서 새로운 입력기를 만들 생각이 아예 없었습니다. 리눅스에서 그랬던 것처럼 기존에 알려진 입력기를 수정해서 3-18Na 자판만 쏙 넣는 것으로 하루나 이틀 정도 작업하여 마무리 하려 했습니다.

그 첫번째 작업으로 윈도우용 한글 입력기가 뭐가 있나 조사해 봤습니다. 의외로 윈도우에서 한글 입력기는 종류가 많지 않았습니다. 아마도 윈도우의 기본 한글 입력기로도 불편함이 없이 충분히 쓸 수 있기 때문인것 같습니다. 가장 유명한 것은 당연히 윈도우 기본 한글 입력기입니다. 그리고 쉽게 찾을 수 있는 서드파티 한글 입력기는 새나루 입력기와 날개셋 입력기가 있었습니다. 이게 다 였습니다. 기본 입력기를 제외하면 딱 두 개 있더라구요.

새나루 입력기와 날개셋 입력기 중에 날개셋 입력기는 기능이 매우 많았습니다. 그런데 오픈 소스가 아니더라구요. 그래서 일찌감치 배제했습니다. 물론 날개셋 입력기의 커스텀 키보드 설정 기능으로도 저의 목적을 이룰 수는 있었으나 그냥 코딩으로 해결하고 싶었어요. 그래서 새나루 입력기의 소스 코드를 수정해서 간단히 목표 달성을 하려 했습니다만 결과적으로 이 선택은 저를 엄청난 삽질의 길로 인도했습니다.

어라.. 빌드가 안되네..


새나루 입력기의 소스 코드를 다운 받았습니다. 이 때만 해도 저는 윈도우의 입력기 시스템에 대해 아는 것이 전무했습니다. 그냥 대충 새나루 입력기 소스 고치면 되겠지 하는 생각으로 들이댄 것이지요. 일단 코드 수정의 시작은 빌드입니다. 빌드를 해야 저의 수정 작업을 테스트할 수 있으니까요.

파일 중에 makefile이 보이길래 일단 다짜고짜 make를 쳐 봤습니다. 당연히(?) 안되더군요. 그제서야 makefile을 텍스트 편집기로 열어서 내용을 읽어 봤습니다. 새나루 입력기의 makefile과 빌드에 관여하는 파일들을 통해서 저는 새나루 입력기를 빌드하려면 윈도우 DDK가 필요하다는 사실을 알았습니다. 문제는 여기부터 였습니다. DDK는 너무 오래된 것이라는 것이지요. 마이크로소프트에서 DDK를 WDK로 바꾼지도 십년이 훨씬 넘게 지났습니다. 이제 DDK는 다운로드 받을 수 조차 없는 이름만 남은 존재였던 것이지요.

그래도 저는 마이크로소프트라면 하위 호환성을 고려해서 WDK를 만들었을 거라 순진하게 생각했습니다. 그냥 새나루 입력기의 소스 코드를 WDK 프로젝트에 파일 단위로 뜯어서 때려 넣고 강제로 빌드해 봤습니다. 역시나 안되더라구요...

뒷목에 서늘한 기운이 스쳐지나갔습니다. 이러면 나가린데... 여기서 안되면 답없는건데... 에라이! 안해. 그냥 윈도우에서는 두벌식 쓰지 뭐.

TSF(Text Service Framework)


그날 밤, 자려고 누워서 그날의 삽질을 머릿속에서 리뷰하고 있었습니다. DDK라니... 새나루 입력기가 좀 오래되긴 했지... 개발 중단된지도 오래 되었고... 그래도 DDK 라니...

그러면서 핸드폰으로 윈도우에서 입력기를 어떤게 만드는지 가볍게 찾아봤습니다. 윈도우는 TSF(Text Service Framework)라는 이름으로 윈도우 XP 시절부터 입력기에 대한 운영체제 수준의 인터페이스를 만들어 놨더군요. TSF 만해도 발표된지 십 년이 넘은 물건이었습니다. 그래서 여전히 침대에 누운채로 TSF를 이용해 구현한 중국어나 일본어 입력기들 중 소스 코드가 공개된 것들이 있는지 찾아 봤습니다. 깃헙에서 몇 개 찾을 수 있었고 마이크로소프트에서 TSF 샘플 입력기 소스 코드도 공개해 놨네요. 오.. 그냥 얘네들 대충 고치면 될 것 같다는 생각이 듭니다. 그냥 생각만 하고 말았어야 했습니다....

여기서 그냥 하지 말았어야 했는데, 단지 궁금해서 조금 더 공부해 봤습니다. 윈도우의 입력기는 TSF 이전에는 IMM이라는 프레임워크가 있었다고 합니다. 그래서 다시 새나루 입력기의 소스 코드를 봤더니 놀랍게도 IMM과 TSF에 관계된 함수 콜이 둘 다 있었습니다. 아마도 처음에 IMM 기반으로 만들고 시간이 지나면서 TSF 관련 코드가 추가된것 같습니다. 키 입출력 관련 코드는 IMM 기반이었고 TSF 기반 코드는 윈도우의 시스템 트레이에 아이콘을 표시하는 코드가 전부였습니다. 이 시점에서부터 저는 새나루의 소스 코드를 참고하지 않았습니다. 왜냐하면 한글 오토마타 관련은 libhangul에 맡길 계획이었으므로 제가 필요한 코드는 입력기의 껍데기를 구성하는 코드이기 때문이었습니다. 그러니까 저는 윈도우의 입력기 껍데기만 만드는데 앞으로 이야기할 삽질을 한 것입니다.

아니.. 이건 인스톨을 어떻게 하는 거야?


가장 먼저 만져본 코드는 마이크로소프트에서 공개한 샘플 입력기 소스 코드였습니다. 마이크로소프트 사이트와 깃헙에서 구할 수 있습니다. 일단 소스 코드를 다운로드하고 바로 빌드해 봤습니다. 역시 마이크로소프트에서 공개한 것이라 그런지 비주얼스튜디오 무료버전에서도 빌드가 한 번에 잘 되었습니다. 결과로 나오는 파일은 dll이네요. 윈도우 입력기가 dll이라는 것을 처음 알았습니다...

이제 이 dll을 어떻게 시스템에 등록해야 입력기를 쓸 수 있는 건지 readme 파일을 읽어 보았습니다. 인스톨쉴드(installshield)를 이용해서 인스톨러를 만들어서 인스톨하라고 하네요. 수동으로 등록하는 방법에 대한 설명은 없었습니다. 문제는 비주얼스튜디오 무료버전은 인스톨쉴드를 쓸 수 없다는 것이었습니다. 이런 어처구니 없는 경우가 다 있나...

시스템에 입력기를 등록하는 방법을 모르니, 코드를 수정해서 빌드해도 테스트를 해 볼 수가 없는 상황인 것입니다. 이쯤에서는 이제 조금씩 오기가 올라오기 시작하더라구요.

중국어 입력기, 일본어 입력기


그러면 깃헙의 중국어나 일본어 입력기들은 인스톨을 어떻게 하는건지 찾아 봤습니다. 보통 소스 코드에 인스톨 방법을 설명하는 텍스트 파일을 같이 배포하니까요. 그것도 없으면 최소한 빌드 스크립트를 해석해서라도 수동으로 설치하는 커맨드나 방법 혹은 순서를 알아낼 수 있으니까요.

이 과정에서 마이크로소프트의 샘플 입력기과 중국어 입력기 두 개, 일본어 입력기 세 개 정도의 소스 코드를 봤습니다. 일단 모두 마이크로소프트의 샘플 코드를 기반으로 해서 만든 것이라는 것을 알 수 있었습니다. 파일 구성이나 클래스 이름, 반복되는 코드의 구성이 같았습니다. 어떤 코드는 아예 똑같았습니다. 그리고 모두 과도하게 복잡하고 파일이 많았으며 코드의 양이 많았습니다. 이게 모두 필요한 코드인가라는 생각이 끊임없이 들었습니다.

나중에 안 사실이지만 중국어 입력기나 일본어 입력기는 한글 입력기에 비해서 복잡할 수 밖에 없는 구조적 특징이 있더라구요. 그들에 비하면 한글 입력기는 더 적은 코드와 더 간단한 코드로 구현이 가능했습니다.

구글


이렇게 지난 삽질을 돌이켜 보고 있으니 초반에는 코딩보다 검색질을 더 많이 했네요. 이런저런 입력기 코드들을 계속 찾고 있었습니다. 그 중에 가장 구현이 단순하고 코드의 양이 적은 것을 찾는 것이 목표였습니다. 그러다가 우연히 구글이 크롬 프로젝트의 부분으로 다국어 입력기를 구현해서 코드를 공개해 놓은 것을 찾았습니다. 물론 코드의 양과 복잡도는 제가 찾아 본것 중 가장 복잡했습니다.

저는 이 구글의 입력기 소스 코드를 보지 않았습니다. 그러나 여기서 아주 중요한 정보를 얻었습니다. 바로 인스톨하는 방법이었지요. 구글 소스 코드의 텍스트 파일 중에 수동으로 인스톨하고 언인스톨하는 방법이 설명되어 있었습니다. 황당하게도 매우 간단했습니다. 대체 마이크로소프트는 이 간단한 커맨드를 왜 알려주지 않고 인스톨쉴드를 사용하는 방법을 적어 놓았을까... 지금도 이유를 모르겠습니다.

COM


한 십 몇년 전? 아니 얼추 이십년 정도 되었나? 서점가에 COM 개발 관련 책이 쏟아져 나오던 때가 있었습니다. Common Object Model의 약자던거 할거에요. 그 때나 지금이나 저는 윈도우용 프로그램 개발에는 딱히 관심이 없어서 용어만 알고 그게 뭔지 전혀 모르고 코드 타이핑하면서 잘먹고 잘 살아오고 있었습니다.

여러 윈도우용 입력기 소스 코드들을 보니 공통적인 파일과 함수 구성이 보였습니다. 동일하게 모든 입력기가 가지고 있는 코드 였지요. 그래서 그 파일과 함수의 이름으로 검색을 해 보았습니다. 그랬더니 이것들이 COM 라이브러리를 작성할 때 구현해야 하는 함수들이라는 겁니다.

그리고 그제서야 TSF가 COM 기반으로 만들어졌다는 글을 위키페디아에서 읽었습니다. 분명 이 삽질을 시작할 무렵에도 동일한 문서를 읽었는데 그 때는 눈에 들어오지 않았던 정보가 이제는 인식이 되는 재미있는 경험을 했습니다.

어쩌다 보니, 윈도우에서 COM의 구성 원리, 작동 원리, 작동 순서, 샘플 코드, 예제 테스트까지 다 하고 말았습니다. 그러고서야 COM을 이해할 수 있었습니다. 이 쯤해서는 내가 왜 이걸 하고 있는 목적 의식조차 흐릿해 지고 있었습니다.

그냥 바닥부터 뜯어서 만들자


COM을 이해하고 났더니 윈도우 입력기의 소스 코드의 실행 흐름에 따라 코드를 읽을 수 있게 되었습니다. 그러면서 기존 중국어, 일본어 입력기와 샘플 입력기(이것도 사실은 중국어 입력기)에서 TSF 관련 정보를 추출해서 용어를 찾을 수 있게 되었습니다. 이들 중에서 내가 필요로 한 것들과 필요로 하지 않는 것들을 구분해야 하기 때문이죠.

처음에는 샘플 입력기의 코드를 조금 고쳐서 이름을 바꾸고 아이콘을 바꾸는 것부터 시작했습니다. 그러나 어느 시점에서부터 코드 복잡도가 올라가더니 제가 생각했을 때 불필요한 요소를 떼어내기가 매우 어려워졌습니다. 샘플 입력기도 태생이 중국어 입력기다 보니 구조적으로 한글 입력에 불필요한 요소가 강결합되어 있었던 거죠.

그래서 개발 방향을 바꿨습니다. 그냥 제가 바닥부터 코딩을 하는 것이죠. 재료는 다 있으니 필요한 코드를 뜯어다가 재조립해서 한글 입력기를 구현할 요량이었습니다.

그래서 처음에는 그냥 새나루 입력기의 소스 코드를 살짝만 수정해서 하려했던 작업이 입력기를 처음부터 새로 만드는 삽질로 변질되어 버리고 말았습니다. 이참에 이름도 나빌 입력기 (Navil IME)로 지었습니다.

UI 드럽게 안되네


TSF 설명에 따르면 간단한 코드로 시스템 트레이의 입력기 아이콘을 클릭해서 메뉴가 나오게 할 수 있습니다. 관련 내용을 구현한 예제 코드도 있고요. 그런데 막상해보면 메뉴가 안나옵니다. 뭔짓을 해도 안나오더라구요. 생각할 수 있는 모든 옵션 조합을 시험해 봤는데도 실패 했습니다.

입력기 자체 UI를 통해서 키보드 레이아웃을 변경하는 UX를 구상했는데 물건너 갔습니다. 그래서 꽤나 리눅스스러운 방법으로 키보드 레이아웃을 설정해야 합니다. 어떤 방법이냐고요? 설정 파일을 텍스트 에디터로 수정하는 거죠 뭐.

컴포지션.. 컴포지션..


리눅스든 윈도우든 우리가 컴퓨터로 한글을 입력하면 지금 문자를 구성하고 있는 글자는 선택 영역으로 자동으로 선택되어 반전되어 보이고 커서는 잠시 사라지면서 한글 한 글자를 감싸는 네모가 깜박거립니다. 이 깜박이는 선택 영역 안에 있는 글자가 조합중인 (compositing) 글자 입니다. 중국어나 일본어의 입력기 UI는 이런식이 아닌지 제가 확보하고 있던 소스 코드들 모두 한글의 컴포지션 커서를 보이게 하는 코드가 없었습니다. 정말 수 많은 삽질 끝에 조합 중인 글자의 커서를 보이게 하는 옵션을 찾았습니다. 해결 방법은 몹시 간단하게도 설정값을 false에서 true로 바꿔 주기만 했더니 제가 의도한 대로 되더라구요.

만약 제가 참고 할 수 있는 윈도우 한글 입력기 소스 코드가 하나라도 있었다면 이 삽질은 안했을거라 생각됩니다. 그리고 그런점에서 나빌 입력기의 공개는 의미가 있다고 생각됩니다.

컴포지션 완료


지금 텍스트 에디터 아무거나 열고 한글을 입력해 보세요. 한글은 한 글자를 종성 혹은 중성까지 입력하고 다음 자모를 입력하기 전까지 글자의 완성 여부를 알 수 없습니다. 다음 글자의 초성을 입력해야 직전 글자의 완료 여부를 알 수 있는 것이지요. libhangul에서는 preedit과 commit이라는 이름으로 작성 중인 글자와 완료된 글자를 알려줍니다. 그래서 글자가 완성되면 입력기는 글자 두 개를 어플리케이션에 보내야 합니다.

이 부분에서 엄청난 삽질을 했습니다. 왜 인지는 모르겠으나 직관적인 방법은 동작을 하지 않더군요. 완성된 글자의 컴포지션이 완료되면서 다음 글자의 초성이 오른쪽에 붙어야 하는데 컴포지션 완료가 되지 않고 없어져 버리거나 아니면 다음 글자의 초성이 표시되지 않는 등 다양한 증상이 보였습니다. 이것 역시 원하는 동작을 만들기 위해서 조합 가능한 거의 모든 동작 조합을 코딩해서 테스트해 봤습니다.

결국 겉으로 보기에 원하는 동작을 구현하긴 했으나 이게 과연 정석인 방법인지 아직도 확신은 없습니다.

어플리케이션마다 다른 동작


입력기를 만들 때 테스트하는 가장 기본적인 어플리케이션은 누가 뭐래도 그냥 메모장입니다. 일단 메모장에서 다 되게 만든 다음 다른 어플리케이션에서 테스트하는 것이지요.

메모장에서는 별 문제 없이 동작하는데 워드패드에서는 TSF 콜백 인터페이스 함수의 호출 순서가 다른 현상이 있더군요. 이런것 하나도 통일되지 않은 시스템이라니..

파이어폭스의 구글 검색 입력창에서는 선택영역이 없어져 버리는 현상도 생겼습니다. 그래서 입력중인 글자가 풀어쓰기 마냥 쭉 늘어져 보이기도 했지요. 예를 들면, "나빌레라" 라고 입력하는데 보이는 것은 "나비빌레라" 이런식으로 나오는 겁니다.

이렇게 현 시점에서 확인 가능한 문제들 중 어플리케이션마다 다르게 동작하는 것들은 일부는 해결을 했고 일부는 해결을 못했습니다. 일단은 제가 쓰기 별 문제 없으면 현재는 고칠 생각도 의지도 없으니까요.

libhangul


나빌 입력기는 libhangul을 그대로 사용합니다. libhangul은 정말 훌륭한 프로그램입니다. 공식적으로 지원하지 않음에도 별다른 큰 노력없이 (물론 아주 조금 포팅 작업을 하긴 했습니다.) 윈도우에서 빌드가 되었습니다. 그래서 빌드되어 만들어진 lib 파일을 나빌 입력기에 링크해서 사용했습니다.

덕분에 저는 큰 노력 없이 나빌 입력기에서 3-18Na 자판을 비롯해 두벌식, 세벌식 3-90, 3-91, 옛한글 자판등 libhangul에서 지원하는 자판을 모두 지원 할 수 있었습니다.

더불어 지난번에 리눅스 입력기 작업을 할 때 libhangul의 소스 코드 버전이 깃허브 버전과 타르볼 버전이 달라 깃허브 버전 코드를 수정을 못했었는데 이번 기회에 libhangul의 깃허브 기준 최신 소스 코드 기반으로 3-18Na 자판을 추가하는 작업을 완료했습니다. 벼르고 있었는데 겸사 겸사 해 내니 기분이 좋군요.

수정한 libhangul의 코드는

https://github.com/navilera/libhangul

에서 볼 수 있습니다. 관심 있는 분들은 한 번 들어가서 보세요.

새나루 입력기의 유산


나빌 입력기는 새나루 입력기로부터는 코드 한 줄도 받아 오지 않은 프로그램입니다. 저는 그게 뭔가 아쉽더라구요. 뭔가 DNA를 이어가고 싶었는데 말이죠. 그래서 코드 대신 아이콘이라도 써야 겠다 싶어서 나빌 입력기의 메인 아이콘은 새나루 입력기의 아이콘을 그대로 사용했습니다.

왜 이런 긴 글을 써서 올리는가?


요즘같은 시절에 누가 이런 긴 글을 읽는다고 이리 긴 글을 써서 올리는가 하면, 제가 나빌 입력기를 사용할만한 수준으로 만들긴 했는데 테스팅이 턱없이 부족했습니다. 그래서 이왕 프로그램을 공개하는거 삽질기도 같이 공개할 겸, 3-18Na 자판 연습도 할겸, 또한 나빌 입력기 테스트도 할 겸해서 긴 글을 쓰고 있는 것입니다. 아직까지는 별 문제 없네요.

없는 기능


libhangul에서 지원하나 나빌 입력기에서는 지원하지 않는 기능이 있습니다. 바로 한자 입력 기능인데요. 일단 한자 입력을 만들려면 candidate UI라고 해서 꽤나 골치 아파 보이는 삽질을 해야만 합니다. 저는 정작 한자 입력을 전혀 쓰지 않는데도요.

제가 쓰지 않는 기능이니 일단 저는 만들지 않았습니다. 혹시라도 누군가 한자 입력 기능이 꼭 필요하신 분 있으면 만들어 주세요. 오픈 소스 좋다는 것이 이런것 아니겠습니까.

오픈소스 한글 입력기의 베이스 코드가 되길 바라며


저는 나빌 입력기가 널리 쓰여 세상을 이롭게 하거나(...) 엄청 흥한 오픈 소스 프로젝트가 되는 것을 기대하지 않습니다. 제가 바라는 것은 어쩌면 나중에 또 누군가가 윈도우에서 TSF로 한글 입력기를 만들려 도전할 때, 나빌 입력기의 소스 코드가 그들에게 훌륭한 기본 재료가 되었으면 하는 것입니다.

그래서 나빌 입력기는 꼭 필요로 하는 TSF 구성 요소만 사용했고 되도록 코드를 간단하게 작성하려 했으며, 테스트 결과 동작에 영향을 미치지 않는 것으로 판단되는 코드는 모두 삭제하여 정말 최소한의 코드로만 만들었습니다. 그래야 코드를 읽는 사람도 금방 이해 할 수 있으니까요. 제가 했던 삽질을 다른 사람은 하지 않았으면 하는 것이 저의 바람입니다.

나빌 입력기의 소스 코드는

https://github.com/navilera/NavilIME

에 공개했습니다. 혹시라도 관심 있는 분은 사용해 보시고 버그 리포트나 풀 리퀘스트 보내주세요. 환영합니다.

File attachments: 
첨부파일 크기
Image icon NavilImeSysTray.png8.06 KB

댓글

hsnks100의 이미지

정말 멋지십니다. 존경합니다.

----------------------------------------------------

나빌레라의 이미지

감사합니다. :)
존경받을 만큼 대단한 사람은 아닙니다.ㅎㅎㅎ

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

세벌의 이미지

저는 두벌식, 세벌식 390을 거쳐 지금은 최종 씁니다.
제 필명은 세벌이지만 여러 가지 세벌식 종류에 언제나 놀라고 있죠.
다른 자판 쓸 엄두 못내고 있는...

나발레라 님 대단하십니다. 남들을 몇 년 걸려도 못할 작업을 도대체 얼마만에 하신 거죠?

엠에스윈도에서 한글입력기 중 아주 유명한 날개셋(관련 홈페이지 http://moogi.new21.org/ )은 오픈소스가 아니라는 게 참 아쉽네요.

나빌레라의 이미지

저도 세벌식 연습해 볼까 하고 마음 먹었을 때 알게 된 수 많은 세벌식 자판 종류에 놀랐었죠.
그리고 제가 거기에 또 세벌식 자판을 하나 더 만들어서 추가했고요...ㅎㅎ

제가 한 작업의 결과물들이 나중에 비슷한 일을 하려고 시도하는 사람들에게 도움이 되었으면 좋겠습니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

slee0303의 이미지

감사합니다.
엠에스 워드에서는 안 듣네요.
개인적으로 세벌식을 쓰는 이유는 모아치기 기능 때문인데. 혹시 이걸 구현하실 생각은 없으신가요?

세벌의 이미지

저는 세벌식 쓰긴 하는데...
모아치기가 뭔지 몰라서요. 알려주시면 감사!

slee0303의 이미지

자음과 모음을 동시에 쳐도(정확하게는 모음을 먼저 치고 자음을 쳐도) 제대로 입력되는 방식이죠.
예를 들어, 'ㅏㅅ' 이렇게 쳐도 '사'로 입력됩니다.

세벌의 이미지

아. 그 기능이요? 리눅스에서는 그렇게 되던데, 엠에스윈도(기본 한글입력기)에서는 안 되더군요. 다른 입력기는 안 써봐서...

나빌레라의 이미지

버그는 깃헙에 이슈로 올려 주세요.

모아치기는 libhangul에서 지원하므로 나빌 입력기도 지원할 겁니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Fe.head의 이미지

우와 감사합니다.
드디어 새나루를 이은 오픈소스 입력기가 탄생했군요.

고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"

김필록의 이미지

IME 개발 중인데 참고하겠습니다. 감사합니다.

익명 사용자의 이미지

안녕하세요.

다음카페 '천부인과 천부경의 비밀' 운영자입니다.
이 카페에서 고대 한글의 뿌리와 향가 등을 연구하여 우리 조상들의 얼과 역사를 널리 알리는 일을 하고 있습니다.
카페 성격상 옛글을 입력해야 하는 일이 많은데 옛글을 입력할 방법이 마땅치 않아 여기저기 검색하다가 님의 글을 발견하고 읽어보니 저한테 도움이 될 수 있을거라는 희망을 갖게하는군요.

님의 입력기로 옛한글을 입력할수가 있을까요?

나빌레라의 이미지

libhangul은 두벌식 옛한글과 세벌식 옛한글을 지원합니다.
나빌 입력기를 설치하고,
Program files\NavilIME 와 Program files (x86)\NavilIME 폴더에 있는
Keyboard.dat 파일 내용을

2y (두벌식 옛 한글) 혹은 3y (세벌식 옛 한글)로 바꾸고 사용해 보세요.
아마 될겁니다. 저도 테스트 해보지 않아서 확언은 못드리겠습니다.

해 보시고 결과를 제게도 피드백해 주시면 기능 개선에 많은 도움이 될것 같습니다. 피드백은 깃 허브 이슈 기능을 이용해 주세요.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

한마음의 이미지

사용해보고 결과를 알려드리겠습니다.
다만, 제가 환갑이 넘어 환경설정에 어두워서 잘 할수 있을까 걱정됩니다.
해보다가 잘 안되면 다시 여쭙겠습니다.
피드백은 깃 허브 이슈 기능을 이용해 달라고 하셨는데 솔직히 그것이 무엇을 말하는지 잘 모르겠습니다.
일단, 이용해본 뒤에 피드백 하기로 하지요.

Yi Soo An@Google의 이미지

혹시 입력기 설계할 때 보셨던 문서있으신가요? 입력기에 대한 아키텍처도 몰라서 아예 스크래치에서 만드는 그런 문서좀 보고 싶은데 검색해봐도 잘 나오지는 않는것 같네요..

------- [ 서명 ] -------
Love GNOME

나빌레라의 이미지

본문에 썻듯,
TSF로 검색하면 나오는 자료들과
깃허브에서 TSF IME 등으로 검색해 나온 다른 사람들이 만든 코드 분석해서 만들었습니다.

검색에 필요한 키워드는 본문에 다 있습니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

Yi Soo An@Google의 이미지

감사합니다.

------- [ 서명 ] -------
Love GNOME

Hodong Kim@Google의 이미지

입력기 구조는 단순합니다.

우리가 키보드로 입력하면 키값이 응용 프로그램으로 전달됩니다.
아스키 코드는 C 표준 라이브러리 및 응용 어플(프로그램)에서 특별한 노력없이 처리가 됩니다.
이 정도는 다들 아실거고요.

응용 어플 또는 응용 어플이 사용하고 있는 GUI 또는 Toolkit 라이브러리 등에 입력 관련 api 가 있습니다. 그 api 는 말 그대로 interface 입니다. 구현이 되어 있지 않습니다.

GTK 의 예를 들면 이러한 api 가 있습니다.

https://developer.gnome.org/gtk3/stable/GtkIMContext.html

그 api 를 통하여 키값을 입력기로 전달합니다.
즉, 그 api 를 구현하면 입력기가 되는 겁니다.

리눅스에서 제대로 돌아가려면 (IM 은 input method 의 약어입니다.)
GTK, Qt, XIM, Wayland IM API 를 구현해야 합니다.

키값을 위의 api 로 받으면 그걸 libhangul 로 전달하고 libhangul 은 그걸 조합하여 한글을 입력기에 전달합니다. 입력기는 그걸 응용 어플로 전달합니다. 위에 말씀드린 IM API 를 통해서 말이죠.
다국어 입력이 필요하다면,

언어 전환키를 ctrl + alt + r 누르면 그 때부터 계속적으로 중국어 라이브러리로 키값을 전달하면 되고,
언어 전환키를 Hangul 누르면 그 때부터 계속적으로 libhangul 라이브러리로 키값을 전달하면 됩니다.
그렇게 하면 다국어 입력기가 되는 것입니다.

그 다음 필요한 것으로는 현재 언어가 무엇인지를 나타내주는 표시기를 만들어주면 되겠죠.
참 쉽죠~잉?

입력

응용 어플 --> gtk, qt, xim, wayland ---> 입력기(엔진 셀렉터) ---> 중국어 엔진, 일본어 엔진, 한국어 엔진

출력

응용 어플 <--- gtk, qt, xim, wayland <--- 입력기(호출자 또는 클라이언트 셀렉터) <--- 중국어 엔진, 일본어 엔진, 한국어 엔진

현재 사용하는 언어 표시기

입력기 -------> 표시기

언어 변경

입력기(엔진 셀렉터) <------- 표시기

XIM, GTK IM 예제 스켈레톤 파일은 500줄 정도 밖에 안 되요.
아마 500줄도 안 될 것 같은데,, 100 라인에서 300 라인 정도.

Yi Soo An@Google의 이미지

감사합니다. 덕분에 어느 부분에서 시작하고 찾아봐야할지 대강 알게되었습니다.

------- [ 서명 ] -------
Love GNOME

나빌레라의 이미지

윈도우는 비슷하면서 조금 다른 것 같습니다.
저도 나빌 입력기를 만들어보기 전까지는 아는 것이 전혀 없었기 때문에 확실치는 않습니다.
윈도우에서는

어플 -> TSF 인터페이스 -> TSF가 COM으로 입력기 연결 -> 오토마타 엔진

이런식인듯 합니다.

그래서 본문에 COM 어쩌구 저쩌구 적어 놓은 것입니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

한마음의 이미지

나빌레라님

다음카페 ‘천부인과 천부경의 비밀” 운영자입니다.
현재까지 저의 나빌 입력기 사용 진행 현황을 올립니다.

1. 제가 저의 컴퓨터에 환경설정을 제대로 했는지 모르겠습니다.
일단 C:\Program Files\NavilIME 에 있는 Keyboard.dat 파일에 3y를 정의하였습니다. (파일을 변경하려니 액세스 권한이 없다고 나와서 고치느라 애를 먹었는데 일단 3y까지는 성공한(?) 것 같습니다. 하지만 C:\Program Files (x86)\NavilIME 에서는 변경이 안되네요. 이것도 변경해야 하는건가요?

2. 나빌입력기를 이용하여 입력하니 종성이 조립이 안됩니다. 어찌해야 하는건지요?
나빌입력기 예) 이거ㅅ으ㄴ ㄴ나비ㄹ이ㅂ려끼로 ㅇ이ㅂ려ㄱ하ㄴ ㅁ무ㄴ자ㅇ이ㅂ니다.
MS 입력기 예) 이것은 MS입력기로 입력한 문장입니다.

3. 나빌입력기 자판에 아래아 점 모음이 보이지 않네요.
우리의 옛 한글이나 현재의 제주도 방언에는 아래아 점을 많이 사용하고 있습니다.
이것을 입력하는 방법은 없는건지요?
또한, 아래아 점 뿐만이 아니라 여린히읗, 반시옷, 꼭지이응과, 여린비읍, 여린피읖, 등의 복자음을 입력해야 하는 경우도 있는데 이는 불가한지요? (이 음소들은 우리의 옛글 뿐만 아니라 외국어를 표기할 때에도 유용하게 쓰일 수 있습니다. 한글의 기본 원리인 초성 중성 종성 3벌 조립의 장점을 그대로 살려서 복자음 초성과 복자음 종성도 마음대로 입력한다면 그야말로 환상적이며 한글 국제화의 핵심 무기가 될 것입니다.)

혹시 나빌레라 님의 이메일을 알려 주실 수 있나요? 가능하다면 아래 저의 이메일에 님의 메일주소를 알려주시면 좀 더 자세한 내용을 여쭤보고 싶습니다.

나빌레라의 이미지

1. C:\Program Files (x86)\NavilIME 에서 변경을 안하면 32비트 프로그램은 기본값 (3-18Na) 자판을 사용합니다. 변경하셔야 합니다.

2. 자판을 3y로 변경 하셨으면 세벌식 옛한글 자판으로 타이핑 하셔야 합니다.

3. 3y 자판에서 아래아가 어디 있는지 찾아서 눌러보시기 바랍니다.

4. 이메일로 개인적 요청은 받지 않습니다. 깃허브 이슈를 이용해 주시기 바랍니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

협형의 이미지

나빌레나님 이자판에 관심이 많고 사용해보고 싶은 윈도우7 x64 사용자입니다.
NavilIme-2.1.0.exe 파일이 저의 윈도우시스템에서 설치가 되지않습니다.

318Na_HangulKeyboard-master
libhangul-master
NavilIME-master

위의 3가지를 다 다운받아봤고
실행은 NavilIme-2.1.0.exe 이파일로 했습니다.
오류 메시지가
"모듈 NavilIME.dll 을 로드하지못했습니다.
바이너리가 지정한장소에 없거나 종속 .dll 파일에 문제가 있는지 확인하세요.
지정한 모듈을 찾을수가 없습니다."
이렇게 나오네요.

도와주세요.

댓글 첨부 파일: 
첨부파일 크기
Image icon 1.png31.48 KB
나빌레라의 이미지

제가 사용한 특정 API가 윈8부터 되는거라 그렇습니다.
저는 현재 윈7을 지원할 생각이 없습니다. MS에서도 조만간 윈7 지원을 중단한다고 하니,
윈 10 사용을 추천드립니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

협형의 이미지


회사 사무실 컴터에서 자주 타자연습을 하기에...
우선적으로 여기에 설치를 할려고 했던건데 제가 잘못한게 아니었네요. ㅎㅎ
빠른답변감사합니다. 집에가서 제대로 설치해서 사용해볼께요. 꾸벅~~

구원자님 의 이미지

https://answers.microsoft.com/ko-kr/msoffice/forum/all/%EC%9B%90%EB%85%B8%ED%8A%B8-%ED%95%9C%EA%B8%80/0eb8708b-d200-4dd8-9410-2de631948299?auth=1

개발자님, 혹시 원노트라는 어플을 아시나요? 마이크로소프트에서 개발한 메모 앱인데 한국에도 수많은 사용자가 있습니다. 하지만 원노트에는 MS 한글 IME 키보드에서 한글이 씹히는 치명적인 문제가 있었고 이는 2년이 넘게 지속되었음에도 불구하고 MS 측에선 여태까지 한 번도 이 문제를 고치려는 노력조차 한 적이 없었습니다.

그 결과 한국어 이용자들의 원성은 높아져만 가는 상황이었구요.

하지만 제가 나빌 입력기를 쓰자 어떻게 되었는지 아십니까? 더 이상 원노트에서 한글이 씹히지 않습니다.

개발자님이 구하셨습니다. MS가 외면한 한국의 모든 원노트 사용자들을....

MS 갑질에 통탄할 노릇이었는데 이렇게 뜻하지 않는 곳에서 구원을 받네요. 감사합니다.

키보드는 링크하여 해당 포럼에 글을 올릴 예정입니다.

개발자님께 의 이미지

처음 나빌 깔아서 써보고 너무 좋아서 마이크로소프트 커뮤니티에 퍼트리고 왔습니다. 그런데 이상하게도 정상적인 텍스트 입력란에 한글을 입력할 때 자꾸 받침이 모두 탈락되네요....

왜 그런걸까요? 저만 있는 문제인가요? 현 나빌의 버전은 2.1.0 입니다.

나빌레라의 이미지

자판을 두벌식으로 바꾸고 사용하세요.
나빌 입력기를 설치하고 기본값으로 그대로 사용하신다면, 기본 자판은 3-18Na 자판입니다.
설정 프로그램으로 자판을 변경하실 수 있습니다.

https://github.com/navilera/NavilIME/blob/master/Doc/ReleaseNotes_2.1/README.md

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

안됩니다 ㅠㅠ 의 이미지

분명 두벌식으로 설정했고 ok 누르고 컴퓨터 재시작까지 했는데....
증상이:
- 한/영 키로 바로 한글로 바뀌지 않음. 메모장 켜서 거기서 바꿔야 한영전환 됨.
- 한글로 바꿔도 입력시 계속 받침이 붙어 '일런식을로 낭옵닏다.'

나빌레라의 이미지

버그네요. 두벌식 사용자가 나빌 입력기를 쓸 일이 없어서 몰랐나 봅니다.

https://github.com/navilera/NavilIME/issues

위 깃헙 이슈에 등록해 주세요.

KLDP에 댓글로 써 놓으면 제가 처리를 안 할 수도 있습니다. 그러나 깃헙에 이슈로 등록하면 언젠가는 처리합니다.

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

등록완료의 이미지

이슈 open 해놨습니다. 빨리 릴리즈되기를 고대해봅니다. Notification도 켜놨습니다 ㅋㅋㅋ

나빌레라의 이미지

올해 안에는 릴리즈를 작게라도 한 번 더 할 생각입니다.

기다리시는 동안 3-18Na 자판 써 보세요. 3-18Na 자판은 나빌 입력기에서 매우 잘 동작합니다. 두벌식에서 적응하는데 5분도 안 걸립니다. ( https://github.com/navilera/318Na_HangulKeyboard )

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

박지인의 이미지

안녕하세요, 마이크로소프트에서 입력기를 개발하는 팀에서 일하고 있습니다. 혹시 윈도우 10을 사용하고 계신다면 해당 문제를 피드백 허브에도 등록해주실 수 있나요? answers.microsoft.com 의 경우는 서포트팀을 거쳐서 오게 되어 개발팀에 도착하기 쉽지 않습니다. 피드백 허브에 등록 후 UpVote 를 많이 받게되면 저희 개발팀에서 우선순위를 높여서 보게되니 피드백 허브에 이슈를 등록하시는 걸 부탁드립니다.

불편을 드려 죄송합니다.

세벌의 이미지

마이크로소프트 입력기 개발팀 박지인 님께.
피드백 허브 url 알려주셔요.

세벌의 이미지

MS 보다 빠른 Hodong 님 고맙습니다 :)

박지인의 이미지

감사합니다. :)

mithrandir의 이미지

설명중에 3-18나 자판이 도깨비불을 허용한다고 하셨는데 해당 기능은 도깨비불이 아니라 천지인 등에서 사용하는 multitap (일반적으로 뭐라고 부르는지 잘 몰라서 천지인 자판 구현할 때 썼던 용어를 썼슸니다) 에 해당한다고 생각합니다. 여러번 눌러서 자모가 바뀌어가는 과정은 ㄱㄱ->ㄲ 으로 입력하는것과 크게 다르지 않다고 생각하고요.

두벌식에 익숙하신 분들은 금방 적응 할 수 있고 오른손 비중이 높으니 오른손잡이에게 편할 것 같습니다. 오른손으로 같은 키를 두번 누르는 일도 많이 일어나지는 않을 것 같은 느낌이고요. 두번 둘러도 엄지나 검지일테니 부담도 별로 없겠네요.

언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net

나빌레라의 이미지

맞습니다. 도깨비불이라고 부르기엔 조금 다른 성격의 동작이네요. 해당 동작을 멀티탭이라고 부르는 군요. 널리 알려진 용어가 없으니 이제부터 해당 현상은 멀티탭이라고 부르죠 뭐. ^^

----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라

JPH의 이미지

감사합니다. 잘쓸께요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.