Tới nội dung
oreokey

Changelog

Mọi thay đổi đáng chú ý của OreoKey ghi ở đây. Theo định dạng Keep a Changelog, phiên bản theo SemVer.

[0.10.1] - 2026-10-16

Đã sửa

  • Spotlight trên macOS 27 (Siri AI) không còn nhảy chữ: ô tìm kiếm giờ thuộc process “Siri AI” nên hồ sơ Spotlight cũ không khớp, backspace bị ghost text nuốt. Thêm hồ sơ proc:Siri AI / com.apple.campo dùng chiến thuật chọn ngược + gõ đè như Spotlight.
  • Thêm hồ sơ tương thích cho System Settings (bơm phím chậm): ô tìm kiếm và các ô nhập trong System Settings không còn dính/nháy chữ.

[0.10.0] - 2026-10-12

Đã thêm

  • Gõ tắt theo kiểu viết hoa: cụm tắt khớp không phân biệt hoa thường và trả kết quả theo cách gõ — với ko → không: ko ra không, Ko ra Không, KO ra KHÔNG. Trước đây Ko/KO không bung.
  • Backspace qua dấu cách nối lại từ trước: chốt từ rồi mới nhớ ra quên dấu, xóa lùi hết dấu cách (hoặc dấu câu) là gõ thanh tiếp được (go go go ⌫⌫⌫ x → go gõ), không phải xóa cả từ gõ lại.
  • Tự tạm tắt khi sang bàn phím Nhật/Hàn/Trung: chọn một input method khác trong menu bàn phím của macOS là OreoKey tạm tắt (không còn hai bộ gõ xử lý chồng), về ABC là trạng thái cũ hiện lại; trạng thái bật/tắt và bộ nhớ theo app của bạn không bị ghi đè.

[0.9.0] - 2026-10-12

Đã thêm

  • Chuyển mã Unicode ↔ VNI-Windows ↔ TCVN3 trong Cài đặt (tab mới).
  • Viết hoa đầu câu (Cài đặt → Chung, mặc định tắt): chữ đầu sau . ! ? + khoảng trắng hoặc sau Enter tự viết hoa.
  • Esc hoàn về phím gốc (Cài đặt → Chung, mặc định tắt): nhấn Esc khi đang gõ dở để trả từ về đúng các phím đã bấm.
  • Cài qua Homebrew: brew install --cask oreosolutions/tap/oreokey.

[0.8.0] - 2026-10-12

Đã sửa

  • Cài đặt không còn ghi đè trạng thái Việt/Anh: mở cửa sổ Cài đặt rồi bật tắt tiếng Việt bằng phím tắt hoặc menu bar, sau đó đổi một tùy chọn bất kỳ trong Cài đặt từng đẩy lại trạng thái cũ. Cửa sổ nay nạp lại cài đặt mỗi khi được mở, và lõi giữ nguyên trạng thái bật/tắt đang chạy.
  • Ô ghi phím tắt từ chối tổ hợp trùng phím tắt của app: chỉ ⌘ (⌘C, ⌘V, ⌘Q…) hoặc không có phím bổ trợ sẽ không được nhận nữa; cần có ⌃ hoặc ⌥ (có thể kèm ⇧/⌘). Ô ghi hiện gợi ý ngắn khi từ chối.
  • VNI: 7 nay móc cả cụm uo khi gõ sau nguyên âm cuối (nguoi72 → người, ruou75 → rượu, tuoi7 → tươi).
  • Chế độ chính tả Thường / Thoải mái: gõ lặp phím dấu để hủy (ddd, a11, a66, d99, u77…) nay hủy dấu đúng như chế độ Nghiêm ngặt thay vì giữ nguyên dấu sai.
  • Gõ được thuở, huơ, khuơ (Telex và VNI).
  • File cài đặt hỏng một trường không còn làm mất toàn bộ cài đặt; các trường còn hợp lệ được giữ, bản gốc lưu thành settings.json.bad.
  • Xóa lùi không còn làm mất dấu từ đang gõ: gõ dấu sau chữ cuối rồi Backspace (vieetj ⌫) từng khiến phím sau thành chữ thường (s → “việs”); nay ra “viế”. Nửa từ không dựng lại được (kiểu cũ “toá”) được để nguyên, gõ tắt và che từ không bung trên nửa từ đó.
  • VNI: gõ lặp 7 sau “uơ” nay hủy móc như Telex (thuo77 → thuo7).
  • Không còn mất chữ khi app phản hồi chậm: nếu lệnh sửa chữ qua Accessibility quá hạn chờ, OreoKey bỏ qua phím đó thay vì bơm phím xóa, tránh xóa nhầm chữ thật khi app áp lệnh muộn. App bị treo không còn làm chậm từng phím gõ.
  • Thêm hồ sơ tương thích cho Zalo, Lark, Claude, 1Password, web app của Chrome và các kênh beta/dev/canary của Chrome, Edge, Brave (hết nháy vùng chọn).
  • Bật tiếng Việt từ menu trong app bị loại trừ nay chỉ bật cho app đó, không còn âm thầm bật cho mọi app khác.
  • Cửa sổ Cài đặt không còn ghi đè kiểu gõ vừa đổi từ menu bar.
  • Phím tắt bật/tắt không còn đôi khi tự đảo lại ngay sau khi bấm.
  • File cài đặt sai mã hóa (UTF-16, có BOM, ký tự hỏng) không còn bị thay bằng mặc định; phần đọc được được giữ, bản gốc lưu thành settings.json.bad.
  • Treo khi app đích không phản hồi: các lời gọi Accessibility nay có thời hạn chờ, nên một app bị treo không còn làm macOS tắt bộ gõ.
  • Khởi động: nếu đã có quyền Trợ năng mà bộ gõ vẫn không khởi động được, OreoKey báo một lần rồi tự thử lại thay vì liên tục mở lại cửa sổ hướng dẫn và giành focus. Chạy hai bản OreoKey cùng lúc không còn xảy ra, và hệ thống chỉ dùng bàn phím Latin có sẵn khi ABC chưa được bật.

[0.7.9] - 2026-10-09

Đã đổi

  • Chrome, Edge, Brave, Arc chuyển sang bơm phím nhanh: trước đây các trình duyệt Chromium sửa chữ qua Accessibility nên mỗi phím dấu thấy vùng chọn lóe lên một khung hình (Chromium áp lệnh chọn vùng và ghi đè bất đồng bộ, khác app native). Nay dùng cùng cơ chế với VS Code, Slack, Discord: không còn nháy bôi đen. Safari giữ nguyên vì WebKit áp lệnh đồng bộ.

[0.7.8] - 2026-10-09

Đã sửa

  • Mất một chữ khi gõ dấu trong thanh địa chỉ Chrome/Safari có gợi ý: gõ thuowngr khi thanh địa chỉ đang bôi đen phần gợi ý tự hoàn thành nay ra thưởng thay vì thươởng. Trước đây OreoKey gõ một dấu cách để ghi đè phần gợi ý rồi xóa lại, nhưng dấu cách là thao tác chèn nên trình duyệt gợi ý lại ngay và backspace kế tiếp xóa gợi ý mới thay vì dấu cách; kết quả thiếu một backspace thật. Khi đọc được vùng chọn, OreoKey giờ chỉ gửi một backspace (xóa đúng phần gợi ý, không kích gợi ý lại). Lỗi chỉ hiện khi “từ đang gõ + dấu cách” trùng một gợi ý lịch sử nên trước đây có vẻ ngẫu nhiên.

[0.7.7] - 2026-10-06

Đã sửa

  • Hủy móc khi w không còn chỗ áp (Telex): gõ w sau hưa nay gỡ móc thành huaw. Trước đây nguyên âm cuối (a) không mang dấu nên nhánh hủy bỏ qua, w ép trăng lên a thành hưă bất hợp lệ và cả từ bị giữ nguyên (hưaw). Khi không ứng viên nào ra vần hợp lệ, w giờ hủy móc/trăng đang có thay vì ép dấu. Chiều áp dụng không đổi: uwowng vẫn ra ương.

[0.7.6] - 2026-10-01

Đã sửa

  • Hủy móc/trăng sau phụ âm cuối (Telex): gõ w sau lơn, lăn, tưn nay gỡ dấu thành lonw, lanw, tunw như gõ w lặp ngay sau nguyên âm. Trước đây chỉ chữ cuối cùng được xét nên móc/trăng đứng trước phụ âm cuối không hủy được: w sinh ra ư thừa rồi cả từ bị giữ nguyên (lonww → lơnw). Chiều áp dụng không đổi: uwowng vẫn ra ương.

[0.7.5] - 2026-09-23

Đã sửa

  • Gõ thanh trước, dấu mũ sau ở mức Thường/Thoải mái (hồi quy từ 0.7.1): các từ bắt đầu bằng đ như điện, điều, điểm, đuổi, đều bị kẹt khi gõ thanh sớm rồi mới gõ mũ (ddijeen → địeen, VNI d9e2u6 → đèu6). Nguyên nhân: tính năng giữ âm tiết hoàn chỉnh (0.7.1) đóng băng đị ngay khi gõ thêm nguyên âm, dù vần ie vẫn còn hoàn thiện được thành iê. Nay chỉ đóng băng khi phần mới chắc chắn không thành âm tiết; các đuôi kéo dài đôu, yêuu, đượcccc giữ nguyên hành vi. Sweep toàn từ điển (8.581 âm tiết, Telex + VNI): 4.337 → 1.662 lỗi, không có lỗi mới.
  • Gõ w sau cụm ua (Telex): suaw nay ra sưa thay vì suă — vần không tồn tại, từng khiến cả từ hiện nguyên phím gốc. Gõ suawr hay suraw đều ra sửa, không còn bắt buộc thứ tự suwra (issue #8). Khi kết quả hợp lệ, w vẫn ưu tiên nguyên âm gần cuối như trước (khoawn → khoăn).

[0.7.4] - 2026-07-27

Đã sửa

  • Kéo dài nguyên âm sau chữ có thanh ở mức Thường/Thoải mái: khi gõ tiếp nguyên âm lặp sau một âm tiết một nguyên âm đã có thanh, OreoKey nay giữ dấu thay vì bung lại phím Telex gốc. Ví dụ afaa → àa và afaaaaa → àaaaa. Hành vi kéo dài hiện có vẫn được giữ (yêuuuuu, đượcccc); mức Chặt không thay đổi.

[0.7.3] - 2026-07-22

Đã sửa

  • Gõ dấu trong ô tìm kiếm tab mới của Zen Browser: thêm profile mặc định cho bundle ID app.zen-browser.zen, dùng chế độ Bơm phím nhanh và xử lý vùng autocomplete như Firefox để tránh ký tự đầu bị dính (aá) khi gõ dấu.

[0.7.2] - 2026-07-22

Đã sửa

  • Hủy dấu mũ Telex ở mức Thường: phím a/e/o lặp lại nay vẫn được dùng để hủy â/ê/ô khi cần, thay vì luôn bị coi là phần đuôi kéo dài của một âm tiết đã hoàn chỉnh. Ví dụ, gõ dataaaa cho ra dataaa (một phím a được dùng để hủy mũ), trong khi yeeuuu vẫn cho ra yêuuu.

[0.7.1] - 2026-07-21

Đã sửa

  • Gõ chữ w ở đầu từ: w hoặc W nay giữ nguyên là ký tự Latin thay vì tự đổi thành ư, nên có thể gõ từ như web/Windows bình thường. Cách gõ ư vẫn là uw.

[0.7.0] - 2026-07-21

Đã đổi

  • Gõ tiếp sau âm tiết đã hoàn chỉnh ở mức Thường/Thoải mái: khi phần đầu đã là âm tiết tiếng Việt đúng, mọi ký tự nối tiếp làm cụm trở nên bất khả được giữ nguyên phía sau thay vì làm engine bung lại phím gốc. Ví dụ: đô + uuuu → đôuuuu, đông + uuuu → đônguuuu, yêu + uuuu → yêuuuuu, chào + ooooo → chàoooooo. Xóa hết phần đuôi sẽ trở lại gõ tiếng Việt bình thường; mức Chặt giữ cơ chế hủy dấu Telex cũ (gô + o → goo).

[0.6.6] - 2026-07-21

Đã sửa

  • Không còn ghi nội dung gõ vào log chẩn đoán: khi bật OREOKEY_DEBUG, log nay không lưu ký tự hay đoạn văn bản đang nhập; ô mật khẩu được nhận diện trước mọi xử lý và log. File log chuyển vào vùng dữ liệu riêng của OreoKey, chỉ người dùng hiện tại đọc được và tự giới hạn dung lượng.
  • Lưu cài đặt đồng thời không bị mất dữ liệu: thay đổi từ cửa sổ Cài đặt và hotkey bật/tắt tiếng Việt nay được tuần tự hóa với thao tác ghi đĩa, tránh đè file tạm hoặc để trạng thái đang chạy khác với file cài đặt. Nếu không ghi được, Cài đặt và menu bar hiện thông báo thay vì im lặng bỏ qua.
  • Không mất phím khi sửa qua Accessibility thất bại: chế độ tương thích chỉ dùng AX nay cho phím gốc đi qua và đồng bộ lại engine nếu app đích từ chối thay chữ, thay vì nuốt mất ký tự.
  • Khởi động/dừng bộ bắt phím ổn định hơn: các yêu cầu start/stop đồng thời được tuần tự hóa; app chờ tap cũ dọn xong trước khi tạo tap mới, tránh còn tap cũ chạy ngầm hoặc báo đã khởi động khi đang dừng.
  • Gõ tắt có emoji/ký tự ngoài BMP: chuỗi bơm vào ứng dụng nay được chia đúng theo số đơn vị UTF-16, nên không vượt giới hạn event khi macro có emoji.
  • Hồ sơ ứng dụng wildcard nhất quán: khi nhiều wildcard cùng khớp, OreoKey luôn chọn tiền tố cụ thể nhất thay vì phụ thuộc thứ tự nội bộ.

Đã đổi

  • Nhẹ hơn trên mỗi phím gõ: khi tắt debug (mặc định), callback không còn tạo chuỗi log hay giải mã Unicode chỉ để ghi log; file debug cũng được giữ mở thay vì mở/đóng theo từng sự kiện.

[0.6.5] - 2026-07-17

Đã sửa

  • Gõ thanh ngay sau qu bị kẹt nguyên văn: bấm phím thanh liền sau qu, trước nguyên âm chính — Telex qusan, VNI qu1an — trước đây khóa cứng cả từ thành phím gốc (qusan thay vì quán), gõ tiếp đúng vần cũng không hồi phục; ảnh hưởng 131 từ qu- thông dụng (quá, quán, quấy, quỳnh…). Nay ra đúng chữ ở mọi thứ tự gõ. Tìm ra nhờ sweep toàn từ điển bên dưới.

Đã thêm

  • Bộ kiểm thử sweep toàn từ điển (core/src/bin/sweep): sinh mọi cách gõ (Telex + VNI, mọi vị trí thanh/mũ/móc/trăng/đ, hai kiểu đặt thanh) cho 8.784 âm tiết và đối chiếu kết quả engine — chạy hết trong ~0,2 giây. Sau bản sửa trên, engine sạch lỗi thứ tự gõ trên toàn bộ âm tiết hợp lệ; phần lệch còn lại đều là giới hạn có chủ đích (từ mượn đa âm tiết viết liền, vần/phụ âm ngoại lai) — chi tiết trong docs/dict-sweep-report.md.
  • Micro-benchmark hot path (core/src/bin/bench): đo ns/phím các kịch bản gõ thực tế và bệnh lý làm mốc so sánh cho các lần sửa engine sau.

Đã đổi

  • Dọn engine theo review hai vòng (không đổi hành vi — sweep xác nhận giống hệt từng byte): gộp bước dựng lại từ chạy 2–3 lần mỗi phím thành 1; logic phím thanh Telex/VNI dùng chung một chỗ; bảng chuyển mã dựng một lần thay vì mỗi lượt. Gõ chuỗi dài không ngắt từ (mã hex, số seri…) nhẹ hơn ~2,5 lần nhờ chặn sớm token quá 64 ký tự — chắc chắn không phải tiếng Việt.

[0.6.4] - 2026-07-12

Đã thêm

  • Tự ghi phím tắt bật/tắt: mục “Ghi tổ hợp phím mới…” trong Cài đặt → Chung — nhấn thẳng tổ hợp muốn dùng (cần kèm ⌃/⌥/⌘, ⎋ để hủy) thay vì chỉ chọn từ danh sách có sẵn. Thêm preset ⌃⌥Space. Tổ hợp tùy chỉnh hiển thị đúng ở cả menu bar lẫn Cài đặt.

[0.6.3] - 2026-07-11

Đã đổi

  • Nút Ủng hộ trong tab Giới thiệu trỏ tới trang Ko-fi của tác giả (https://ko-fi.com/nguyenhuyquang); README thêm badge và mục Ủng hộ.

[0.6.2] - 2026-07-10

Đã thêm

  • Fix: Em không là nàng thơ Anh cũng không còn là nhạc sĩ mộng mơ Tình này nhẹ như gió Lại trĩu lên tim ta những vết hằn

[0.6.1] - 2026-07-10

Đã thêm

[0.6.0] - 2026-07-10

Đã thêm

  • Trạng thái cập nhật ngay trên sidebar Cài đặt: chân sidebar hiện tên app và phiên bản — tick xanh ✓ Mới nhất khi đang chạy bản mới nhất, cảnh báo cam ⚠ ngay khi có bản mới; bấm vào dòng đó để kiểm tra/cài đặt. Mở cửa sổ Cài đặt là app tự dò bản mới ở chế độ nền, không bật hộp thoại.
  • Nút GitHub trong tab Giới thiệu, dẫn về trang mã nguồn.
  • Tài liệu hướng dẫn: thêm docs/install.md (cài đặt, cấp quyền, gỡ bỏ) và docs/user-guide.md (bảng gõ Telex/VNI, mọi tính năng, xử lý sự cố).

Đã đổi

  • Menu bar gọn lại: hai mục “Kiểm tra bản mới…” và “Khởi động cùng máy” chuyển vào cửa sổ Cài đặt (mục Hệ thống trong tab Chung và chân sidebar); menu chỉ còn bật/tắt tiếng Việt, kiểu gõ, Cài đặt và Thoát.
  • Kiểm tra chính tả đổi sang thanh trượt 3 nấc: kéo càng cao kiểm tra càng chặt (Thoải mái → Thường → Chặt), có chấm đánh dấu từng nấc và tên mức hiện ngay cạnh — thay cho ô chọn 3 nút trước đây.

Đã sửa

  • Cửa sổ Cài đặt chồng chữ vùng tiêu đề: nội dung cuộn lên đè vào titlebar trong suốt, và toolbar tự sinh (nút thu sidebar, tiêu đề lệch cạnh nút đèn) gây xô lệch phần đầu cửa sổ. Nay titlebar hiển thị bình thường, không còn nút thừa hay chữ đè nhau.

[0.5.2] - 2026-07-10

Đã sửa

  • Gõ loose bị bung thành looose: khi từ hóa ra không phải tiếng Việt ở phím muộn (sau khi đã hủy mũ bằng ooo), văn bản khôi phục bung lại cả phím hủy đã tiêu. Nay phần gõ trước khi có dấu giữ đúng dạng đã hiển thị (loos + e → loose), phần sau giữ nguyên văn phím gõ.

[0.5.1] - 2026-07-10

Đã sửa

  • looos ra lóo dù bật kiểm tra chính tả: nhân âm oo (vốn chỉ có trong từ mượn đóng bằng c/ng như xoong, soóc) bị chấp nhận cả khi đứng cuối từ, nên lóo lọt lưới ở mức Chặt lẫn Thường; nay khôi phục đúng phím gốc. Đồng thời sửa lỗi kéo theo: gõ soóc kiểu đặt thanh sớm (sooosc) trước đây bị bung nhầm thành sốc — dấu mũ đã hủy tự quay lại. (Mức Thoải mái vẫn đặt dấu tự do theo đúng thiết kế.)

[0.5.0] - 2026-07-10

Đã thêm

  • Kiểm tra chính tả 3 mức: ô cài đặt cũ bật/tắt giờ thành 3 mức chọn — Chặt (bảo vệ tối đa từ tiếng Anh, mask, class giữ nguyên), Thường (cho gõ tắt đc, nèk mà vẫn nhận diện tiếng Anh có cụm bất khả như clear, sound), Thoải mái (luôn đặt dấu, không bao giờ khôi phục từ tiếng Anh). Mặc định là Chặt.
  • Thêm ứng dụng bằng bundle ID thủ công: mục “Nhập bundle ID…” trong Cài đặt → Ứng dụng cho phép loại trừ hoặc chỉnh chế độ tương thích cho app chưa chạy (vd Burp Suite), thay vì chỉ chọn được app đang mở.

Đã sửa

  • Nháy chữ ở một số terminal: kitty, Alacritty, WezTerm, Hyper trước đây bị nháy/dính chữ khi gõ; nay đi thẳng đường bơm phím như các terminal khác.
  • VNI đặt số thanh trước số mũ giữa từ: gõ kiểu thie16u (bấm số thanh 1 ngay sau nguyên âm rồi mới số mũ 6) trước đây bị kẹt thành thie16u; nay ra đúng thiếu. Tương tự với các từ có iê khác.
  • Nội dung cập nhật hiển thị đúng định dạng: hộp thoại “Có bản mới” của Sparkle trước đây hiện ký tự Markdown thô (###, -, dấu backtick); nay render thành tiêu đề, danh sách, chữ đậm và mã đúng cách.

[0.4.1] - 2026-07-10

Đã sửa

  • Telegram Desktop (Qt) kẹt vùng chọn, không gõ được: bản Telegram tải từ telegram.org (com.tdesktop.Telegram) nhận lệnh chọn vùng nhưng lờ lệnh thay chữ mà vẫn báo thành công, để lại vùng bôi đen kẹt và chữ cũ nguyên vẹn. Nay đã thêm hồ sơ riêng cho bản này và, sau khi ghi, OreoKey đọc lại để xác minh chữ đã thật sự thay — nếu app “nói dối” thì khôi phục con trỏ rồi rơi về bơm phím. Tự chữa cho mọi app cùng kiểu, không riêng Telegram.

[0.4.0] - 2026-07-09

Đã thêm

  • Gõ đ linh hoạt (Telex): gõ đ bằng cả dd liền kề hoặc đặt d muộn ở cuối âm tiết — did → đi, dangd → đang. Song song với “gõ mũ muộn” (nanag → nâng) và chung công tắc “Gõ dấu mũ linh hoạt”; chỉ áp khi ra âm tiết tiếng Việt hợp lệ nên từ tiếng Anh (dryad) giữ nguyên.

Đã sửa

  • Cặp ươ (Telex) khi còn nguyên âm cuối: một chữ w giờ móc đúng cả cặp trong ươi/ươu — nguoiwf → người, cuoiwf → cười, ruouwj → rượu. Trước đây chỉ móc mỗi chữ o, buộc phải gõ tay từng dấu (cuwowif).

[0.3.0] - 2026-07-09

Đã đổi

  • Chế độ “gõ thoải mái”: khi tắt “Kiểm tra chính tả (chặt)”, engine giờ cho gõ tắt tiếng Việt (đc, nèk, ko…) mà vẫn tự nhận diện và giữ nguyên từ tiếng Anh có cụm bất khả (clear, sound, status…), thay vì đặt dấu bừa như trước. Bật lại để ưu tiên bảo vệ tối đa từ tiếng Anh.

[0.2.0] - 2026-07-08

Đã thêm

  • Tự động cập nhật qua Sparkle: kiểm tra bản mới định kỳ (24h), hỏi trước khi cài kèm changelog, và mục menu “Kiểm tra bản mới…”. Bản phát hành được ký EdDSA và phân phối qua GitHub Releases.

Đã đổi

  • Mở nguồn theo giấy phép MIT.

0.1.0 - 2026-07-08

Bản phát hành đầu tiên.

Đã thêm

  • Kiểu gõ Telex và VNI.
  • Kiểm tra chính tả: từ không phải tiếng Việt tự trả về phím gốc.
  • Gõ dấu mũ linh hoạt: nanag → nâng, viete → viêt.
  • Gõ tắt (macro) và che từ tục tĩu khi chốt từ.
  • Loại trừ theo app và nhớ trạng thái VN–EN riêng từng app.
  • Phím tắt bật/tắt toàn cục, biểu tượng menu bar, khởi động cùng máy.
  • Chống dính chữ / nháy chữ: ưu tiên Accessibility API, diff tối thiểu, gộp event, bảng quirk theo app (data/app-profiles.json).
  • Cửa sổ hướng dẫn cấp quyền và cửa sổ Cài đặt (Chung / Gõ tắt / Ứng dụng / Giới thiệu).

Xem tất cả phiên bản trên GitHub ↗