vChewing / vChewing-macOS

威注音輸入法 macOS 版,恐怕是截至目前為止在功能多樣性方面最強的第三方免費 macOS 系統專用輸入法,採純 Swift 語言寫就。威注音的著力點是盡可能在力所能及的範圍內將整個產品的功能做得更好用,搭配特製的簡體中文與繁體中文專用辭庫。是純粹的簡體中文注音輸入法(也內贈原生繁體中文輸入模式),更具諸多威注音特色功能。目前研發管理工作均在 CSDN GitCode 進行。
https://vchewing.github.io/
Other
303 stars 10 forks source link

[功能問題提報] 在組音區有內容時,內文組字區的游標位置不正確。 #512

Closed ShikiSuen closed 8 months ago

ShikiSuen commented 8 months ago

先說結論:得修一下 IMEStateData.attributedStringNormal(for:)。本次將使用間接修復法:

      /// IMK 有如下限制:
      /// 1. 內文組字區要想顯示游標的話,所有下劃線的粗細必須相等。
      /// 2. 如果所有線段粗細相等的話,給 client().setMarkedText() 塞入的 selectionRange 的長度必須得是 0。
      /// 不然的話,游標會頑固地出現在內文組字區的正前方(文字輸入順序上的前方)。
      /// 3. 從 macOS 14 開始,粗細相等的相鄰下劃線會顯示成一整個線段。該行為改變恐怕是 macOS 故意所為。
      ///
      /// 於是乎,此處特地針對 .ofInputtingState 專門將內文組字區的 marker 設定到 cursor 的位置。
      /// 這是一招隔山打牛的方法,讓此時的 selectionRange 的長度必定是 0。
ShikiSuen commented 8 months ago

Done.