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

允许以 defaults write 覆写指定的系统键盘布局 #664

Closed
wants to merge 8 commits into from

Conversation

ShikiSuen
Copy link
Contributor

@ShikiSuen ShikiSuen commented Oct 6, 2022

Squirrel 迄今为止仅允许在输入法配置档案里面决定是否启用 US 布局强制覆写。这样对依赖于 Colemak / Dvorak 这类异种布局输入拼音的使用者们并不友好。这个 PR 旨在允许使用者们定义这个功能。

需要指定為 Colemak 鍵盤的話,跑终端指令:

defaults write im.rime.inputmethod.Squirrel BasicKeyboardLayout -string "com.apple.keylayout.Colemak"

需要指定為美規鍵盤的話:

defaults write im.rime.inputmethod.Squirrel BasicKeyboardLayout -string "com.apple.keylayout.ABC"

这次 PR 推送的内容也会检查终端指令输入的 keyLayout 参数值的合法性。

P.S.: 这个 PR 会使得 RIME 在建置时内捆 Swift Runtime,建置出来的 App 会肥一些(不到 50MB)。但尚未牺牲对 macOS 10.09-10.12.x 的支援。

P.P.S.: GUI 交互介面尚未实作。这个可能得需要与佛振等 maintainers 讨论之後以別的 PR 來完成。

- Since I am using macOS 10.14 Mojave with its latest-available Xcode for Swift 5 implementation of Squirrel at this moment, the clang-format compatibility mode is set to Swift 5.0.
@ShikiSuen ShikiSuen force-pushed the overrideKeyboard branch 2 times, most recently from 986b422 to 88ff3b2 Compare October 6, 2022 15:59
@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Oct 6, 2022

修了一下对 keyboard layout 的覆写行为。
现在不看 client 是不是自己了,而是直接 GCD 处理。
毕竟这回圈也只是有限回圈、不会超过两秒。
用 GCD 处理的话,不会卡死。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Oct 7, 2022

相关处理由 activateServer 挪至 setValue 当中。原因参见档案内的注解。
就地切换输入法时,会触发 setValue。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Oct 7, 2022

这个 pr 先晾着。我还得调查一下 IMK 的某些行为。

@ShikiSuen
Copy link
Contributor Author

调查完毕。无异常。

@ShikiSuen
Copy link
Contributor Author

改了一下处理方法,以实现对鼠须管原有的配置档案的尊重。
从 plist 读不到可用正确值的情况下,会直接默认读取的是 "com.apple.keylayout.ABC" 美规键盘。

@ShikiSuen ShikiSuen force-pushed the overrideKeyboard branch 4 times, most recently from 2a07548 to d4c2ad8 Compare October 8, 2022 01:05
@ShikiSuen
Copy link
Contributor Author

介面已经实作,但存在功能故障。目前正在排查。

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Oct 8, 2022

功能实装完毕。现在点鼠须管用户设定的话,会在显示用户资料夹的同时也弹出键盘布局设定视窗。

但我目前不得不牺牲鼠须管配置档案的「us_keyboard_layout」这一项。
也就是说,这个 PR 目前这个阶段会强制复写键盘布局。
如果不指定的话,defaults delete 掉 BasicKeyboardLayout 即可。这样应该就不强制覆写了。

我估计佛振或者 Leo 可能有更好的方案、让「us_keyboard_layout」这一项恢复工作。

@ShikiSuen
Copy link
Contributor Author

补记:override keyboard 必须用 GCD 这样的异步执行手段。不然的话,输入法本体的视窗为当前视窗时,会卡死几秒钟。

@ShikiSuen
Copy link
Contributor Author

这是这次追加的鼠须管键盘布局设定视窗。

image

image

目前还发现了鼠须管的既存问题:MainMenu.xib 预设的大主选单被砍掉了。
这会导致一个问题:鼠须管所有自身视窗均无法用 CMD+W 迅速关闭。

cc @LEOYoon-Tsaw @lotem 二位怎么看?这个 MainMenu.xib 的问题 是放在这个 PR 解决、还是回头再另推一个 PR?

@ShikiSuen
Copy link
Contributor Author

刚刚的 commit 用以新增偏好设定视窗的本地化。
由于不是威注音输入法,所以就移除了 vChewingLocalizedName()

@RightFS
Copy link

RightFS commented Oct 18, 2022

可以用一个cli程序来处理布局选择,

>rime-keylayout
select keyLayout:
1. ABC
2. dvorak
3. colemak
please input(1-3): _

反正也不是常用功能,一般设置一次就完成了, 这样不用引入额外的窗口.

以上仅是一点不成熟的建议

@ShikiSuen
Copy link
Contributor Author

@RightFS 不巧的是我不会写 CLI。
而且,终端机对很多不懂终端机的 macOS 使用者而言极端不友好。

@ShikiSuen
Copy link
Contributor Author

@RightFS 另外,我目前这种设计,用 defaults write 也可以改。

@groverlynn
Copy link
Contributor

可以參考Mac的拼音和注音(/System/Library/Input Methods/中的TCIM.app和SCIM.app),在Keyboard > Input Sources中添加preference pane來選擇keylayout。

@ShikiSuen
Copy link
Contributor Author

@groverlynn 那招對 macOS 10.15 開始的系統沒有用。
你可以拿威注音輸入法 2.9.2 版測試一下。

@groverlynn
Copy link
Contributor

@ShikiSuen 你的威注音根本沒有preference panel啊

@ShikiSuen
Copy link
Contributor Author

@groverlynn 有。但只會在 macOS 10.13 和 10.14 當中顯示。並不是因為我禁用,而是因為 macOS 10.15 開始的 bug。
https://twitter.com/ShikiSuen/status/1581602996042932229

@CoreyBin
Copy link

CoreyBin commented Dec 4, 2022

你好,我是colemak用户,请问当前在官网下载的版本,如何操作将布局强制设定为colemak,感谢。

@ShikiSuen
Copy link
Contributor Author

@JarynChen 你得问专案主管 @lotem 。官方可下载版本都是他们提供的。

P.S.: 这个 PR 有点旧,很多东西可能还得需要重新检讨。

@sunznx
Copy link

sunznx commented Jan 14, 2023

我刚好有这个需求,看到百度输入法是在配置里面设置的,我感觉 default-write/cli 的方式对我不友好。希望尽快可以使用到这个功能
image

@groverlynn
Copy link
Contributor

我刚好有这个需求,看到百度输入法是在配置里面设置的,我感觉 default-write/cli 的方式对我不友好。希望尽快可以使用到这个功能
image

@sunznx #687 已經用配置文件簡單實現了

@sunznx
Copy link

sunznx commented Jan 16, 2023

我刚好有这个需求,看到百度输入法是在配置里面设置的,我感觉 default-write/cli 的方式对我不友好。希望尽快可以使用到这个功能
image

@sunznx #687 已經用配置文件簡單實現了

@groverlynn 想要这个功能,还未 merge

@lotem
Copy link
Member

lotem commented Jan 27, 2023

此刻我發現這個已經合併的PR #687 是解決同一個問題的。用YAML設定鍵盤佈局的ID,似乎足夠靈活。就不必用終端命令控制了。

@lotem lotem closed this Jan 27, 2023
@sahsu
Copy link

sahsu commented Feb 3, 2023

跟這個 pr 沒有直接關係但如果你用 dvorak 要直接在 ~/Libary/Rime/build/squirrel.yamlkeyboard_layout: default 改成 keyboard_layout: dvorak 然後 re-Deploy 才能正常使用。

@ShikiSuen ShikiSuen deleted the overrideKeyboard branch February 5, 2023 16:55
@weakish
Copy link

weakish commented Feb 6, 2024

@sahsu Thanks a lot! I tried to specify keyboard_layout in default.custom.yaml but it has no effect. Modifying ~/Libary/Rime/build/squirrel.yaml works!

(squirrel: 0.16.2 macOS 14.2.1)

@ShikiSuen
Copy link
Contributor Author

ShikiSuen commented Feb 6, 2024

@sahsu 這樣不會同時改到螢幕鍵盤吧?

@groverlynn
Copy link
Contributor

@sahsu Thanks a lot! I tried to specify keyboard_layout in default.custom.yaml but it has no effect. Modifying ~/Libary/Rime/build/squirrel.yaml works!

(squirrel: 0.16.2 macOS 14.2.1)

Do not change files in ~/Library/Rime/build/, as these are built (processed) by rime. Any changes in these files will be lost once rime is rebuilt. You should modify the file in the parent directory ~/Library/Rime/squirrel.yaml, or better use patch file ~/Library/Rime/squirrel.custom.yaml.

@hjbolide
Copy link

hjbolide commented May 10, 2024

When typing in English I use dvorak layout but in Chinese I use US layout.

It had been working perfectly until I updated to Squirrel 0.18 a few days ago following auto-update prompt. The default setting after update for keyboard_layout was last.

I have tried setting it up in ~/Library/Rime/squirrel.yaml, ~/Library/Rime/squirrel.custom.yaml (using patch syntax) so it reads keyboard_layout: us, neither had worked for me. Rebooting the laptop didn't help apparently.

Any idea how should I go about fixing it?

Edit: I think I've figured it out.

Instead of doing: keyboard_layout: us, I tried using keyboard_layout: com.apple.keylayout.US and it worked.

Likely a bug?

@weakish
Copy link

weakish commented Aug 5, 2024

You should modify the file in the parent directory ~/Library/Rime/squirrel.yaml

@groverlynn I have not find this file on my machine (Sonama 14.5, Squirrel 1.0.2). Should I copy the squirrel.yaml under ~/Libary/Rime/build/ to ~/Libary/Rime/ ?

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.

9 participants