Skip to content

Releases: ptrinh/viettelex

VietTelex 1.4.23

Choose a tag to compare

@ptrinh ptrinh released this 30 Jul 16:21

Fix Google Docs, ⌘-Tab, và status trung thực

Sửa lỗi

  • Google Docs: gõ tiếng Việt ra đúng chữ (hết "Quoocs" → "Quoôcốc", hết ⌫ không xóa được) — field Docs giờ tự nhận diện và dùng marked text.
  • ⌘-Tab: giữ ⌘ bấm Tab lâu không còn bị tự mở app đang trỏ (health probe không post khi đang giữ ⌘/⌃/⌥).
  • Chrome: composer web nằm sâu (kiểu claude.ai) hết bị nhầm thành thanh địa chỉ → hết mất dấu; máy mà Chrome không cho đọc AX qua system-wide giờ tự fallback đọc qua app.
  • Cài đặt: mở lần đầu hiện ngay, không cần bấm 2 lần.

Chẩn đoán tốt hơn

  • Menu status hết báo "OK" khi bộ gõ đang tự tạm dừng — có trạng thái riêng "⚠️ Bộ gõ tự tạm dừng — bấm để chạy lại".
  • Debug log giữ ~3 phút gõ (thay vì ~35 giây) và đủ dữ kiện để bắt lỗi "mất dấu".
  • Thêm 2 kênh Warp (dev/beta, preview) vào rule mặc định.

sha256 (app.zip): 0e16fd16108fe7e79cfa739c1960c366d1c208482322df39144143626c47d589

VietTelex 1.4.22

Choose a tag to compare

@ptrinh ptrinh released this 29 Jul 04:52

Đợt audit lớn: perf gõ phím, fix overflow, UX Settings

Sửa lỗi

  • Từ dài quá 32 ký tự: ⌫ không còn xoá sạch phần tràn rồi chết; app marked-text không còn nuốt ký tự thứ 33+.
  • Engine: dấu ở coda -k xử lý nhất quán với -t/-p/-c (bakf → bak); quyết định giữ/trả từ ở boundary hết sai sau spell-check freeze; bật/tắt kiểm tra chính tả giữa từ có hiệu lực ngay.

Hiệu năng

  • Hết spike ~10-15ms mỗi 5 giây trên đường gõ phím (kiểm tra quyền Trợ năng chuyển sang refresh nền).
  • Bỏ 7 lượt đọc UserDefaults mỗi phím; mở Settings không còn làm gõ giật (memoize tên app).
  • Watchdog nghỉ khi máy idle; binary nhỏ hơn ~16KB.

Giao diện

  • Banner cảnh báo thiếu quyền Trợ năng ngay tab Chung + nút mở System Settings.
  • Thông báo bản mới qua Notification Center thay vì hộp thoại chen ngang lúc đang gõ.
  • Menu hiện version; chú thích rõ cho Auto-restore và các toggle Thử Nghiệm; sửa đổi tên shortcut không còn tạo bản trùng; hỗ trợ VoiceOver cho các nút icon.

sha256 (app.zip): 3e465cc6c914a69165f6168382ae14a10de9789646b28eef145d5f721745405f

VietTelex 1.4.21

Choose a tag to compare

@ptrinh ptrinh released this 28 Jul 05:01

Bản stable. Hai lỗi ảnh hưởng trực tiếp lúc gõ.

🐛 Bấm vào ô nhập trên trình duyệt bị "bôi đen", gõ chỉ thay được 1 ký tự

Đang gõ ở một app (ví dụ Terminal), bấm sang ô nhập trên trình duyệt → chữ bị bôi đen, gõ chỉ thay chỗ đó chứ không nhập thêm được; phải click sang app khác rồi quay lại mới bình thường.

VietTelex tự dò từng ô để chọn cách gõ: ô địa chỉ thì chọn-ghi-đè, nội dung trang thì gõ trực tiếp. Nhưng kết quả dò không được xoá khi bạn đổi app hoặc đổi ô — nên nó dùng kết quả của ô trước đó cho ô mới. Và khi chưa dò ra, mặc định lại là chọn-ghi-đè: trong ô nội dung trang, cách này bấm Shift+← chọn chữ rồi ghi đè → đúng hiện tượng bôi đen, chỉ thay được một ký tự. Click ra rồi vào lại thì phép dò kịp chạy nên hết.

Nay kết quả dò được xoá ngay khi đổi app/đổi ô, và khi chưa biết thì mặc định gõ trực tiếp — mang nhầm chọn-ghi-đè vào ô nội dung trang là hỏng hẳn, còn gõ trực tiếp trong một nhịp chờ dò xong thì vô hại.

🐛 Mở Cài đặt lâu làm gõ bị giật

Bảng cơ chế gõ dò khoảng 50 ứng dụng xem có cài hay không, mỗi lượt là một lệnh gọi hệ thống — và nó chạy lại mỗi lần có cửa sổ nào được focus, tức mỗi lần bạn chuyển qua lại giữa Cài đặt và app đang thử. Cửa sổ Cài đặt nằm chung tiến trình với bộ gõ, đúng luồng xử lý phím, nên gõ bị giật; đóng Cài đặt thì hết.

Nay kết quả dò được ghi nhớ (ứng dụng không tự cài/xoá khi cửa sổ đang mở) và bảng chỉ dựng lại tối đa 1 lần/giây.

183 engine tests + 43 app tests.


Cài: tải VietTelex-1.4.21.pkg → double-click. Homebrew: brew upgrade --cask viettelex. Hoặc trong app: Cài đặt → Giới thiệu → Kiểm tra cập nhật (tự tải + tự cài).

VietTelex 1.4.20

Choose a tag to compare

@ptrinh ptrinh released this 28 Jul 03:16

Bản stable, sửa lỗi gõ trong Google Sheets (#31).

🐛 Google Sheets: phải double-click vào ô mới nhập được

Mở sheet mới, click một lần vào ô rồi gõ → không có gì hiện ra, phải double-click mới nhập được.

Nguyên nhân: VietTelex kiểm tra lại xem ô đang gõ có nhận "chỉnh sửa trực tiếp" hay không, và với ô của Sheets nó kết luận sai là không nhận, rồi chuyển sang chế độ dự phòng (gạch chân). Nhưng một ô Sheets đang được chọn mà chưa ở chế độ nhập thì bỏ qua chế độ đó — nên chữ gõ ra biến mất, tới khi double-click (lúc đó ô mới thật sự vào chế độ nhập).

Vì sao kết luận sai: Chrome trả lời hai đằng khác nhau về cùng một lần chỉnh sửa — vị trí con trỏ nói "đã ghi đúng chỗ", còn phần đọc lại nội dung thì trả về dữ liệu cũ (cache của Chromium chưa kịp cập nhật). Bản cũ tin phần đọc lại và hạ chế độ. Nay khi hai tín hiệu của cùng một app mâu thuẫn nhau, VietTelex coi là "chưa biết" và chờ Accessibility phân xử, chứ không hạ chế độ giữa lúc đang gõ. Cùng lúc, một con trỏ nằm bên trái vị trí đúng cũng không còn bị hiểu là "app không nhận" — về mặt số học nó không thể là như vậy.

Kiểm chứng: trên đúng log của người báo lỗi, Accessibility xác nhận mọi lần chỉnh sửa đều đã vào đúng chỗ — tức ô đó vốn hoàn toàn bình thường, chỉ bị chẩn đoán oan.

🔧 Khác

Cổng kiểm tra hiệu năng trong CI giờ đo lại 3 lần trong 3 tiến trình riêng thay vì fail ngay khi máy chạy CI bị chậm nhất thời (ngưỡng giữ nguyên, không nới).

183 engine tests + 43 app tests.


Cài: tải VietTelex-1.4.20.pkg → double-click. Homebrew: brew upgrade --cask viettelex. Hoặc trong app: Cài đặt → Giới thiệu → Kiểm tra cập nhật (tự tải + tự cài).

VietTelex 1.4.19

Choose a tag to compare

@ptrinh ptrinh released this 27 Jul 14:45

Bản stable. Nên cập nhật ngay nếu bạn gõ tiếng Việt trong browser.

🔒 Không còn "chèn thêm ký tự lạ" khi điền mật khẩu

Báo lỗi: điền password thấy có 1–2 ký tự lạ được thêm vào.

VietTelex vốn chỉ dựa vào IsSecureEventInputEnabled() để biết đang ở ô mật khẩu — nhưng cờ đó chỉ đúng với app tự bật secure input (cửa sổ đăng nhập, Keychain Access, sudo trong terminal, ô mật khẩu native). Một <input type="password"> trên web thì không bật nó, nên bộ gõ vẫn xử lý bình thường trong form đăng nhập của browser, và:

  • chiến lược dùng cho address bar chèn một ký tự vô hình (U+202F) để huỷ gợi ý tự động rồi xoá đi — ô mật khẩu có xử lý JS riêng thì ký tự đó sống sót;
  • chiến lược chọn-ghi-đè bấm Shift+← rồi ghi lên — trong ô mật khẩu là ăn/thêm ký tự.

Nay ô mật khẩu được nhận diện qua Accessibility (AXSecureTextField) và cả hai đường bàn phím đều cho phím đi thẳng vào app — không xử lý, không chèn gì. Áp dụng cho cả ô mật khẩu web và native.

Kèm hai lỗi cùng gốc:

  • Không còn gửi phím kiểm tra sức khoẻ (F20) vào ô mật khẩu. Khi secure input đang bật, bộ gõ không nhận lại được phím nó tự gửi, nên phím đó rơi vào app đang focus — đây là nguồn ký tự lạ ở các ô mật khẩu native. Đồng thời bộ theo dõi không còn hiểu nhầm việc này thành "quyền Trợ năng bị kẹt" rồi tự tắt tap đang hoạt động bình thường.
  • Phím kiểm tra giờ gửi đủ cặp nhấn/nhả (trước chỉ có nhấn, làm một số app tưởng phím đang được giữ).

183 engine tests + 43 app tests.


Cài: tải VietTelex-1.4.19.pkg → double-click. Homebrew: brew upgrade --cask viettelex. Hoặc trong app: Cài đặt → Giới thiệu → Kiểm tra cập nhật (tự tải và tự cài).

VietTelex 1.4.18

Choose a tag to compare

@ptrinh ptrinh released this 27 Jul 14:35

Bản stable, sửa tiếp các báo lỗi từ 1.4.17.

🐛 Bấm ⌫ trong ô web bị xoá 2 ký tự rồi tắt hiển thị

Ô tìm kiếm kiểu React (báo lỗi thực tế: Chrome Web Store) tự vẽ lại hoặc đang giữ selection của autocomplete, trong khi VietTelex ghi lại từ theo cửa sổ nó nhớ → ⌫ ăn thêm một ký tự, và mọi chữ gõ sau đó không hiện gì cho tới khi bấm dấu cách. Nay chỉ ghi lại khi con trỏ của app còn khớp đúng cửa sổ đó; lệch thì trả phím cho app xử lý.

🐛 "Quyền Trợ năng bị kẹt" — giờ sửa bằng một nút

Trước đây bạn phải tự vào System Settings, bấm − xoá VietTelex rồi + thêm lại. Nay dialog có nút “Sửa tự động”: VietTelex tự xoá mục bị kẹt của chính nó rồi xin lại quyền, bạn chỉ đồng ý một lần.

Vì sao trạng thái này tồn tại: quyền Trợ năng được lưu kèm chữ ký của app lúc được cấp; macOS đối chiếu chữ ký khi app xin event tap, nhưng cái tick trong Settings chỉ hiển thị theo tên app nên vẫn sáng dù quyền đã hết giá trị. Kèm theo, AXIsProcessTrusted() vẫn báo "được phép" trong trạng thái đó — nên bản này phát hiện bằng CGPreflightPostEventAccess() và tự đánh dấu ngay khi hỏng, không chờ tới lúc bạn gõ vào Terminal/Chrome mới biết.

Và chặn luôn 3 nguyên nhân gốc:

  • Bản build không phải Developer ID của VietTelex không được phép xin quyền nữa (một bản ad-hoc xin quyền sẽ ghim chữ ký của nó, làm mọi bản chính thức sau đó bị từ chối vĩnh viễn).
  • Tự cập nhật: tháo event tap trước khi thay bundle (đúng hướng dẫn của Apple), không thay file dưới chân tiến trình đang chạy.
  • Installer .pkg xoá bundle cũ trước khi cài: Installer vốn merge payload, file của bản cũ còn sót lại phá code seal → macOS từ chối tap dù tick vẫn bật.
  • Thêm kiểm tra tự động khi đóng gói: nếu Designated Requirement của bản mới lệch khỏi dạng theo team, quá trình build dừng lại — đổi nó là làm kẹt quyền của tất cả người dùng hiện tại.

✨ Khác

  • Gõ thêm dấu cho từ ngay trước con trỏ (Thử nghiệm): trước bị tắt ở toàn bộ browser, nay chỉ tắt ở address bar — nên gõ trong nội dung trang (comment GitHub, Google Docs…) dùng được. Bật ở Cài đặt → Thử nghiệm.
  • Nhật ký gỡ lỗi ghi thêm chuỗi role của ô đang gõ (field-scan) — dùng để chẩn đoán các ca "chữ nhảy" trong browser.

183 engine tests + 42 app tests. Latency không đổi.


Cài: tải VietTelex-1.4.18.pkg → double-click. Homebrew: brew upgrade --cask viettelex.

VietTelex 1.4.17

Choose a tag to compare

@ptrinh ptrinh released this 27 Jul 07:22

Bản stable. Auto-update (nếu bạn đã bật Kiểm tra hàng tuần) sẽ nhắc bản này; hoặc vào Cài đặt → Giới thiệu → Kiểm tra cập nhật — nút giờ tự tải và tự cài, không phải tải tay nữa.

🐛 VNI dùng được thật (#28)

  • Gõ dấu kiểu VNI không có tác dụng: cả hai đường bàn phím chỉ coi chữ cái là phím của từ, nên mọi chữ số bị coi là dấu cách kết thúc từ → phím 1 của a1 không bao giờ tới engine. Nay trong chế độ VNI chữ số thuộc về từ (Telex vẫn như cũ).
  • Crash khi trong từ có chữ số (mp3, 2020, html5, ipv4): bộ kiểm tra chính tả map chữ số ra ngoài phạm vi bảng luật → IME chết giữa lúc gõ, hoặc âm thầm trả kết quả kiểm tra sai. Chặn ở gốc; tìm ra bằng fuzz 200.000 ca.

Bật VNI: Cài đặt → Thử nghiệm → Gõ kiểu VNI, rồi flip input source (🌐) một lần.
a1→á · a61→ấ · tie61ng→tiếng · Vie65t→Việt · nguoi72→người · d9uo7c5→được — và mp3/2020/html5/ipv4 giữ nguyên.

🐛 Gõ đúng tiếng Việt

  • quyts → quýt (trước ra quyts), cùng quỳnh, quých, quỵt: với từ qu-, chữ u của glide bị gộp hết vào onset nên rime còn lại yt không có trong bảng luật → từ bị coi là không hợp lệ và bị hoàn về chuỗi phím. (#29)
  • giếc / giệc (cá giếc): cùng họ lỗi trên, bị chia thành gi + êc mà không bao giờ thử lại thành g + iêc. Phát hiện nhờ bộ test mới quét toàn bộ 25.000 tổ hợp onset × rime × tone lấy trực tiếp từ bảng luật.

🐛 Gõ trong browser & ứng dụng

  • Zen Browser (và Firefox Dev/Nightly, LibreWolf, Waterfox, Chrome Dev, Edge Dev/Canary, Opera GX, DuckDuckGo, Orion, Yandex, SigmaOS) nay được nhận là browser: address bar dùng đúng chiến lược chọn-ghi-đè, không còn nhảy chữ khi gõ ở new tab.
  • Bấm ⌫ trong address bar không còn nháy một ký tự lạ rồi mới xoá.
  • Jira / các editor kiểu ProseMirror: chữ không còn "tự bôi đen rồi xoá" giữa lúc gõ. Nguyên nhân: app báo vị trí con trỏ ở trước điểm chỉnh sửa (không thể là kết quả của thao tác nào) và VietTelex hiểu nhầm là "app không nhận in-place" → hạ xuống chế độ gạch chân ngay giữa từ. Nay tín hiệu vô nghĩa đó không còn được tính.
  • Bật Nhật ký gỡ lỗi không còn làm gõ dấu chậm: một thí nghiệm chỉ-để-ghi-log đang chạy đồng bộ ngay trong đường xử lý phím với 2 lần đọc Accessibility (mỗi lần có thể chờ tới 50ms). Nay chạy nền + lấy mẫu.

✨ Khôi phục từ tiếng Anh chính xác hơn

Bộ regression 9.091 ca: 100% từ tiếng Việt đúng dấu, 98,9% (từ 93,4%) từ tiếng Anh bị biến dạng được khôi phục. Chi tiết + phần chưa phủ: docs/REGRESSION.md

  • Từ bị cancel vươn ngược ăn mất chữ nay khôi phục đúng: hosts, asks, discs, buses
  • Escape gõ tay được tôn trọng: tessted→tested, Deffault→Default, gooogle→google, DDDR→DDR.
  • Từ điển va chạm 438 → 757 từ (office, possess, message, ghost, nose, tariff…), vẫn giữ protect-list tiếng Việt (ướt, won=ươn, zoo=zô… tiếng Việt luôn thắng).
  • that's great wow ra wow thay vì : thán từ (wow, ok, hi, sorry, thanks…) được khôi phục khi đang trong câu tiếng Anh nhưng vẫn không mở mạch tiếng Anh — ok cám ơn, wow đẹp quá vẫn nguyên tiếng Việt. (Cần bật Quyết định theo ngữ cảnh.)

✨ Khác

  • Cài đặt → Giới thiệu → Kiểm tra cập nhật nay tự tải + kiểm chữ ký + tự cài (không cần quyền admin, không cần Sparkle).
  • Gõ thêm dấu cho từ ngay trước con trỏ (Thử nghiệm, tắt sẵn): đặt con trỏ sau toan rồi gõ stoán. Chỉ chạy ở app đã được xác nhận gõ trực tiếp tốt, không chạy ở address bar, và chỉ khi dịch ngược chữ trên màn hình ra chuỗi phím tái tạo được đúng từng ký tự — nếu không, nó không đụng gì vào text của bạn.
  • Nhật ký gỡ lỗi ghi thêm vni / quick / ctxEnglish / reEdit và lý do mỗi lần bỏ composition giữa từ.

Latency không đổi: 0,136 µs/phím. 183 engine tests + 41 app tests.


Cài: tải VietTelex-1.4.17.pkg → double-click. Homebrew: brew upgrade --cask viettelex.

VietTelex 1.4.16 (thử nghiệm)

Pre-release

Choose a tag to compare

@ptrinh ptrinh released this 27 Jul 04:06

Bản thử nghiệm (pre-release) — chưa promote lên kênh stable, app sẽ không tự nhắc cập nhật. Cài tay để test giúp mình nha.

🐛 Sửa VNI (issue #28) — quan trọng

  • Gõ dấu kiểu VNI không có tác dụng trong app. Cả hai đường bàn phím (IMKit + terminal tap) chỉ coi chữ cái là phím của từ, nên mọi chữ số bị coi là dấu cách kết thúc từ → phím 1 của a1 không bao giờ tới engine. Giờ trong chế độ VNI chữ số thuộc về từ (Telex vẫn giữ nguyên: chữ số kết thúc từ).
  • Crash khi trong từ có chữ số (mp3, 2020, html5, ipv4): bộ kiểm tra chính tả map chữ số ra ngoài phạm vi bảng luật → IME chết giữa lúc gõ, hoặc trả về kết quả kiểm tra sai một cách âm thầm. Đã chặn ở gốc; tìm ra bằng fuzz 200k ca (chữ + số + ⌫ × các cài đặt).

Test VNI: Cài đặt → Thử nghiệm → bật Gõ kiểu VNI, rồi flip input source (🌐) một lần.
a1→á · a61→ấ · tie61ng→tiếng · Vie65t→Việt · nguoi72→người · d9uo7c5→được — và mp3 / 2020 / html5 / ipv4 phải giữ nguyên.

✨ Khôi phục từ tiếng Anh chính xác hơn

Bộ regression 9.091 ca: 100% từ tiếng Việt đúng dấu, 98,9% từ tiếng Anh bị biến dạng được khôi phục (93,4% → 98,9%). Chi tiết: docs/REGRESSION.md

  • Từ tiếng Anh bị cancel vươn ngược ăn mất chữ giờ khôi phục đúng: hosts, asks, discs, buses
  • Escape gõ tay được tôn trọng đúng như trước: tessted→tested, Deffault→Default, gooogle→google, DDDR→DDR, hoass→hoas.
  • Từ điển va chạm mở rộng 438 → 757 từ (office, possess, message, ghost, nose, trips, tariff…), sinh tự động + protect-list tiếng Việt (ướt, lẩu, won=ươn, zoo=zô… tiếng Việt luôn thắng).

✨ Thán từ trong mạch tiếng Anh

that's great wow giờ ra wow thay vì . Thán từ / từ chat (wow, ok, hi, sorry, thanks…) được khôi phục khi đang trong câu tiếng Anh, nhưng vẫn không mở mạch tiếng Anh — nên ok cám ơn, wow đẹp quá vẫn nguyên tiếng Việt. (Cần bật Quyết định theo ngữ cảnh trong Thử nghiệm.)

🔧 Khác

  • Nhật ký gỡ lỗi ghi thêm vni / quick / ctxEnglish (log báo lỗi trước đây thiếu, không thấy được setting nào đang bật).
  • Latency không đổi: 0,138 µs/phím (BENCHMARKS.md).
  • 174 engine tests + 39 app tests.

Cài: tải VietTelex-1.4.16.pkg → double-click. Hoặc Homebrew (tap sẽ bump sau khi bản này ổn định).

v1.4.15

Choose a tag to compare

@ptrinh ptrinh released this 24 Jul 17:51

Tính năng mới

  • Gõ kiểu VNI (thử nghiệm) — bật ở Settings → Thử nghiệm → Kiểu gõ. Gõ dấu bằng chữ số: 1-5 = sắc/huyền/hỏi/ngã/nặng, 6 = â/ê/ô, 7 = ơ/ư, 8 = ă, 9 = đ, 0 = bỏ dấu. Chữ cái giữ nguyên. Số chỉ thành dấu khi áp được (thanh cần nguyên âm, mũ cần chữ đích), còn lại là số bình thường — nên giữ "Kiểm tra chính tả khi gõ" bật để mp3/html5 không bị biến thành dấu.
  • Mặc định TẮT; khi tắt, đường gõ Telex hiện tại không đổi.

Cài đặt

  • Homebrew: brew upgrade viettelex
  • Hoặc tải .pkg / .app.zip bên dưới (đã notarize).

v1.4.14

Choose a tag to compare

@ptrinh ptrinh released this 24 Jul 15:56

Sửa lỗi

  • Chrome/Chromium omnibox: gõ chữ có biến đổi (vd google) không còn ra sai (gooogle/goôgle). Thanh địa chỉ có gợi ý autocomplete inline (đoạn gợi ý đang được chọn ngay sau con trỏ) làm lệch cả Shift+← lẫn Backspace. Nay dùng vũ điệu U+202F (chèn ký tự huỷ gợi ý → xoá → gõ lại) như MS Office. Áp dụng cho omnibox mọi trình duyệt Chromium/Firefox/Safari; Spotlight và IDE pin .selection giữ nguyên.

Kèm các sửa lỗi trong 1.4.13 (khôi phục minimal-edit chống nhân đôi ký tự đầu; tự cập nhật thay bundle trọn gói tránh kẹt quyền Trợ năng).

Cài đặt

  • Homebrew: brew upgrade viettelex
  • Hoặc tải .pkg / .app.zip bên dưới (đã notarize).