Bộ gõ tiếng Việt cho macOS, hỗ trợ cả hai kiểu gõ Telex và VNI.
ViType là bộ gõ tiếng Việt nhẹ, được xây dựng với Rust core để xử lý chuyển đổi văn bản hiệu suất cao và giao diện Swift/SwiftUI để tích hợp tự nhiên với macOS. Ứng dụng chặn input bàn phím toàn hệ thống và chuyển đổi phím gõ thành ký tự tiếng Việt với dấu thanh chính xác.
- Hai kiểu gõ: Telex (dùng chữ cái) và VNI (dùng số)
- Chuyển đổi thời gian thực: Chuyển đổi ký tự tiếng Việt ngay khi gõ
- Chế độ đặt dấu: Kiểu cũ (chuẩn chính tả) hoặc Kiểu mới (đặt dấu vào nguyên âm chính)
- Tự động sửa dấu: Tự động di chuyển dấu thanh khi thêm nguyên âm
- Bỏ qua kiểm tra âm tiết: Tùy chọn bỏ qua kiểm tra cụm nguyên âm hợp lệ
- Loại trừ ứng dụng: Tắt ViType cho các ứng dụng cụ thể
- Tích hợp Menu Bar: Truy cập nhanh cài đặt và bật/tắt bộ gõ
- Khởi động cùng hệ thống: Tùy chọn tự động khởi động
- Tự động cập nhật: Cơ chế cập nhật tích hợp qua Sparkle
- Tải file DMG từ Releases hoặc build từ mã nguồn
- Kéo
ViType.appvào thư mục Applications - Khởi chạy ViType
- Cấp quyền Accessibility: Khi được yêu cầu, vào System Settings > Privacy & Security > Accessibility và bật ViType. Sau đó khởi động lại ứng dụng ViType
- Phím tắt:
Ctrl+Shift+Space(mặc định) - Menu bar: Click vào icon ViType và chọn "Bật/Tắt gõ tiếng Việt"
Icon trên menu bar hiển thị trạng thái hiện tại:
- V: Đang bật gõ tiếng Việt
- E: Chế độ tiếng Anh (ViType tắt)
Truy cập cài đặt qua icon menu bar:
- Kiểu gõ: Chọn giữa Telex và VNI
- Chế độ đặt dấu: Kiểu cũ hoặc Kiểu mới
- Tự động sửa dấu: Bật/tắt tự động di chuyển dấu thanh
- Bỏ qua kiểm tra âm tiết: Bỏ qua kiểm tra cụm nguyên âm hợp lệ
- Loại trừ ứng dụng: Tắt ViType cho các ứng dụng cụ thể
| Thao tác | Telex | VNI |
|---|---|---|
| Sắc (´) | s |
1 |
| Huyền (`) | f |
2 |
| Hỏi (ˀ) | r |
3 |
| Ngã (~) | x |
4 |
| Nặng (.) | j |
5 |
| Xóa dấu | z |
0 |
| â, ê, ô | aa, ee, oo |
a6, e6, o6 |
| ơ, ư | ow, uw |
o7, u7 |
| ă | aw |
a8 |
| đ | dd |
d9 |
Ví dụ:
| Từ | Telex | VNI |
|---|---|---|
| việt | vieejt |
vie6t5 |
| đẹp | ddejp |
d9e5p |
| người | nguwowif |
ngu7o7i2 |
- macOS 14.6 trở lên
- Xcode 16.2 trở lên với Command Line Tools
- Rust toolchain (stable) - cài đặt qua rustup
git clone --recursive https://github.com/ttdatt/vitype.git
cd vitypeNếu đã clone mà không có --recursive:
git submodule update --init --recursivecd ViType-core
cargo build --releaseDùng Xcode:
xcodebuild -project ViType-macos/ViType.xcodeproj \
-scheme ViType -configuration Release buildHoặc mở ViType-macos/ViType.xcodeproj trong Xcode và build với Cmd+B.
cd ViType-macos
bash ./scripts/build_dmg.shFile DMG sẽ được tạo trong ViType-macos/dist/.
Để build có chữ ký và notarize:
bash ./scripts/build_dmg.sh --sign --notarize --apple-id "your@email.com"┌─────────────────────────────────────────────────────────┐
│ ViType-macos │
│ (Swift/SwiftUI) │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ Menu Bar │ │ Cài đặt │ │ CGEvent Tap │ │
│ │ Manager │ │ Views │ │ (Bàn phím) │ │
│ └─────────────┘ └──────────────┘ └───────┬───────┘ │
│ │ │
│ ┌──────────────────────────────────────────▼────────┐ │
│ │ KeyTransformer (FFI Bridge) │ │
│ └──────────────────────────────────────────┬────────┘ │
└─────────────────────────────────────────────┼──────────┘
│ C FFI
┌─────────────────────────────────────────────▼──────────┐
│ ViType-core │
│ (Rust) │
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ VitypeEngine│ │ Telex/VNI │ │ Diacritics │ │
│ │ (lib.rs) │ │ Rules │ │ Helpers │ │
│ └─────────────┘ └──────────────┘ └───────────────┘ │
└────────────────────────────────────────────────────────┘
Tại sao tách riêng?
- Rust core: Xử lý phím gõ hiệu suất cao, chuyển đổi Unicode và quy tắc bộ gõ được hưởng lợi từ tốc độ và an toàn bộ nhớ của Rust
- Swift UI: Trải nghiệm macOS native với SwiftUI cho cài đặt, menu bar và tích hợp hệ thống (Accessibility APIs, CGEvent)
ViType/
├── ViType-core/ # Rust core engine
│ ├── src/
│ │ ├── lib.rs # Logic engine chính, đặt dấu thanh
│ │ ├── telex.rs # Quy tắc Telex
│ │ ├── vni.rs # Quy tắc VNI
│ │ ├── diacritics.rs # Helper xử lý dấu
│ │ ├── common.rs # Bảng ánh xạ nguyên âm/dấu thanh
│ │ ├── ffi.rs # C FFI exports
│ │ └── tests/ # Unit tests
│ ├── Cargo.toml
│ ├── TELEX_RULES.md # Tài liệu quy tắc Telex
│ └── VNI_RULES.md # Tài liệu quy tắc VNI
│
├── ViType-macos/ # Ứng dụng macOS
│ ├── ViType/
│ │ ├── AppDelegate.swift # CGEvent tap, xử lý bàn phím
│ │ ├── KeyTransformer.swift # FFI bridge đến Rust core
│ │ ├── MenuBarManager.swift # UI menu bar
│ │ ├── ContentView.swift # Cửa sổ cài đặt chính
│ │ ├── GeneralSettingsView.swift # Cài đặt chung
│ │ ├── AdvancedSettingsView.swift# Cài đặt nâng cao
│ │ ├── AppExclusionView.swift # Cài đặt loại trừ ứng dụng
│ │ └── vitype_core.h # C header cho FFI
│ ├── ViType.xcodeproj/
│ └── scripts/
│ └── build_dmg.sh # Script tạo DMG
│
├── AGENTS.md # Hướng dẫn repository
└── LICENSE # GPL-3.0
Dự án này được cấp phép theo GNU General Public License v3.0 - xem file LICENSE để biết chi tiết.