Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

將鼠鬚管就簡體輸入法與繁體輸入法分類各自分為一個輸入法副本。 #648

Closed
wants to merge 5 commits into from

Conversation

ShikiSuen
Copy link
Contributor

該拽取請求用以解決該問題: #645 ,允許使用者在想要的輸入狀態下讓語音輸入功能執行與該簡繁輸入狀態對應的語音文字輸出。

@binotaliu
Copy link

binotaliu commented Jun 28, 2022

我編譯完後顯示的是這樣的:

CleanShot 2022-06-28 at 15 36 31

CleanShot 2022-06-28 at 15 36 44

實際似乎也不能使用,
可能鼠鬚管還沒 Deploy 完?我晚點再試試

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Jun 28, 2022

@binotaliu 请重新登入,因为 info.plist 内容变更明显。

Ref: #281

@ShikiSuen
Copy link
Contributor Author

其實,我這個 PR 可以留給 lotem 做後續發揮。
比如說「Squirrel-CHS」與「Squirrel-CHT」會預設開啟簡體/繁體輸出模式,等。

@binotaliu
Copy link

@ShikiSuen 感謝,重新登入後確實正常了。

@binotaliu
Copy link

名稱應該使用 EN Dash (–) 並在前後空一格,以保持跟系統內置的「ABC – 延伸」一樣的風格。

CleanShot 2022-06-28 at 16 23 57

另外我發現,日文輸入法有「日文 - 羅馬字」跟「日文 - 假名」兩個輸入法。如果只有其中一個,在 Menubar 的輸入法選單以及 ⌘-Space 的選單上就只會顯示「日文」。但如果同時啟用了兩個輸入法,就會顯示全名。這點不知道是否也能實現。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Jun 28, 2022

@binotaliu

一、我不推薦這個方式,因為這樣會讓字串變長。螢幕右上角的通知區域的空間本來就很寶貴,而 Apple 從來就不在乎這一點(不然不會在新的 macbook 機種當中引入 notch 攝影機的設計)。

二、很多官方輸入法能做到的功能都是用了 Apple 的私有 API 才完成的,這些 API 不對第三方使用者開放。

@LEOYoon-Tsaw
Copy link
Member

能弄個clean一些的pull嗎,連typo fix也扔進去了

@LEOYoon-Tsaw
Copy link
Member

說實話我並不喜歡這個方案,這會讓用戶非常confuse,用戶會期待選擇「鼠须管-简」後輸出即係简化字,而事實上並不會。用戶會來complain爲何選了「鼠须管-简」還是打不出简化字。
這方案解決了一個小問題,却會帶來大麻煩。
三種更好的方法:

  1. 在安裝過程中由用戶選裝在哪種語言下;
  2. 分成兩個App,「鼠须管-简」自帶简化字八股文、明月拼音-简化字等
  3. 維持原樣,有需要改注冊語言的可徑去/Library/Input\ Methods/Squirrel.app/Contents/Info.plist

@lotem
Copy link
Member

lotem commented Jun 28, 2022

我提個問題啊:
系統認兩個輸入法實例,不會運行兩份Squirrel.app進程吧?不然進程獨佔的資源都亂套了。

能在簡繁中文類別下分別註冊是好事。確實如 @LEOYoon-Tsaw LEO 所說,「鼠须管-简」這個名稱誤會很大。要我幹,就分別寫「鼠须管」「鼠鬚管」,不翻譯,不解釋。這樣至少選其中一個的過程中不會有錯誤的理解。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Jun 28, 2022

@LEOYoon-Tsaw 我這個 PR 可以由 Lotem 編輯的。不過我先撤掉那個 typo fix commit 好了(已經撤掉了)。

@lotem 我从威注音首发版开始就用这套模式。记忆体内只有一个威注音执行绪。RIME 这样搞的话,实际状况应该相同才对。
我写「鼠须管-简/繁」是参照了威注音目前的做法。不过我个人赞同你的想法。其实威注音一开始是用「威注音/威註音」来区分简繁体模式的,结果有很多人吐槽建议改成「威注音-简/繁」。

先用「鼠须管/鼠鬚管」吧(已經推送)。

@ShikiSuen
Copy link
Contributor Author

@LEOYoon-Tsaw 你說「用戶會期待選擇「鼠须管-简」後輸出即係简化字,而事實上並不會。」

那就讓 Lotem 做相關的功能綁定就好了。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Jun 28, 2022

引用 @lotem :「這樣至少選其中一個的過程中不會有錯誤的理解。」

安裝完畢之後,macOS 偏好設定在經過使用者確認新增輸入法之後,會同時出現兩個鼠鬚管(分別對應簡繁區域)。
可能得在 pkg 安裝程式的安裝完畢的畫面當中寫一些說明。

@ShikiSuen
Copy link
Contributor Author

我將這個 commit 也撤掉好了(已經撤掉了):Repo // Enable strict prototypes as suggested by Xcode 13.
image

@lotem
Copy link
Member

lotem commented Jun 28, 2022

引用 @lotem :「這樣至少選其中一個的過程中不會有錯誤的理解。」

安裝完畢之後,macOS 偏好設定在經過使用者確認新增輸入法之後,會同時出現兩個鼠鬚管(分別對應簡繁區域)。
可能得在 pkg 安裝程式的安裝完畢的畫面當中寫一些說明。

确实,安装时得想法让用户选择一个,或者根据系统语言决定启用哪个。我上条说的是用户在系统设置里手动添加输入法的场景。一般人不会两个都选,在两个中文语言下都看得到鼠须管这一项,也算合理。

@ShikiSuen
Copy link
Contributor Author

@lotem 問個跑題的內容好了:你不介意將 Rime 的最低系統需求提升到 macOS 10.15 吧?
這樣的話用 Swift 就不用強綁定 Swift 5 Runtime 了,且可以用 SwiftUI 來搞選字窗。
最低系統需求弄得更早版的話,Runtime 本身體積不小的樣子(11.6 MB)。

@LEOYoon-Tsaw
Copy link
Member

@lotem 問個跑題的內容好了:你不介意將 Rime 的最低系統需求提升到 macOS 10.15 吧?
這樣的話用 Swift 就不用強綁定 Swift 5 Runtime 了,且可以用 SwiftUI 來搞選字窗。
最低系統需求弄得更早版的話,Runtime 本身體積不小的樣子(11.6 MB)。

哪裏來的Swift runtime?有用到Swift嗎

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Jun 28, 2022

@LEOYoon-Tsaw 我有在斟酌要不要用 Swift 重寫 Squirrel。

ObjC 實在太麻煩,且沒有類型安全。有時候自己寫的東西有問題,但 ObjC 就能允許這種東西 compile 過關、變成 runtime error。Swift 就機車一點,但至少可以把這類問題掐死在搖籃裡面。而且 Swift 自由很多。唯一不足可能就是 Swift 的 C++ interop 要等到今年年底才可能堪用(因為這是 Swift 5.7 的特性)。不過既然 LibRime 的對外 API 都是 C API,那麼與 Swift 5.5 的 Interop 應該沒問題吧。

@LEOYoon-Tsaw
Copy link
Member

我也喜歡Swift,就是不知道和librime的交互有沒有坑

@ShikiSuen
Copy link
Contributor Author

@LEOYoon-Tsaw 一個穩妥的方法就是得由同時精通 C 與 Swift Package 製作的人來將 LibRime 做成 Swift Package。
我不知道 Lotem 目前對 Swift Package 的製作是否熟悉就是了。

@lotem 请问,这个 PR 在可以 merge 之前还有什么需要修改的吗?

@lotem
Copy link
Member

lotem commented Jun 29, 2022

我再看看。要不我搞两个新图标,有没有必要?

@ShikiSuen
Copy link
Contributor Author

@lotem 搞吧。反正这个 PR 您是可以编辑的。

@ShikiSuen
Copy link
Contributor Author

@lotem 对了,新的 macOS 输入法图示的官方 psd / sketch 范本当中的图示(圆角矩形)的圆角幅度与您用的好像有区别。弄新图标的时候或许可以考虑跟进一下。

@ShikiSuen
Copy link
Contributor Author

@lotem 如果您 logo 還沒做的話,我有個考量:
簡體區域的 icon 用「须」,繁體區域的 icon 用「鬚」。
或者簡體區域的 icon 用「韵」,繁體區域的 icon 用「韻」,這樣筆畫少一些容易顯示清楚。

對不同副本組裝不同 icon 的方法可以參考威注音的 plist 檔案:
https://github.com/ShikiSuen/vChewing-macOS/blob/main/Source/Resources/IME-Info.plist

@yakirChen
Copy link

yakirChen commented Jun 30, 2022

要搞的话加个开关或者配置参数吧,让我可以关掉/屏蔽这个特性,用现在的展示形态

@lotem
Copy link
Member

lotem commented Jun 30, 2022

@lotem 如果您 logo 還沒做的話,我有個考量:
簡體區域的 icon 用「须」,繁體區域的 icon 用「鬚」。
或者簡體區域的 icon 用「韵」,繁體區域的 icon 用「韻」,這樣筆畫少一些容易顯示清楚。

對不同副本組裝不同 icon 的方法可以參考威注音的 plist 檔案:
https://github.com/ShikiSuen/vChewing-macOS/blob/main/Source/Resources/IME-Info.plist

考虑过“韻/韵”,不过现在我倾向于不改图标了,识别度不如现有图标。大多数人应该不会同时启用两个输入法选项。

@ShikiSuen
Copy link
Contributor Author

@lotem OK,已經強推了。

@ShikiSuen
Copy link
Contributor Author

糟糕。選單列的內容被我改成「Squirrel.Hans」了。
我給它改回「Squirrel-Hans」。

@lotem
Copy link
Member

lotem commented Jul 7, 2022

行。就这样。不过后续还有安装后注册输入源,需要跟进这项更改。按照前面的讨论,安装后行为不变,只启用简体中文的输入法。怎样让用户选择启用繁体中文,值得考虑。

@ShikiSuen
Copy link
Contributor Author

@lotem 我剛剛推送了一個 commit,以讓 Squirrel 在接受 --install 命令時「僅」註冊簡體副本。
但我這邊無法測試 pkg 安裝包編譯(因為不知道怎麼弄)。
您方便洗一個 pkg 安裝包給我用來測試嗎?

@ShikiSuen
Copy link
Contributor Author

@lotem 這個 PR 不行就先過了吧,不然我沒辦法準備下一個 PR。

@LEOYoon-Tsaw
Copy link
Member

自己新建分支就行了,為啥下個PR做不了?

@ShikiSuen
Copy link
Contributor Author

@LEOYoon-Tsaw 因為會遇到來回 merge 內容時產生 merge commit 的情況,搞得很亂。

@LEOYoon-Tsaw
Copy link
Member

rebase即可

input_source.m Show resolved Hide resolved
input_source.m Outdated Show resolved Hide resolved
Info.plist Show resolved Hide resolved
@ShikiSuen ShikiSuen requested a review from lotem July 25, 2022 15:03
Info.plist Outdated
<key>tsInputModeScriptKey</key>
<string>smUnicodeScript</string>
</dict>
<key>im.rime.inputmethod.Squirrel.Hant</key>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm very confused. Is this an input mode, conceptually?

For your reference, mozc defined one input source per input mode:
https://github.com/google/mozc/blob/master/src/mac/Info.plist

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is an input mode stating RIME's instance under the region of zh-Hant.

I know nothing about mozc. Wherever TISInputSourceID gets put, this PR will require existing users to reenable RIME, since the tsInputModeListKey of the instances are changed.

P.S.: 我沒分析過 mozc。萬一 mozc 的多副本是用諸如衛星應用等形式做背後支持的話,那將 TISInputSourceID 塞到 tsInputModeListKey 下方就還能說得過去。如果你實在不放心的話,要不要改天我問問 Apple Japan 的 mzp 老師?或者你電郵問一下 Apple Developer Relations?(Apple Developer Relations 應該更負責一些,畢竟你交了會員費。)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

另外,input mode 差分化了之後,可以在輸入法的 input controller 內依據當前不同的 input mode 做出不同的準備行為(比如威注音就是載入不同的簡繁辭庫。)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Apple的代碼文檔說得比較清楚。InputMode和總體的InputMethod都要定義TISInputSourceID,也都可以缺省定義。

Info.plist Show resolved Hide resolved
Info.plist Show resolved Hide resolved
@ShikiSuen ShikiSuen requested a review from lotem July 25, 2022 16:00
Copy link
Member

@lotem lotem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, one last request for change.

@@ -2,7 +2,9 @@

NSHumanReadableCopyright = "Copyleft 2017, RIME Developers";

im.rime.inputmethod.Squirrel = "Squirrel";
im.rime.inputmethod.Squirrel.Rime = "Squirrel";
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's simplify im.rime.inputmethod.Squirrel.Rime to im.rime.inputmethod.Squirrel, drop .Rime everywhere in the IDs. because im.rime.inputmethod.Squirrel is also the bundle identifier, so this string can also serve as localized app name.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert this commit.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can take this in merging code.

Info.plist Show resolved Hide resolved
@lotem
Copy link
Member

lotem commented Jul 25, 2022

InputSourceID 去掉 .Rime 因爲輸入源名稱顯示爲“Squirrel”而不是“Rime”。也就是撤銷了最後一筆提交。
我最後做一點點修改:
把英文字符串翻譯統一格式改成 “Squirrel - Simplified/Traditional” 不然在系統設置裏與衆不同,太難看了。

@lotem lotem closed this in 5b981dc Jul 25, 2022
@lotem
Copy link
Member

lotem commented Jul 25, 2022

謝謝。提交了。

@ShikiSuen ShikiSuen deleted the doppelganger branch July 26, 2022 05:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants