Skip to content

개발 정보

Riey edited this page Mar 19, 2022 · 3 revisions

kime 개발 정보

kime을 확장하거나 버그를 수정할려고 생각하시는 개발자 분들을 위한 자료입니다.

기본 구조

kime은 대략 이런식의 흐름을 갖습니다

kime

보통 끝글자 버그같이 GUI 라이브러리와 관련된 내용은 frontend, 새로운 입력방식이나 언어같은건 backend, 설정에 관련된건 config, kime을 외부에서 사용하고 싶으시면 capi를 보시면 됩니다.

세부 구조

keycode

리눅스에서 키보드 입력은 먼저 하드웨어가 scancode를 주고 그걸 커널이 keycode로 매핑한 다음 Xorg나 xkb에서 keysym을 만듭니다

쿼티나 드보락등의 레이아웃을 교체하면 보통 keycode는 그대로지만 keysym이 바뀌게 되는데

kime은 현재 keycode만을 입력으로 받고 있어서 영어 자판에 영향은 받지 않지만 한글 자판을 바꾸고 싶을때도 그대로인 단점이 있습니다 나중에는 두 입력을 절충해서 사용하게 될 것 같습니다

candidate

입력창은 한자와 이모지등의 입력을 위해 꼭 필요한 기능입니다만 입력기 안에서 GUI 창을 띄우고 그 안에서 입력을 또 받는 희한한 구조기도 하고 저의 실력 부족으로 현재 개발버전에 있는건 아직 불완전합니다

현시점에선 입력창이 떠있는중엔 press_key가 InputResult::NOT_READY를 반환하고 그걸 받은 frontend들은 포커스 이밴트때 다시 engine에 입력결과를 요청해서 마무리하는 비동기 방식으로 진행됩니다

kime-engine-capi, kime-engine-cffi

kime은 바이너리 크기를 줄이기 위해서 engine을 동적 라이브러리로 만들어서 frontend들이 공유합니다

capi는 libkime_engine.so 파일과 kime.h를 생성하는 라이브러리고(Rust -> C) cffi는 그걸 다시 Rust에서 쓸려고 있는 바인딩 라이브러리 입니다(C -> Rust)

Clone this wiki locally