rime / librime

Rime Input Method Engine, the core library
https://rime.im
BSD 3-Clause "New" or "Revised" License
3.37k stars 551 forks source link

编译后运行rime_console程序卡死在workspace_update.Run(&deployer) #39

Closed Geistyp closed 7 years ago

Geistyp commented 9 years ago

同样也编译运行过rime_api_console,控制台在显示

initializing... message: [0] [deploy] start

后,卡在那无法继续运行

ghost commented 9 years ago

等,直到词库编译完毕。

Geistyp commented 9 years ago

知道大概需要编译多长时间?只有第一次这样吗?是否有编译好的词库文件下载?

ghost commented 9 years ago

大概几分钟吧,配置没变的话只要一次。

initializing...
message: [0] [deploy] start
message: [0] [deploy] success
ready.
lotem commented 9 years ago

是這樣設計的,方案部署完成之前引擎無法工作,控制檯程序就要等在那裏,不是卡死。 啓用的方案、詞典越多,部署所花的時間越長。 實際的輸入法則是直接返回輸入的字符,並在後臺線程做部署。

@osfans 我有意向把部署改成惰性的,如果要投入使用的配置或詞典需要更新,就暫時停用加載他的模塊,在後臺部署,完成後通知該模塊啓用。但這個又是個要通盤考慮的工程,而且未必有多少看得見的改進。 好處是各個模塊負責管理自己的資源,沒有全局的部署操作,框架擴展性更好。

Geistyp commented 9 years ago

release能很快的编译出来,但是debug 2个小时也还一直卡在那里

osfans commented 9 years ago

換個小方案呢?打開全部log看看? 我的android版,在destroy時會卡住。但deploy沒有問題,幾分鐘就好。

Geistyp commented 9 years ago

release编译出来的debug能用就好了,现在比较头痛的是没有文档或者例子告诉我如何使用rime_api.h,比如我要切换简繁

rime->set_option(session_id, "simplification", true);

RimeStatus已经显示is_simplified,但是输出的还是繁体

osfans commented 9 years ago

要把opencc的數據和配置都放在opencc目錄。

Geistyp commented 9 years ago

目录结构是什么样的?我尝试把opencc/data目录下的文件都拷贝到应用程序的根目录,也试过放到opencc的目录底下,但是opencc依然无法正常工作,也没有任何提示

osfans commented 9 years ago

參考我這個: 注意裏面是ocd文件和json文件

https://github.com/osfans/android-rime/releases/download/v3.0-alpha/rime.zip

Geistyp commented 9 years ago

情况依旧(我需要把默认的.txt改成.ocd吗?),我发现我直接使用opencc

opencc_t t2s = opencc_open(OPENCC_DEFAULT_CONFIG_TRAD_TO_SIMP);

返回的是 0xffffffff,似乎opencc无法正常初始化

Geistyp commented 9 years ago

用 opencc_error() 看到错误了

Invalid format: Invalid OpenCC dictionary header

osfans commented 9 years ago

ocd是從txt生成的,arm版和x86版的ocd格式應該不一樣,所以要生成你自己的ocd

Geistyp commented 9 years ago

我使用你的ocd后能用opencc_convert_utf8()将繁体转换为简体了,不过rime设置

session_id = rime->create_session();
rime->set_option(session_id, "simplification", true);

还是没有用。我设置后已经显示(我是在 rime_api_console 的例子的基础上修改的)

status: composing simplified

ghost commented 9 years ago

先不要直接改代码。看看你用的是哪个分支的代码,OpenCC 的版本,还有输入方案是怎么配置的(新旧 OpenCC 的配置方式不同)。

我用 develop 分支,OpenCC 1.2 的 ocd 文件,再改一改老旧的 luna_pinjin.schema.yaml

  - options: [ zh_trad, zh_tw, zh_simp ]
    states:
      - 傳統漢字
      - 臺灣正體
      - 簡化字
    reset: 2  # 直接改用简化字

测试结果:

initializing...
message: [0] [deploy] start
message: [0] [deploy] success
ready.
toufa
schema: luna_pinyin / 朙月拼音
status: composing
[tou fa]
page: 1  (of size 5)
1. [头发]〔頭髮〕
2.  投法
3.  偷发 〔偷發〕
4.  偷法
5.  头 〔頭〕
1
commit: 头发
schema: luna_pinyin / 朙月拼音
status:
(not composing)

建议先熟悉输入法的配置方式再研究代码。

ghost commented 9 years ago

@Geistyp

目录结构是什么样的?

我没细看代码,估计就和用户个人配置文件夹一样,对应 RIME 根配置路径。平時怎么配置 RIME 就怎么给 api console 配置。

lotem commented 9 years ago

rime_api_console 把共享文件夾和用戶文件夾都設爲當前工作目錄 . ,我一般這樣執行: cd build/bin; Debug/rime_api_console 因爲數據都在 build/bin 目錄,所以以他爲工作目錄。

Geistyp commented 9 years ago

@jakwings 我用的分支也是develop,不过代码生成改成 /MD 的方式

  - options: [ zh_trad, zh_tw, zh_simp ]
    states:
      - 傳統漢字
      - 臺灣正體
      - 簡化字
    reset: 2  # 直接改用简化字

直接修改这个后有效了,非常感谢。另外,这个参数能使用 rime api来修改吗?

ghost commented 9 years ago

另外,这个参数能使用 rime api来修改吗?

试了下可以。zh_trad、zh_tw、zh_simp 应该是互斥的吧。噢,刚才又试了下,它们不是互斥的。

osfans commented 9 years ago

@jakwings 我試驗了下,雖然直接調set_option設定不是互斥的,但是,F4調出來的菜單是互斥的。代碼中使用了radio單選類。

ghost commented 9 years ago

@osfans

我試驗了下,雖然直接調set_option設定不是互斥的,但是,F4調出來的菜單是互斥的。代碼中使用了radio單選類。

那看來是還沒有提供便利的 API……不用選單,用自定快捷鍵直接切換也是不互斥。 和你的另一個提問相關:#42 src/gear/switch_translator.cc

kahaani commented 8 years ago

@Geistyp debug 版的 deploy 会比 release 版慢,但不至于卡住。通过 log 可以观察进行到哪个阶段。

release 版得到的二进制文件在 debug 版下也能用。


@osfans 提供的 OpenCC 链接已失效,更新链接: https://github.com/osfans/trime/releases/download/v3.0-beta/opencc.7z

或者从 OpenCC 编译得到,拷贝文件:

OpenCC\build\data\*.ocd -> librime\build\bin\opencc
OpenCC\data\config\*.json -> librime\build\bin\opencc

简繁切换除了 @jakwings 提供的方法,还有 set option 命令。比如 luna_pinjin.schema.yaml 的设置:

switches:
  - options: [ zh_trad, zh_tw, zh_simp ]
    states:
      - 傳統漢字
      - 臺灣正體
      - 簡化字

rime_api_console 中可以这样:

set option zh_simp
Prcuvu commented 7 years ago

这个问题还有进一步的反馈吗?