EasyIME / forum

8 stars 1 forks source link

討論 release 0.15 #8

Open PCMan opened 8 years ago

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

jessy1092 commented 8 years ago

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

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

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

PCMan commented 8 years ago

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

PCMan commented 8 years ago

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

osfans commented 8 years ago

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

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

PCMan commented 8 years ago

@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 commented 8 years ago

這也是一個不錯的辦法。

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

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

PCMan commented 8 years ago

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

osfans commented 8 years ago

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

osfans commented 8 years ago

忘了,還有個問題,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 commented 8 years ago

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

PCMan commented 8 years ago

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

PCMan commented 8 years ago

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

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

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

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

PCMan commented 8 years ago

@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 commented 8 years ago

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

osfans commented 8 years ago

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

KenLuoTW commented 8 years ago

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

osfans commented 8 years ago

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

KenLuoTW commented 8 years ago

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

osfans commented 8 years ago

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

KenLuoTW commented 8 years ago

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

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

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

osfans commented 8 years ago

https://github.com/EasyIME/PIME/commit/e719a0dfe9649deac3472efbdcf4c3ad368c0e51 有在Installer中加入簡體中文,不過ieprotectedpage.ini中的還沒有翻譯。

PCMan commented 8 years ago

@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 commented 8 years ago

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

PCMan commented 8 years ago

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

KenLuoTW commented 8 years ago

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

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

KenLuoTW commented 8 years ago

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

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

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

PCMan commented 8 years ago

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

s793016 commented 8 years ago

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

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

osfans commented 8 years ago

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

PCMan commented 8 years ago

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

osfans commented 8 years ago

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