Licence
MIT
Version
0.2.1
Deps
0
Size
4 kB
Vulns
0
Weekly
0
TAJA-CLI (타자-CLI)
한국인을 위한 크로스플랫폼 모던 풀스크린 TUI 타자 연습기
taja-cli는 터미널(CLI) 환경에서 한글과 영어 타자 연습을 직관적이고 아름답게 즐길 수 있는 Rust 기반 TUI(Text User Interface) 프로그램입니다. OS 한글 입력기 상태에 구애받지 않는 내장 한글 오토마타와 정밀한 손가락 가이드 자판 위젯을 통해 독수리 타자 교정 및 타자 속도 향상을 돕습니다.
주요 특징
1. 자체 한글 오토마타 엔진 내장
- 영문 입력 상태 유지: OS 입력기를 '영문'으로 둔 채 타이핑하면, 프로그램 내부에서 두벌식 조합 규칙에 따라 한글 자모를 실시간으로 조화롭게 조합합니다.
- 자소 단위 백스페이스: 글자 단위가 아닌 자모 한 개 단위의 섬세한 역분해(Decomposition) 및 삭제를 완벽 지원합니다.
- 단독 자모 결합 방지: 자리 연습 시 단독 자모(예:
ㄱㄴㄷ)와 완성형 글자(예:하늘)의 입력 흐름을 구분하여, 단독 자모가 결합 버퍼에 말려 들어가지 않도록 실시간 글자 수준 우회 로직을 구현했습니다.
2. 지능형 실시간 가이드 & 판정
- 동적 가이드 자모 추론: 완성형 글자(예:
하)를 입력할 때, 사용자의 현재 입력 버퍼 상태에 맞춰 다음에 쳐야 할 진짜 물리 자모(예:ㅎ을 치기 전엔ㅎ, 치고 난 뒤엔ㅏ)를 영리하게 계산하여 안내합니다. - 완화된 한글 오타 판정: 조합 중인 미완성 글자 상태를 완전히 분해하여 타깃 자모의 접두사(Prefix) 관계를 만족하면 오타로 판정하지 않고 기다려 주는 사용자 친화적 정확도 판정을 적용했습니다.
- 지능형 입력 완료 감지: 조합 중인 글자가 남아 있을 때는 대기하고, 마지막 글자 입력 시 오타가 발생하더라도 정상 완료 감지(
count_completed_chars)하여 자연스럽게 세션이 넘어가도록 정교화했습니다.
3. 풍성한 연습 모드
- 자리 연습:
- 한글 (Level 1~6): 기본 자리부터 쌍자음 및 복합 모음 연습까지 지원.
- 영어 (Level 1~5): QWERTY 자판의 홈 로우, 탑 로우, 바텀 로우, 대소문자 혼합 및 특수 기호/숫자 단계적 지원.
- 낱말 연습: 700개 이상의 한글 단어와 650개 이상의 영단어 및 개발자용 용어 이스터에그 수록.
- 문장 연습: 속담, 위인 명언, 시 구절, 헌법 조문 등 한/영 각각 100개씩의 풍성한 에셋을 탑재하여 셔플링(Shuffle) 모드로 매번 새로운 문장 제공.
4. 실시간 입력 피드백
- 사용자가 실제로 입력한 값이 화면에 그대로 표시되며, 목표 텍스트와 비교해 맞은 글자는 초록색, 틀린 글자는 빨간색으로 즉시 보여줍니다.
- 입력이 없을 때는
▌커서로 대기 상태를 명확히 표시합니다.
5. 똑똑한 타이머
- 문장/낙말 연습에서 한 문장(단어)을 완료하면 타이머가 일시정지되고, 다음 문장 입력 시작 시 자동 재개됩니다.
- 휴식 시간에 타수/정확도가 왜곡되지 않습니다.
6. 정밀 통계 및 취약 키 분석
- 타자 세션이 완료될 때마다 타수(CPM) 및 정확도(%)를 로컬 JSON 저장소(
~/.typing-practice/history.json)에 영구 보관합니다. - 전체 통계 창에서 역대 최고 타수 및 평균 타수를 조회할 수 있으며, 오타 횟수를 계산해 가장 취약한 탑 3 오타 키를 지적해 교정을 돕습니다.
7. 게임 모드
- Time Attack: 제한 시간 내 최대한 많은 단어 입력
- Survival: 5개의 목숨으로 버티며 점점 어려워지는 단어 타이핑
- Typing Rain: 아래로 떨어지는 단어를 재빨리 타이핑해 막아내기
- Flash Typing: 단어를 잠깐 보고 기억해서 입력 (기억력 + 타자)
- Daily Challenge: 매일 같은 10개 단어로 친구와 경쟁
- Long Text Race: 긴 글을 문단 단위로 완주하며 CPM 추이 확인
화면 미리보기
- 메인 메뉴: 심플하고 조화로운 옐로우 팁 메시지와 직관적인 메뉴 레이아웃.
- 가상 키보드 가이드 위젯: 연습하는 언어(한글/영어)에 맞춰 두벌식 자판 또는 QWERTY 자판이 동적으로 전환 렌더링되며, 쳐야 할 다음 물리 키와 담당 손가락(L2
L5, R2R5)이 시각적으로 하이라이트됩니다.
설치 및 실행 방법
Rust를 설치하지 않아도 npm으로 바로 쓸 수 있습니다. (권장)
요구 사항
| 방식 | 필요한 것 |
|---|---|
| npm (권장) | Node.js 12 이상 |
| Cargo (소스 빌드) | Rust & Cargo |
| 공통 | 터미널 (macOS Terminal, iTerm2, Alacritty, Windows Terminal 등) |
1. npm으로 설치 (권장)
전역 설치 후 taja 명령으로 실행합니다.
npm install -g taja-cli
taja
설치만 하고 한 번 실행해 보려면:
npx taja-cli
지원 플랫폼
첫 실행 시 OS/아키텍처에 맞는 바이너리를 GitHub Releases에서 받아 캐시합니다. Rust 툴체인은 필요 없습니다.
| OS | 아키텍처 | 패키지 |
|---|---|---|
| macOS | Apple Silicon (arm64) |
taja-cli-macos-arm64.tar.gz |
| macOS | Intel (x64) |
taja-cli-macos-x64.tar.gz |
| Linux | x64 |
taja-cli-linux-x64.tar.gz |
| Linux | arm64 |
taja-cli-linux-arm64.tar.gz |
| Windows | x64 |
taja-cli-windows-x64.zip |
업데이트 / 삭제
# 최신 버전으로 업데이트
npm install -g taja-cli@latest
# 제거
npm uninstall -g taja-cli
npm 패키지는 네이티브 바이너리 래퍼입니다.
taja실행 시 바이너리가 없으면 Release 에셋을 자동으로 내려받습니다.
2. Cargo로 빌드 및 실행 (소스)
개발·기여할 때 사용합니다.
git clone https://github.com/parkjangwon/taja-cli.git
cd taja-cli
cargo run --release
빌드 결과물만 설치하려면:
cargo install --path .
# 이후: taja-cli (Cargo 바이너리 이름)
타자 연습을 시작하기 전에 **OS 입력기 상태를 반드시 '영문(QWERTY)'**으로 전환해 주세요. (내장 한글 오토마타 엔진이 키 입력을 자모로 변환하여 작동합니다.)
프로젝트 구조
taja-cli/
├── Cargo.toml # 의존성 및 패키지 메타데이터
├── README.md
├── npm/ # npm 배포 래퍼 (taja 커맨드)
│ ├── package.json
│ └── bin/index.js
└── src/
├── main.rs # 터미널 이벤트 루프·입력 처리 (72줄)
├── app/
│ ├── mod.rs # App 구조체, 코어 입력/통계
│ ├── timer.rs # 타이머 시작/일시정지/재개
│ ├── practice.rs # 자리·낱말·문장 연습 설정
│ └── game.rs # 6개 게임 모드 로직
├── controller/
│ ├── mod.rs # 입력 디스패처
│ ├── menu.rs # 메뉴 키보드 핸들러
│ ├── practice.rs # 연습 키보드 핸들러
│ └── game.rs # 게임 키보드 핸들러
├── ui/
│ ├── mod.rs # 렌더러 디스패처·공용 위젯
│ ├── menu.rs # 메뉴 화면
│ ├── practice.rs # 연습 화면
│ └── game.rs # 게임 화면
├── assets.rs # 연습 문장·단어 데이터 (490줄)
├── hangeul.rs # 두벌식 오토마타·정오 판정
└── storage.rs # JSON 기록 저장
표준 운지법 (손가락 매핑) 안내
taja-cli 하단 가이드 키보드는 표준 QWERTY 및 두벌식 운지 사선 열을 기반으로 가이드를 띄웁니다:
- 왼손 새끼 (L5):
1,ㅂ/ㅃ,ㅁ,ㅋ/Q,A,Z - 왼손 약지 (L4):
2,ㅈ/ㅉ,ㄴ,ㅌ/W,S,X - 왼손 중지 (L3):
3,ㄷ/ㄸ,ㅇ,ㅊ/E,D,C - 왼손 검지 (L2):
4,5,ㄱ/ㄲ,ㅅ/ㅆ,ㄹ,ㅎ,ㅍ,ㅠ/R,T,F,G,V,B - 오른손 검지 (R2):
6,7,ㅛ,ㅕ,ㅗ,ㅓ,ㅜ,ㅡ/Y,U,H,J,N,M - 오른손 중지 (R3):
8,ㅑ,ㅏ,,/I,K,, - 오른손 약지 (R4):
9,ㅐ/ㅒ,ㅣ,./O,L,. - 오른손 새끼 (R5):
0,-,=,ㅔ/ㅖ,;,',/및 오른쪽 기호 전체 /P,;,/ - 양손 엄지 (Space): 공백(Space Bar)
라이선스
이 프로젝트는 MIT 라이선스에 따라 배포됩니다. 자유롭게 기여하거나 수정해 사용하실 수 있습니다.