Các bộ gõ tiếng Việt hiện tại trên macOS đang gặp một số vấn đề:
- 🚫 Không tương thích với các phiên bản macOS mới nhất
- 🐛 Nhiều bug chưa được sửa, ít được tác giả cập nhật và bảo trì
- 🔧 Thiếu tính năng hiện đại, khó debug và tùy biến linh hoạt
XKey được tạo ra để giải quyết triệt để những vấn đề trên!
- ⚡ Hiệu suất vượt trội: Viết hoàn toàn bằng Swift native, tối ưu hóa tối đa cho macOS, phản hồi tức thì
- 🎯 Tương thích hoàn hảo: Chạy mượt mà trên tất cả phiên bản macOS mới nhất (12.0+)
- 🔧 Ổn định & Cập nhật thường xuyên: Code base hiện đại, được test kỹ lưỡng với auto-update
- 🛠️ Debug Window: Cửa sổ debug chuyên nghiệp giúp developer theo dõi real-time hoạt động của bộ gõ
- 🚀 Tính năng thông minh: Smart Switch, Macro, Quick Typing, kiểm tra chính tả, từ điển cá nhân
- 🌐 Dịch thuật nhanh: Dịch văn bản với phím tắt, hỗ trợ 30+ ngôn ngữ qua nhiều nhà cung cấp (Google, Tencent, Volcano)
- 🎨 Giao diện hiện đại: Thiết kế theo phong cách Apple với SwiftUI
- 🔒 Bảo mật: Chạy local, không thu thập dữ liệu người dùng
- ⌨️ Dual Mode: Hỗ trợ cả CGEvent và Input Method Kit (XKeyIM)
| Chế độ | Mô tả | Ưu điểm |
|---|---|---|
| CGEvent (Mặc định) | Sử dụng CGEvent injection | Không cần cấu hình, hoạt động ngay với mọi app |
| XKeyIM (Thử nghiệm) | Sử dụng Input Method Kit | Mượt mà hơn trong Terminal, Spotlight, Address Bar |
| Kiểu gõ | Mô tả | Ví dụ |
|---|---|---|
| Telex | Kiểu gõ phổ biến nhất | tieengs → tiếng |
| VNI | Kiểu gõ truyền thống với số | tie61ng → tiếng |
| Simple Telex 1 | Telex đơn giản (w không biến đổi) | tieengs → tiếng |
| Simple Telex 2 | Telex + w cho ư/ơ | tuaw → tưa |
- Unicode (UTF-8) - Khuyến nghị, mặc định
- TCVN3 (ABC) - Tương thích với phần mềm cũ
- VNI Windows - Tương thích với font VNI
Tăng tốc độ gõ với các phím tắt thông minh:
| Tính năng | Chức năng |
|---|---|
| Quick Telex | cc→ch, gg→gi, kk→kh, nn→ng, pp→ph, qq→qu, tt→th |
| Quick Start Consonant | f→ph, j→gi, w→qu (đầu từ) |
| Quick End Consonant | g→ng, h→nh, k→ch (cuối từ) |
Tự động thay thế văn bản với Macro:
- ✅ Tạo các từ viết tắt tùy chỉnh
- ✅ Hỗ trợ import/export danh sách macro (.txt)
- ✅ Tùy chọn tự động viết hoa macro
- ✅ Tùy chọn thêm khoảng trắng sau macro
- ✅ Sử dụng macro trong cả chế độ tiếng Anh
Truy cập nhanh với phím tắt tùy chỉnh:
| Tính năng | Mô tả |
|---|---|
| Chữ hoa/thường | Viết hoa tất cả, viết thường tất cả, viết hoa chữ đầu, viết hoa mỗi từ |
| Bảng mã | Chuyển đổi giữa Unicode ↔ TCVN3 ↔ VNI |
| Xóa dấu | Chuyển từ có dấu sang không dấu |
- 📖 Sử dụng từ điển tiếng Việt (~200KB, GPL license)
- 🔄 Tự động khôi phục khi gõ sai chính tả
- ✏️ Hỗ trợ cả dấu mới (xoà) và dấu cũ (xóa)
- 👤 Từ điển cá nhân: Thêm các từ riêng để bỏ qua kiểm tra
- 📥 Import/Export từ điển cá nhân
- 🧠 Nhớ ngôn ngữ theo từng ứng dụng
- 🔍 Hỗ trợ phát hiện Spotlight/Raycast/Alfred overlay apps
- 🔄 Tự động chuyển ngôn ngữ khi chuyển app
Dịch văn bản ngay trong mọi ứng dụng với phím tắt tùy chỉnh. XKey cung cấp hai hướng dịch, mỗi hướng có phím tắt riêng và các tùy chọn hoạt động độc lập:
Dịch văn bản đang chọn (hoặc toàn bộ nội dung) từ ngôn ngữ nguồn sang ngôn ngữ đích.
Cách sử dụng:
- Chọn (bôi đen) text cần dịch trong bất kỳ ứng dụng nào
- Nhấn phím tắt (mặc định:
⌘ + ⇧ + T) - Kết quả được xử lý theo các tùy chọn đã bật
💡 Nếu không chọn text, XKey sẽ dịch toàn bộ nội dung trong ô nhập liệu.
Tùy chọn (bật/tắt độc lập):
| Tùy chọn | Mặc định | Mô tả |
|---|---|---|
| Thay thế text gốc | ✅ Bật | Thay thế text đang chọn bằng bản dịch |
| Copy vào clipboard | ✅ Bật | Copy bản dịch vào clipboard để dán ở nơi khác |
| Hiển thị popup | ❌ Tắt | Hiển thị bản dịch trong overlay popup |
| Tự ẩn popup | 4 giây | Thời gian tự ẩn (0 = không tự ẩn, chỉ hiện khi bật popup) |
Dịch ngược văn bản từ ngôn ngữ đích sang ngôn ngữ nguồn — hữu ích để xem nghĩa hoặc kiểm tra bản dịch.
Cách sử dụng:
- Chọn text cần dịch ngược
- Nhấn phím tắt (cần cấu hình trong Settings)
- Kết quả được xử lý theo các tùy chọn đã bật
Tùy chọn (bật/tắt độc lập):
| Tùy chọn | Mặc định | Mô tả |
|---|---|---|
| Thay thế text gốc | ❌ Tắt | Thay thế text đang chọn bằng bản dịch ngược |
| Copy vào clipboard | ❌ Tắt | Copy bản dịch vào clipboard |
| Hiển thị popup | ✅ Bật | Hiển thị bản dịch trong overlay popup |
| Tự ẩn popup | 4 giây | Thời gian tự ẩn (0 = không tự ẩn, chỉ hiện khi bật popup) |
💡 Mỗi tùy chọn hoạt động hoàn toàn độc lập — bạn có thể bật đồng thời thay thế text, copy clipboard, và hiển thị popup nếu muốn.
- 🪟 Glassmorphism UI — nền mờ, tự động phù hợp Light/Dark mode
- 📋 Nút copy nhanh bản dịch vào clipboard
- 🔤 Nút tăng/giảm cỡ chữ (+/−) để đọc dễ hơn
↔️ Kéo header để di chuyển overlay, kéo cạnh để resize- ⏱️ Thời gian tự ẩn tùy chỉnh riêng cho mỗi hướng dịch
- 📊 Thanh countdown hiển thị thời gian còn lại
| Tính năng | Mô tả |
|---|---|
| Tự động nhận diện | Nhận diện ngôn ngữ nguồn tự động |
| Đa ngôn ngữ | Hỗ trợ 30+ ngôn ngữ phổ biến (Anh, Việt, Trung, Nhật, Hàn, Pháp, Đức...) |
| Ngôn ngữ tùy chỉnh | Nhập mã ISO 639-1 để sử dụng bất kỳ ngôn ngữ nào |
| Nhà cung cấp | Mô tả |
|---|---|
| Google Translate | Miễn phí, hỗ trợ đa ngôn ngữ, chất lượng tốt |
| Tencent Transmart | Miễn phí, tối ưu cho các ngôn ngữ Châu Á |
| Volcano Engine | Miễn phí, chất lượng cao cho tiếng Trung ↔ Việt |
💡 Bạn có thể bật/tắt từng nhà cung cấp và thay đổi thứ tự ưu tiên trong Thiết lập → Dịch thuật.
- ✅ Fallback tự động: Nếu nhà cung cấp ưu tiên lỗi hoặc trả về kết quả rỗng, tự động thử nhà cung cấp tiếp theo
- ✅ Thông báo lỗi rõ ràng: Thông báo cụ thể bằng tiếng Việt cho từng loại lỗi (mạng, giới hạn tần suất, kết quả không hợp lệ...)
- ✅ Giữ nguyên định dạng chữ: Hoa/thường (ALL CAPS, Capitalize, lowercase)
- ✅ Overlay loading: Hiển thị trạng thái đang dịch tại vị trí con trỏ
- ✅ Lấy văn bản thông minh: Accessibility API với fallback sang Clipboard
Cấu hình: Settings → Dịch thuật
- 📋 Xem danh sách tất cả Input Sources
- ✅ Bật/tắt XKey cho từng Input Source cụ thể
- 🔀 Phím tắt chuyển nhanh sang XKey/ABC
- 🔔 Tự động phát hiện Input Sources tiếng Việt khác
Phát hiện ngữ cảnh đặc biệt dựa trên tiêu đề cửa sổ, giải quyết vấn đề gõ tiếng Việt trong các web apps:
| Web App | Xử lý đặc biệt |
|---|---|
| Google Docs/Sheets/Slides | Tắt marked text, slow injection |
| Notion, Figma | Điều chỉnh delay phù hợp |
| Và nhiều apps khác... | Tùy chỉnh theo nhu cầu |
Tính năng Window Title Rules:
- ✅ Tự động nhận diện web apps trong bất kỳ browser nào
- ✅ Áp dụng xử lý phù hợp cho từng context
- ✅ Ghi đè injection method, delay, text sending method
- ✅ Tự động chuyển Input Source khi rule match
- ✅ Hỗ trợ Regex matching
Cấu hình: Settings → Nâng cao → Hiệu chỉnh XKey Engine theo ứng dụng
- Mở Settings → Nâng cao → Hiệu chỉnh XKey Engine theo ứng dụng
- Nhấn "Thêm quy tắc"
- Điền thông tin:
- Tên: Tên hiển thị cho quy tắc
- Bundle ID:
*để áp dụng cho tất cả apps, hoặc chọn app cụ thể - Title Pattern: Từ khóa để nhận diện trong tiêu đề cửa sổ
- Match mode: Chứa, Bắt đầu bằng, Kết thúc bằng, Khớp chính xác, hoặc Regex
- Cấu hình behavior (tùy chọn):
- Ghi đè Marked Text: Bật/tắt gạch chân khi gõ
- Ghi đè Injection Method: Fast, Slow, Selection, Autocomplete, AX Direct hoặc Passthrough
- Tùy chỉnh Injection Delays: Điều chỉnh delay (µs) cho Backspace, Wait, Text
- Phương thức gửi text: Chunked hoặc One-by-One
- Chuyển Input Source: Tự động chuyển sang Input Source cụ thể
- Nhấn "Thêm" để lưu
💡 Lưu ý: Nếu bạn sử dụng Google Docs/Sheets/Slides với ngôn ngữ tiếng Việt, tiêu đề cửa sổ sẽ hiển thị là "Google Tài liệu", "Google Trang tính", "Google Trang trình bày". Bạn cần tạo thêm quy tắc với Title Pattern tương ứng.
| Tính năng | Mô tả |
|---|---|
| Hoàn tác gõ (Undo) | Nhấn phím tắt để hoàn tác việc bỏ dấu (tiếng → tieesng) |
| Free Mark | Đặt dấu tự do ở bất kỳ vị trí nào trong từ |
| Kiểu gõ hiện đại | Hỗ trợ cả dấu mới (oà/uý) và dấu cũ (òa/úy) |
| Tạm tắt thông minh | Ctrl tắt chính tả, Option tắt bộ gõ tạm thời |
| Thanh công cụ nổi | Điều khiển nhanh XKey tại vị trí con trỏ |
| Loại trừ ứng dụng | Tắt XKey cho các app cụ thể |
| Auto-update | Tự động cập nhật phiên bản mới với Sparkle |
| Backup/Restore | Sao lưu và khôi phục toàn bộ cài đặt |
| Debug Window | Theo dõi real-time hoạt động của bộ gõ |
- macOS 12.0 (Monterey) trở lên
- Quyền truy cập Accessibility
XKey đã có mặt trên Homebrew Cask. Chỉ cần một lệnh duy nhất:
brew install --cask xkeyHomebrew sẽ tự động tải, cài đặt XKey vào thư mục Applications, và quản lý cập nhật cho bạn.
Cập nhật lên phiên bản mới:
brew upgrade --cask xkeyGỡ cài đặt:
brew uninstall --cask xkeyLưu ý: Sau khi cài đặt, bạn vẫn cần cấp quyền Accessibility cho XKey: System Settings → Privacy & Security → Accessibility → Bật quyền cho XKey
- Tải file
XKey.dmgmới nhất từ Releases - Mở DMG và kéo XKey.app vào thư mục Applications
- Mở XKey từ Applications
- Cấp quyền Accessibility:
- System Settings → Privacy & Security → Accessibility
- Bật quyền cho XKey
# Clone repository
git clone https://github.com/xmannv/xkey.git
cd xkey/XKey
# Build release
./build_release.sh
# Output: Release/XKey.app, Release/XKey.dmgXKeyIM là Input Method sử dụng IMKit của Apple, cung cấp trải nghiệm gõ mượt mà hơn trong các ứng dụng có độ trễ phản hồi thấp hoặc có cơ chế autocomplete như Terminal, Spotlight, Address Bar.
| Component | Bundle ID |
|---|---|
| XKey (main app) | com.codetay.XKey |
| XKeyIM (input method) | com.codetay.inputmethod.XKey |
| App Group | group.com.codetay.xkey |
| Tính năng | Mô tả |
|---|---|
| Marked Text Mode | Hiển thị gạch chân khi gõ - ổn định và tương thích tốt (khuyến nghị) |
| Direct Mode | Không gạch chân - có thể gặp lỗi trong một số app |
| Phím hoàn tác | ESC để hoàn tác (ví dụ: "thử" → "thur") |
| Phím tắt chuyển nhanh | Tuỳ chỉnh phím tắt toggle giữa XKey và ABC |
- Mở XKey Settings → Input Sources
- Click "Cài đặt XKeyIM..."
- Copy
XKeyIM.appvào~/Library/Input Methods/ - Logout/Login lại
- Mở System Settings → Keyboard → Input Sources
- Click "+" và thêm "XKey Vietnamese"
XKeyIM cần quyền Accessibility để xử lý một số tổ hợp phím đặc biệt (như Ctrl+C trong Terminal):
- Mở System Settings → Privacy & Security → Accessibility
- Click "+" và thêm
XKeyIM.apptừ~/Library/Input Methods/ - Bật quyền cho XKeyIM
Lưu ý: Nếu không cấp quyền Accessibility, XKeyIM vẫn hoạt động bình thường cho việc gõ tiếng Việt. Quyền này chỉ cần thiết để đảm bảo các phím tắt như Ctrl+C hoạt động đúng khi đang có văn bản đang soạn (marked text).
Phím hoàn tác: XKeyIM sử dụng phím ESC làm phím hoàn tác mặc định (không thể tùy chỉnh do hạn chế của Input Method Kit). Bấm ESC khi đang gõ từ có dấu tiếng Việt sẽ hoàn tác về dạng không dấu.
Xem hướng dẫn chi tiết tại XKeyIM/README.md
XKey/
├── Shared/ # Shared code between XKey and XKeyIM
│ ├── SharedSettings.swift
│ ├── AppBehaviorDetector.swift
│ ├── DebugLogger.swift
│ └── TranslationLanguage.swift
├── XKey/
│ ├── App/ # Entry point, AppDelegate
│ ├── Core/ # Core engine
│ │ ├── Engine/ # Vietnamese input engine (VNEngine.swift, etc.)
│ │ ├── Models/ # Data models (Preferences, VNCharacter, etc.)
│ │ └── Translation/ # Translation service with multiple providers
│ ├── EventHandling/ # Keyboard event handling, EventTap
│ ├── InputMethod/ # Input source management
│ ├── UI/ # SwiftUI views and settings sections
│ └── Utilities/ # Helper utilities
├── XKeyIM/ # Input Method Kit bundle
│ ├── Info.plist # IMKit configuration
│ ├── main.swift # Entry point
│ └── XKeyIMController.swift
├── XKeyTests/ # Unit tests
├── Release/ # Build output
└── build_release.sh # Build script
Script build_release.sh hỗ trợ nhiều options để customize build process:
# Build với code signing + DMG (mặc định)
./build_release.sh
# Build không code signing
ENABLE_CODESIGN=false ./build_release.sh
# Build không XKeyIM
ENABLE_XKEYIM=false ./build_release.sh
# Full release: Notarization + Auto GitHub Release
ENABLE_NOTARIZE=true ./build_release.sh
# Tạo GitHub Release tự động
ENABLE_GITHUB_RELEASE=true ./build_release.shScript hỗ trợ tự động tạo GitHub Release khi build hoàn thành:
Yêu cầu:
- GitHub CLI (
gh) đã cài đặt:brew install gh - Đã đăng nhập:
gh auth login
Tính năng:
- ✅ Tự động đọc version từ
Info.plist - ✅ Tạo tag
v{version}và release trên GitHub - ✅ Upload
XKey.dmgvàsignature.txt(cho Sparkle auto-update) - ✅ Tự động generate release notes từ git commits
- ✅ Trigger GitHub Actions để generate appcast
Custom Release Notes:
Tạo file .release_notes.md trong thư mục gốc để sử dụng release notes tùy chỉnh thay vì auto-generate.
Sử dụng:
# Cách 1: Enable thủ công
ENABLE_GITHUB_RELEASE=true ./build_release.sh
# Cách 2: Tự động khi notarize (full release)
ENABLE_NOTARIZE=true ./build_release.sh
# → Tự động enable GitHub Release| Công nghệ | Mục đích |
|---|---|
| Swift Native | 100% Swift code, tối ưu cho macOS |
| SwiftUI | Giao diện người dùng hiện đại |
| Input Method Kit | Native input method support (XKeyIM) |
| Core Graphics Events | Keyboard event handling và injection |
| Accessibility API | Focus detection với AXObserver |
| Sparkle | Auto-update framework |
XKey sử dụng Dual Storage System để đảm bảo settings không bao giờ bị mất:
-
Primary Storage: App Group UserDefaults (
group.com.codetay.inputmethod.XKey)- Chia sẻ settings giữa XKey và XKeyIM
- Cho phép cả 2 apps sync cài đặt real-time
-
Backup Storage: UserDefaults.standard
- Tự động backup mỗi khi settings thay đổi
- Tự động restore nếu App Group container bị reset
Lợi ích:
- ✅ Settings được giữ nguyên khi update version mới
- ✅ Tự động migrate từ phiên bản cũ
- ✅ Backup an toàn, không lo mất cài đặt
- ✅ Đồng bộ giữa XKey và XKeyIM
XKey được phát triển dựa trên:
- OpenKey: Bộ gõ tiếng Việt mã nguồn mở
- Unikey: Bộ gõ tiếng Việt phổ biến
Dự án được phát hành dưới giấy phép MIT. Xem file LICENSE để biết thêm chi tiết.
- Issues: GitHub Issues
- Discussions: GitHub Discussions
⭐ Nếu bạn thấy hữu ích, hãy cho dự án một star!