BoGoEngine / ibus-bogo

IBus frontend for the BoGo engine.
GNU General Public License v3.0
94 stars 40 forks source link

Hỗ trợ tính năng gõ tắt do người dùng tùy chỉnh được #48

Open lewtds opened 11 years ago

lewtds commented 11 years ago

Đây là một tính năng được rất nhiều người dùng quan tâm trong thời gian qua. (#47, #27)

Phương pháp đơn giản nhất để thực hiện tính năng này là tạo một hook ngay khi nhận được phím từ người dùng, so sánh raw input với danh sách các chuỗi phím tắt đã ghi sẵn và commit từ được gõ tắt. Vấn đề với phương pháp này là chuỗi phím tắt chỉ có thể là chuỗi ASCII.

Phương pháp thứ hai là đặt hook sau khi tính toán chuỗi tiếng Việt tạo ra. Cách này có lợi thế là phím tắt có thể là chuỗi tiếng Việt. Tuy nhiên có thể sẽ chậm hơn cách đầu tiên nhưng không đáng kể.

Dù theo cách nào thì cũng có một số vấn đề phải quan tâm:

Hai vấn đề dưới có thể giải quyết bằng phương pháp hiện thanh candidate (dropdown menu ngay chỗ đang gõ). VD người dùng đặt:

khi người dùng gõ chữ kg thì bộ gõ sẽ commit chữ không, đồng thời hiện ra dropdown với những entry như sau:

Nếu người dùng không làm gì thì mặc định chọn phương án không (đã commit), ngoài ra người dùng có thể chọn 1 trong 2 phương án được đề ra bên dưới. Phương án này rất giống cách auto complete trong các IDE hiện đại.

Một điều cần quan tâm nữa là tính hoa thường của từ được viết tắt. Phần mềm GoTiengViet của tác giả Kỳ Nam sẽ tự động nhận diện hoa/thường của 2 chữ cái đầu tiên trong chuỗi viết tắt đang được gõ. VD: KG -> KHÔNG, kg -> không, Kg -> Không. Nếu implement tính năng này thì phải chú ý đến các chuỗi tên riêng như: chxhcnvn -> Cộng hòa Xã hội Chủ nghĩa Việt Nam. BoGo không có cách nào để đoán được phương pháp viết hoa thường của cụm từ phức tạp như thế này (hay chỉ implement với những từ không viết hoa?).

cmpitg commented 11 years ago
Phương pháp thứ hai là đặt hook sau khi tính toán chuỗi tiếng Việt tạo ra. Cách này có lợi thế là phím tắt có thể là chuỗi tiếng Việt. Tuy nhiên có thể sẽ chậm hơn cách đầu tiên nhưng không đáng kể.

+1

Cách này rất có lợi, tạo cảm giác tự nhiên hơn và thực tế là linh động hơn. Có 2 ví dụ đơn giản có thể đem cách này vào ứng dụng:

Nếu người dùng không làm gì thì mặc định chọn phương án không (đã commit), ngoài ra người dùng có thể chọn 1 trong 2 phương án được đề ra bên dưới. Phương án này rất giống cách auto complete trong các IDE hiện đại.

+1

Tuy nhiên nếu trong trường hợp này thì có vẻ sử dụng pre-edit sẽ đem lại lợi thế hơn, giống với auto-completion hoặc các bộ gõ chữ tượng hình.

Một điều cần quan tâm nữa là tính hoa thường của từ được viết tắt. Phần mềm GoTiengViet của tác giả Kỳ Nam sẽ tự động nhận diện hoa/thường của 2 chữ cái đầu tiên trong chuỗi viết tắt đang được gõ. VD: KG -> KHÔNG, kg -> không, Kg -> Không. Nếu implement tính năng này thì phải chú ý đến các chuỗi tên riêng như: chxhcnvn -> Cộng hòa Xã hội Chủ nghĩa Việt Nam. BoGo không có cách nào để đoán được phương pháp viết hoa thường của cụm từ phức tạp như thế này (hay chỉ implement với những từ không viết hoa?).

Anh nghĩ nên đem cái này ra trưng cầu ý kiến. Bản thân anh thấy việc nhận diện chữ cái hoa-thường rất phi tự nhiên và behaviour là unexpected, hoặc nếu có quy ước thì cũng rắc rối cho người dùng (họ phải học quy ước không phải do họ đặt ra để gõ tốt). Ngoài ra, người dùng có thể đạt hiệu ứng tương tự bằng cách định nghĩa nhiều cụm từ ("kg", "Kg", "KG", ...) và có lựa chọn để nhận diện chữ hoa hoặc không.

lewtds commented 11 years ago

Vào 15:13 Ngày 04 tháng 3 năm 2013, Nguyễn Hà Dương < notifications@github.com> đã viết:

Tuy nhiên nếu trong trường hợp này thì có vẻ sử dụng pre-edit sẽ đem lại lợi thế hơn, giống với auto-completion hoặc các bộ gõ chữ tượng hình.

Em thấy nếu dùng pre-edit ở đây thì người dùng lại phải thêm một bước commit kể cả không có lựa chọn nào khác ngoài cái default.

lewtds commented 11 years ago

Có một tính năng khá hay có trong bộ gõ GoTiengViet là tính năng gõ tắt kiểu karaoke. Tức là chỉ cần gõ các ký tự đầu của một cụm từ thì nó sẽ tự động tìm trong từ điển tất cả các phương án có thế. VD: tt -> tạ thế / tà thuật / trung tâm...

Cơ mà thực ra nếu làm thì cũng chỉ để cho đẹp thôi. Em không nghĩ sẽ có người thực sự dùng nó.

cmpitg commented 11 years ago
Cơ mà thực ra nếu làm thì cũng chỉ để cho đẹp thôi. Em không nghĩ sẽ có người thực sự dùng nó.

:+1: :-D

Nhánh develop có một vài vấn đề với popup:

lewtds commented 11 years ago

Cái xuất hiện lung tung là bị trong Qt app đúng không anh? Vấn đề man man thì vẫn là cái chuyện terminal dùng chung input context, kể cả khi echo=off mà anh. :-?

cmpitg commented 11 years ago
Cái xuất hiện lung tung là bị trong Qt app đúng không anh?

Đúng đúng.

Cái vụ terminal anh quên mất :-D.

lewtds commented 11 years ago

Qt hiện tại đang dùng XIM, mà trong XIM thì nó không gửi tọa độ con trỏ nên IBus không thể hiện popup đúng chỗ được.

cmpitg commented 11 years ago

ibus-qt broken hả em?

lewtds commented 11 years ago

ibus-qt không liên quan vì đã tắt hoàn toàn rồi. Cái XIM client không gửi tọa độ ý. Em cũng chưa xem kỹ là bản thân XIM có hỗ trợ tọa độ không hay là IBus implement thiếu.

cmpitg commented 11 years ago

À, ý anh là ibus-qt broken nên mới phải chuyển qua xim.

lewtds commented 10 years ago

Em đang nghĩ đến khả năng một chuỗi viết tắt có thể expand ra nhiều kết quả khác nhau và cho phép người dùng chọn bằng drop down.

lewtds commented 10 years ago

Code gõ tắt đang nằm trong nhánh https://github.com/BoGoEngine/ibus-bogo-python/tree/abbr với commit duy nhất hiện tại là: https://github.com/BoGoEngine/ibus-bogo-python/commit/cf21729b43e7474a00c4f389daa6be4a5d209830

lewtds commented 10 years ago

Pull request: https://github.com/BoGoEngine/ibus-bogo-python/pull/136