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

討論 release 0.15 #8

Open
PCMan opened this issue Aug 8, 2016 · 48 comments
Open

討論 release 0.15 #8

PCMan opened this issue Aug 8, 2016 · 48 comments

Comments

@PCMan
Copy link
Member

PCMan commented Aug 8, 2016

Hi 大家,
最近多了很多修改,然後我們多了新進開發者 @cwahbong,貢獻了 UILess mode 支援,現在可以在命令列提示下正常使用了。(理論上應該要可以支援部份遊戲)
然後 @KenLuoTW 也是做了很多改進,好像可以來發新版了?

@KenLuoTW
Copy link
Member

KenLuoTW commented Aug 8, 2016

我這邊已經告一段落,接下來要弄的,須要比較長的時間來修改及測試。

@jessy1092
Copy link
Member

可以! 主要 nodejs 可以支援 63 個 client ,這樣應該可以放心測試 nodejs 模組

最近會來寫文件,如何使用 emojime 跟如何基於 nodejs 開發,蠻多人安裝後不知怎麼用的 XD

emojime 的使用方式目前是寫了一篇在 ptt

@PCMan
Copy link
Member Author

PCMan commented Aug 29, 2016

剛 merged 了兩個 PR,其中一個納入了 libRIME 支援,真是太威了!
有任何其他 issues 嗎? 沒有要來發新版了?

@osfans
Copy link
Member

osfans commented Aug 29, 2016

有一個 EasyIME/PIME#172 的問題,希望可以動態選擇註冊到tw cn或者hk地區。目前ime.json和nsis裏面都寫死了。

@PCMan
Copy link
Member Author

PCMan commented Aug 29, 2016

@osfans 我不是很確定你的意思,目前在 ime.json 裡面寫 zh-CN或 zh-HK,理論上是 PIME 是可以幫你的 module 註冊成簡體中文或香港中文的。在我系統上,中洲韻是註冊成中國簡體中文輸入法沒錯啊?
NSIS 的部分,因為微軟並沒有完整提供設置 Win 10 輸入法的 API,官方文件也沒寫明,TSF 僅能註冊輸入法,但無法修改其他系統設置。所以 PIME installer 相關 registry 的變更,是 @KenLuoTW 用工具自行實驗出來的,如何也正確支持簡體中文系統,這部分還需要中國的朋友幫忙研究!

@PCMan
Copy link
Member Author

PCMan commented Aug 29, 2016

@osfans 至於 NSIS installer,他的 MUI 要提供多語系支持是可以的,應該可以讓他同時支持 zh-TW 或 zh-CN 的 UI,啟動 installer 時讓使用者選語言。我很久以前有做過但是有點沒印象,也許問問 @KenLuoTW ?

@osfans
Copy link
Member

osfans commented Aug 29, 2016

註冊成簡中是沒錯,但是也有香港和臺灣的朋友喜歡用rime,他們希望能註冊到相應地區,不然在word中使用時,預設語言就有問題。

ui多語言我昨晚做了,可以選擇。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@osfans 有個方法可以很簡單不用改 C++ code 就實現此功能,也是我認為比較好的作法。
把原本 rime 改成 rime_base 這個 python 模組,作為 base class
建立 rime_cn, rime_hk, rime_tw 三個 input modules,各自有自己的 ime.json
裡面分別給不同 guid 和 locale 值,然後各自繼承 rime_base 的 text service class
這樣就可以做到了,請參考 cin_base 的作法。
然後在 NSIS 的地方,把這三個 module 列成不同的輸入法: rime(中國簡中), rime(香港繁中), rime(台灣繁中),就可以了,非常簡單。
如果不想繼承三個不同的 text service classes,我們之後還可以來改 import module 的 python code,讓多個 ime.json 可以載入同一個 python module,這樣就可以實現了。
p.s. 如果改 C++ 端 dll register 的部份,讓他同時幫一個輸入法註冊多語系,Windows 還是會需要多個 guid,這樣設定檔會變得複雜,而且很難做 UI 讓使用者選擇要註冊哪些

@osfans
Copy link
Member

osfans commented Aug 30, 2016

這也是一個不錯的辦法。

我在想,可不可以在nsis安裝時,替換ime.json的locale值,然後安裝到指定區域。目前沒有同時安裝到多個語系的需求,只允許安裝到一個語系,所以只需要一個guid就可以了。這樣也不用改c++的代碼。

目前網友們是手動修改ime.json,然後重新註冊service改語系。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@osfans 我還是覺得分開成不同的 ime.json 比較乾淨些,未來也比較可以擴充。分開不同 module 的好處是,未來有可能會針對 zh_TW, zh_HK 用戶會需要一些不同於 zh_CN 的功能?此時繼承出的 text service 就可以做這些 customization。
另外 NSIS 目前在做的一些事情,例如修改 registry 的東西,感覺有機會移到 C++ 來做,這樣 installer 會更簡化些,目前有點太過複雜了。

@osfans
Copy link
Member

osfans commented Aug 30, 2016

好,如果要精簡NSIS的話,那我就分模塊試試。確實,這樣可以按區域定製了。

@osfans
Copy link
Member

osfans commented Aug 30, 2016

忘了,還有個問題,config_dir的具體路徑,現在rime參考以前win7的前端,放在了%APPDATA%下面。

-user_dir = os.path.join(os.path.expanduser("~"), APP, RIME)
+user_dir = os.path.join(os.path.expandvars("%APPDATA%"), APP, RIME)

當時是有用戶發現expanduser它會優先使用HOME,再使用USERPROFILE,其他AP設定了HOME變數時,會把PIME的config都放到那邊去,而不是預期的USERPROFILE,具體參考:https://docs.python.org/3/library/os.path.html#os.path.expanduser

爲了統一,我們用USERPROFILE還是APPDATA?或者我們使用os.path.expandvars("%USERPROFILE%")?這樣就可以繞過HOME。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

我目前其他設定好像都放 ~/PIME,但是我也覺得這樣不太符合 Windows 的慣例。
其實以 Windows 來說,我印象中,config 應該是存放在 C:\Users\AppData\Local
或是 C:\Document and Settings\Application Data\Local
細節有點忘了,要查文件

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@osfans @KenLuoTW 我剛看過 NSIS 目前改 registery Control Panel/International 的部份,感覺這些可以放進 C++ 部份的 DLLRegisterServer()一起做就好了,相關 key/value 事實上可以完全從 ime.json 的內容得出,這樣 NSIS 裡面相關的 code 可以全部刪掉,而且未來好維護。
我今天晚上如果有空,會來嘗試這部份

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

不過一個會出問題的地方是...目前這些設定是寫入 HKEY_CURRENT_USER 的 registry
這樣其實只對目前登入的使用者有效,換用其他用戶 logon 就不會有效了
感覺這件事情應該要每個 user logon 的時候分別做,現在這樣處理其實不太正確。 :-(
也許可以讓 PIMELauncher 檢查有無註冊,沒有的話就寫入 registry

@osfans
Copy link
Member

osfans commented Aug 30, 2016

那要不我統一改到APPDATA?聽名字也像,保存APP DATA用的。
反正各模組統一就好。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@osfans 聽起來不錯,不過可能要加上檢查舊路徑,若有設定檔,自動協助用戶移轉會比較好

@KenLuoTW
Copy link
Member

檢查有無註冊,沒有的話就寫入 registry,可能會有點問題。

那些 HKCU 的 KEY 主要只是讓 WIN8 之後的系統,在設定鍵盤時能夠看到已安裝的輸入法。
有時可能有些人安裝時會安裝所有的模組,然後將不須要的模組,從鍵盤列表中移除。
如果此時 PIMELauncher 自動又註冊了上去,就無法僅用所須的模組。

另一種情境是,同一台電腦有兩個使用者,一個用倉頡,一個用注音。
這時倉頡的用戶,鍵盤列表就無法僅列出倉頡,而不列出注音,反之注音也是一樣。

@osfans
Copy link
Member

osfans commented Aug 30, 2016

@PCMan 自動協助用戶移轉是不錯,不過好像比較麻煩,不知道在哪裏做比較好了,在安裝的時候做?

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@KenLuoTW 我的意思是檢查是否「從來沒註冊過」HKCU
一旦第一次執行完畢,做個紀錄,之後就不再做這個動作,這樣使用者移除的就不會被加回去了

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@osfans 可能要在 python server process 啟動的時候做,installer 是以 admin 執行的,去讀寫檔案容易有權限問題,而且只能變更目前 login 的 user,無法變更其他 users
在 python server 和 node.js server processes 啟動的時候應該最簡單,這是以目前 user 身份執行的
可能可以在 server process 啟動時,檢查是否存在 ~/PIME 目錄,若有,移動到 APP DATA 下

@KenLuoTW
Copy link
Member

KenLuoTW commented Aug 30, 2016

我今天會將 cin 的部份,設定檔改為存放到 Application Data,並自動對舊有設定檔做轉移處理。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@KenLuoTW 方便順便幫處理 chewing 的設定檔嗎 XD

@KenLuoTW
Copy link
Member

KenLuoTW commented Aug 30, 2016

可以,我正在加一個 cin 的功能,加完後去處理。

已經改好了,可自動將舊有設定轉移過來使用。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

@KenLuoTW @osfans 將新安裝的輸入法加入每個使用者的 HKCU 有正規的方法可以做
能利用 Windows 自帶的 Active Setup 機制。
https://helgeklein.com/blog/2010/04/active-setup-explained/
https://blogs.msdn.microsoft.com/aruns_blog/2011/06/20/active-setup-registry-key-what-it-is-and-how-to-create-in-the-package-using-admin-studio-install-shield/
由這個機制,可在使用者登入尚未進桌面前,做系統設定,且每個使用者只會設定一次。
缺點是,解除安裝 PIME 的時候,他不會清除這些加入 Control Panel 設定內的值。
若要完全清除,得在 uninstal 時掃描 HKEY_USERS 下所有的目錄,找到每個用戶的設定逐一刪除
也是可行,只是相當複雜。
這些用 NSIS 來寫會很複雜,我預計把這段 code 寫到 PIMETextService.dll 中,由 ime.json 自動產生該有的設定,並且透過 Active Setup 以 rundll32 啟動他,幫每個用戶執行設定。

@PCMan
Copy link
Member Author

PCMan commented Aug 30, 2016

今天研究完 Windows registry 有點晚,來不及做,明天找時間試著改 C++ part.

@osfans
Copy link
Member

osfans commented Aug 31, 2016

@PCMan 簡體的界面昨晚試了一下,可以做,晚上我再來做。把翻譯的簡體和繁體的字串都放在installer下的locale下面。

@KenLuoTW
Copy link
Member

KenLuoTW commented Aug 31, 2016

@osfans 一般來說, NSIS 弄多國語系,正常都會將要翻的字串,弄在另一個語系檔或是多個各國語系檔,這樣可增加腳本的可讀性,當初因為沒有考慮到會有簡體的專案也加入,故我也是偷懶將一些該弄在語系檔的東西,全部直接寫在腳本裡。

@osfans
Copy link
Member

osfans commented Aug 31, 2016

嗯 瞭解 我差不多搭好了框架 把字串都拿出來 然後安裝腳本裏用$(var)的格式代替原來的字串就好了。

@KenLuoTW
Copy link
Member

@jessy1092 我最近試了下 emojime, 它的候選清單會被其它的輸入法模組的設定影響喔,
例如當上一個模組為新酷音,並且候選清單設為九宮格,切到 emojime 後,emojime 也會變成九宮格。
所以一些設定應該要在 emojime 作初始化處理。

@osfans
Copy link
Member

osfans commented Aug 31, 2016

@PCMan rime_base的做法還是有個缺點,比如現在PIME裏的酷倉、注音、拼音,也有zh_CN、zh_HK的用戶。每個都分TW、HK、CN,有點浪費。或者可以在各模組自己的設定界面中,選擇更改地區?

@KenLuoTW
Copy link
Member

KenLuoTW commented Aug 31, 2016

主要要看模組是否要為兩岸三地做不同的地區支援,目前我寫的輸入法,
不管是資料或介面完全就是以 zh-TW 繁體為主,所以也就不適合安裝在簡體系統裡。
況且簡體用戶,絶大部份都是用拼音,而我弄得拼音目前也絶對不會比 RIME 裡的拼音好用。
就像注音,也沒有新酷音那樣強大,要達到跟這些輸入法差不多好用,起碼還須要一段時間。

如果是以我寫的模組來說,未來如果要加入多國語言,我會以以下方式製作:

  • ime.json 分各地區語系命名,例 ime.zhtw。
  • NSIS 安裝時視系統語系,若該語系命名檔存在,例 ime.zhtw, 就改名回 ime.json 來安裝。
  • 模組內部自己偵測系統語系,顯示對應的語系 UI 、字串及語系客製化功能。

在模組裡設定更改地區是沒必要的,主要是安裝時要註冊到對應的語系即可。

@osfans
Copy link
Member

osfans commented Aug 31, 2016

@KenLuoTW 這個方法不錯,我看看能不能實現。

@PCMan
Copy link
Member Author

PCMan commented Aug 31, 2016

@osfans @KenLuoTW 我還是認為分開不同的 ime.json 檔案和模組,會比較理想。
Windows 是多使用者環境,不能假設所有使用者都只想安裝同一語系。
安裝程式選擇 zh_CN 不代表他就不會需要 zh_TW 的模組,如果有兩種不同語言的使用者,共用一台機器 (這在學校、圖書館,或是使用 VM ware 雲端登入 server 是有可能的)
容許分別選擇要安裝 zh_CN, zh_HK, 或是 zh_TW,或是三者都裝,還是比較彈性的作法。
其實每個語系分別開一個目錄並不浪費,這只有浪費兩個檔案系統 inodes 而已。

@KenLuoTW
Copy link
Member

@PCMan 好的,這個以後我有發展多語系輸入法時會將它分開。

@osfans
Copy link
Member

osfans commented Sep 1, 2016

EasyIME/PIME@e719a0d 有在Installer中加入簡體中文,不過ieprotectedpage.ini中的還沒有翻譯。

@PCMan
Copy link
Member Author

PCMan commented Sep 4, 2016

@osfans @KenLuoTW
我剛變更了系統登錄的處理,現在 libIME 在註冊輸入法的時候,會幫 windows 8 以上系統自動寫入 "每個使用者"的 HKCU\Control panel.... 等數值,且同時也會寫入預設使用者的,所以未來新建立的使用者 HKCU 也會有這些設定了。
也就是說,以後 installer.nsi 內不再需要手動維護這些事情,那些 guid 相關 code 應該可以全刪除了。
只有兩點需要注意:

  1. 在 ime.json 內 locale 名稱改用新的 RFC4646,繁中變成 zh-Hant-TW,簡中變成 zh-Hans-CN (我已經改好了,未來有新模組請注意此變更)
  2. 解安裝的部分 code 還沒有空寫,之後會加到 unregisterServer 內
  3. installer.nsi 好像壞掉了,有些 rime 目錄下的檔案找不到路徑
    Cheers!

@osfans
Copy link
Member

osfans commented Sep 5, 2016

@PCMan rime下我用了一个submodule 所以你需要先init一下 我試試

@osfans
Copy link
Member

osfans commented Sep 5, 2016

那win7还需要installer?或者放弃支援win7?

@PCMan
Copy link
Member Author

PCMan commented Sep 5, 2016

@osfans installer 是可以支持 win7 的,原則上 PIME 支持 vista 以上。
我有檢查 windows 版本,windows 8 以上才做額外的 registry 寫入

@PCMan
Copy link
Member Author

PCMan commented Sep 5, 2016

@KenLuoTW 可以幫測試如果刪掉 NSIS 當中 control panel 的 registr 設定,現有 C++ code 能否正確建立這些值嗎?如果可以應該可以清理 installer 了,我這兩天會把 unregister 部份寫完

@KenLuoTW
Copy link
Member

KenLuoTW commented Sep 5, 2016

使用最新的 CODE,大致上沒有問題,雖然後面的資料不會付予正確的值,
但是這個在 Win10 裡,只要去點設定鍵盤,它就會自己重新分配,完全不影響使用。

而在 HKU 下,各 User 也都有正確寫入。
2016-09-05

@KenLuoTW
Copy link
Member

KenLuoTW commented Sep 5, 2016

我寫的輸入法在最新的 code 裡會有些問題,請在我修復後,再行釋出 0.15,謝謝。
EasyIME/PIME#181
EasyIME/PIME#165

除了以上提到的問題,我發現還有一些新的 bug 出現,
明後兩天我沒時間,所以我會在星期四將這些新 bug 修復。

另外目前的 code,不管是新酷音或是其它模組,在選字後會在畫面上置頂殘留一道直線。
2016-09-05 1

@PCMan
Copy link
Member Author

PCMan commented Sep 5, 2016

@KenLuoTW @osfans 我把設定 registry 的 code 全部移進 PIMETextService.dll (32-bit)了。安裝解安裝都完成了,所以相關 code 已經從 NSIS 移除。
未來新增輸入法模組,不用手動改 NSIS 寫入 guid 那些東西到 control panel 了。 :)

@s793016
Copy link

s793016 commented Sep 8, 2016

或許是因為沒有在 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts] 留下正確的 keyboard layout 資訊?小狼毫有作哦。

語系問題可以參考 這篇 作法

@osfans
Copy link
Member

osfans commented Sep 9, 2016

據用戶回報 把zh-hans-cn 改成zh-cn就好了。難道是win7不支持RFC4646?

@PCMan
Copy link
Member Author

PCMan commented Sep 9, 2016

@osfans 我剛修好了,用 ResolveLocaleName() 可轉換
請測試最新的 git 版本 (需要 update libIME submodule)
Thanks!

@osfans
Copy link
Member

osfans commented Sep 13, 2016

@PCMan win7安裝好就可以用了。
另外python可不可以獨立出來?這樣安裝包小些,頻繁升級的話會方便些。

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

No branches or pull requests

5 participants