Bộ gõ tiếng Việt cho macOS theo phong cách Unikey trên Windows: app chạy nền trên menu bar, gõ được ngay trong mọi ứng dụng, chuyển Anh–Việt bằng phím tắt (mặc định ⌃⇧ Control+Shift, có thể đổi sang ⌘⇧ hoặc phím fn 🌐 trong Cài đặt), không cần chuyển input source.
Kiến trúc: Rust engine (thuần logic, unit-test đầy đủ) + Swift shell (CGEventTap + bơm phím có đánh dấu chống race và ghim process đích).
- Telex, VNI, Simple Telex; gõ nhanh phụ âm (cc→ch, gg→gi…)
- Hai kiểu đặt dấu: cũ (òa, úy) / mới (oà, uý)
- Tự khôi phục từ tiếng Anh: "text" không thành "tẽt", "add" không thành "ađ";
từ sai chính tả tiếng Việt được trả về phím gốc khi kết thúc từ. Viết tắt
(
đc,òh,đn…) được giữ nguyên, không trả vềddc/ofh - Phím ESC trả lại đúng phím đã gõ ("việt" → "vieejt")
- Gõ tắt không giới hạn độ dài, nhập/xuất JSON, thông minh theo hoa/thường
- Nhớ chế độ Anh/Việt theo từng ứng dụng + danh sách loại trừ (game…)
- Chiến lược bơm phím theo app: chậm cho terminal và Cursor; chọn rồi gõ lại ngay tại event tap cho Chromium. Phím thường được giữ trên luồng hệ thống khi không có thao tác chèn chậm đang chạy.
- Tự viết hoa đầu câu (tùy chọn), phát hiện secure input (ô mật khẩu) và hiện 🔒 trên menu bar
- Watchdog tự hồi phục event tap; ký code bằng certificate ổn định nên quyền Accessibility không bị reset sau mỗi lần build lại
Bản dựng sẵn: tải file DMG ở Releases, kéo app vào Applications (xem mục cài đặt bên dưới vì bản này chưa notarize).
Build từ source — yêu cầu: Xcode, Rust cài qua
rustup, brew install xcodegen cbindgen.
make install # build core Rust + app, ký, cài vào /Applications, mở app
make test # Rust test/clippy + Swift XCTest
make dmg # DMG universal arm64 + x86_64 để cài máy khác
make watch # xem log runtimeCài trên máy khác: copy file DMG sang, kéo app vào Applications. Vì bản
này ký bằng cert Apple Development (chưa notarize), lần mở đầu bị Gatekeeper
chặn — làm theo HƯỚNG DẪN CÀI ĐẶT.txt trong DMG (System Settings → Privacy
& Security → "Open Anyway", hoặc xattr -cr /Applications/GoViet.app).
Muốn phát hành rộng không bị chặn thì cần Apple Developer Program
($99/năm) cùng Developer ID và notarization.
Lần đầu chạy, macOS sẽ hỏi quyền Accessibility (System Settings → Privacy & Security → Accessibility → bật GoViet). Cấp xong là gõ được ngay, không cần logout.
Lần đầu mở bản có thiết lập bàn phím này (kể cả nâng cấp), GõViệt tự chạy
defaults write -g ApplePressAndHoldEnabled -bool false rồi khởi động lại
cfprefsd của tài khoản hiện tại. Thiết lập tắt bảng chọn dấu khi giữ phím
trên toàn bộ tài khoản, chỉ chạy một lần và không cần sudo. Các ứng dụng
đang mở có thể cần thoát rồi mở lại để nhận thay đổi.
Muốn bật lại bảng chọn dấu, chạy hai lệnh dưới đây rồi mở lại ứng dụng cần dùng; GõViệt sẽ giữ lựa chọn đó ở những lần khởi động sau:
defaults write -g ApplePressAndHoldEnabled -bool true
killall cfprefsdNếu quyền bị kẹt sau khi đổi certificate: tccutil reset Accessibility com.kynguyen.goviet
Từ tiếng Anh trùng âm tiết Việt hợp lệ sẽ bị bỏ dấu: this→thí, mix→mĩ,
was→ứa… Xử lý: nhấn ESC để khôi phục, gõ đúp phím dấu (tesst→test),
hoặc chuyển EN bằng ⌃⇧ (app nhớ chế độ theo từng ứng dụng). Danh sách đầy đủ
trong rust/engine/tests/corpus/known_limitations.tsv.
rust/engine # engine thuần Rust: telex/vni, đặt dấu, validate âm tiết,
# auto-restore, macros — 14 test suites data-driven (TSV)
rust/ffi # C ABI (cbindgen) → macos/Generated/goviet.h
macos/ # Swift shell: EventTapManager, TextInjector, AppProfiles,
# SettingsStore (JSON), menu bar + SwiftUI Settings
MIT License. Tham khảo hành vi từ UniKey/vi-rs/bamboo-core — xem docs/ATTRIBUTION.md.