Skip to content

devsunb/sime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sime - 선비 입력기 (Seonbi Input Method Editor)

개인적으로 사용하기 위해 만든 macOS 용 한글 입력기

지원하는 한글 자판

설치

현재는 직접 빌드 후 설치하는 방법만 지원

Xcode가 설치되어 있어야 함

git clone https://github.com/devsunb/sime.git
cd sime

# 빌드
xcodebuild -project Sime.xcodeproj -scheme Sime -configuration Release build

# 테스트 실행
xcodebuild -project Sime.xcodeproj -scheme Sime -destination 'platform=macOS' test

# 설치
pkill -9 Sime.app
rm -rf ~/Library/Input\ Methods/Sime.app
mv ~/Library/Developer/Xcode/DerivedData/Sime-*/Build/Products/Release/Sime.app ~/Library/Input\ Methods/Sime.app

입력기 추가

설치 후 로그아웃/로그인 한 번 필요할 수 있음

시스템 설정 - 키보드 - 입력 소스 편집에서 한국어 - 선비 추가

세모이 활성화 방법

터미널에서 아래 명령 실행하면 바로 반영됨

# 자판 세모이 선택
defaults write dev.sunb.inputmethod.sime keyboard -int 1

# 손 뗄 때 입력 처리 (약어 기능) 활성화
defaults write dev.sunb.inputmethod.sime processOnKeyUp -int 1

세부 설정은 아래 설정 섹션 참고

손쉬운 사용 권한 설정

손 뗄 때 입력 처리 사용하려면 손쉬운 사용 권한 필요

  • processOnKeyUp 옵션을 활성화하고 선비 입력기 선택하면 손쉬운 사용 권한 요청 표시됨
  • 직접 추가하려면 시스템 설정 - 개인정보 보호 및 보안 - 손쉬운 사용에서 Sime 앱 추가

배경

컴퓨터를 좋아함
-> 오랜 시간 컴퓨터를 함 = 목, 허리, 손목 등 부상 우려

적은 움직임 = 빠른 속도 = 낮은 부하 -> 부상 위험 감소
-> 같은 글자를 더 적은 움직임으로, 더 빨리 치고 싶음
-> 스플릿 키보드, 입력기에 관심

한글 자판 중에서는 세벌식 모아치기 e 자판에 관심이 생김
macOS를 사용하고 있어서 날개셋 입력기 사용이 불가능한 상태

구름 입력기나 Karabiner-Elements 기반으로 구현된 자판을 사용해보았는데
이어치기, 모아치기, 약어 중 일부가 원하는대로 동작하지 않았음

세벌식 다음 카페에서 숨통님이 macOS 용 세벌식 한글 입력기인 팥알 입력기를 만드셨다는 게시물 확인
팥알 입력기가 세모이 자판은 지원하지 않는 것 같아서 추가해보려고 시도하다 어려움 느낌
README를 읽다가 참고한 프로젝트로 나빌 입력기 for 맥이 링크되어 있어
코드를 읽어보니 여기서 출발하는 게 조금 더 쉬울 것 같다고 생각

기능

모아치기 종성 넘김

"서울"을 모아치기로 입력할 때, "서"를 입력한 상태에서 "울"의 종성인 "ㄹ"을 가장 먼저 입력하는 경우 "설우"가 될 수 있다.
이를 방지하기 위해서 다음과 같은 조건을 가지고 종성을 다음 글자로 넘기는 기능을 구현하였다.

  • 현재 입력 중인 글자에 종성이 존재하고,
  • 이번 입력된 낱자로 인해 다음 글자로 넘어가게 되는 시점에,
    • "서울" 예시에서는, "설"이 입력된 상태에서 "ㅇ" 이나 "ㅜ" 가 입력되는 시점이라고 보면 됨
  • 직전 키와 입력 시간 간격이 임계치(기본적으로 150 ms) 미만인 경우
  • 최근 연속 입력된 모든 종성을 다음 글자로 넘긴다.

약어

키 누를 때 입력 처리하는 기본 흐름에서는 모아치기처럼 보이는 것도 사실 이어치기다.
초중종 순서가 바뀌는 정도는 이어치기에서도 보정이 가능하기 때문에 딱히 문제가 없다.

일단 IMKit 에서는 keyUp 이벤트를 기본적으로 처리하지 못하는 것으로 보인다.

그래서 기존과 같이 keyDown 시 입력을 처리하는 구조에서 약어 매칭을 진행하는 입력 대기열을 만들어서 약어를 구현했었다.
그리고 나니 keyDown 시 입력을 처리하면 약어 시퀀스를 포함하는 글자를 입력하는 게 어렵다는 것을 깨달았다.

예를 들어 jw 또는 wj를 입력하면 입니다. 로 확장되어야 하는데, jdw를 입력하면 이라는 글자가 입력되어야 한다.
근데 모아치기가 되는 것처럼 동작해야 하니 을 입력할 때는 jdw가 아니라 jwddwj와 같이 입력해도 되어야 한다.
이때 jwd이 아니라 입니다. ㅣ가 되어 버리고, dwjㅇ입니다. 가 되어 버리는 문제가 발생한다.

그래서 keyUp 시 입력 이벤트를 처리할 수 있도록 하였다.
keyUp 이벤트를 정상적으로 모니터 하려면 손쉬운 사용 권한을 허용해야 한다.

설정

skhd, Karabiner-Elements, Hammerspoon 등과 연계해서 설정 변경하기 쉽도록
터미널에서 defaults 명령어로 설정하게 구현

모니터 설정해둬서 변경 즉시 반영된다.
설정 변경 시 디버그 로그에 출력하게 해두었다.

자판 선택

# 두벌식 (기본값)
defaults write dev.sunb.inputmethod.sime keyboard -int 0

# 세모이
defaults write dev.sunb.inputmethod.sime keyboard -int 1

손 뗄 때 입력 처리

세모이 약어 기능 사용하려면 활성화해야 함

활성화한 경우 손쉬운 사용 권한 필요함

# 비활성 (기본값)
defaults write dev.sunb.inputmethod.sime processOnKeyUp -int 0

# 활성
defaults write dev.sunb.inputmethod.sime processOnKeyUp -int 1

두벌식 연타로 쌍자음

# Shift 사용 (기본값)
defaults write dev.sunb.inputmethod.sime dubeolDouble -int 0

# 연타 (ㄷㄷ -> ㄸ)
defaults write dev.sunb.inputmethod.sime dubeolDouble -int 1

디버그 로그

# 활성화 (~/Library/Logs/Sime.log에 기록)
defaults write dev.sunb.inputmethod.sime debug -bool true

# 비활성화
defaults write dev.sunb.inputmethod.sime debug -bool false

# 로그 실시간 확인
tail -f ~/Library/Logs/Sime.log

로그 레벨

레벨 설명 항상 기록
ERROR 예상치 못한 오류 O
INFO 설정 변경, 앱 시작/종료 O
DEBUG 키 입력, 조합 상태 등 상세 정보 X (debug 활성화 시만)

로그 형식

[2025-01-01 12:00:00.000][INFO] [App] server activated
[2025-01-01 12:00:01.123][DEBUG] [Input] process 'r'
[2025-01-01 12:00:01.124][DEBUG] [Automata] preedit [r] [] []

카테고리: [App], [Config], [Input], [Automata], [Timing]

현재 설정 확인

defaults read dev.sunb.inputmethod.sime

설정 초기화

defaults delete dev.sunb.inputmethod.sime

문제 해결

로그 확인

tail -f ~/Library/Logs/Sime.log

참고한 프로젝트

About

macOS 한글 입력기

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published