Open shewer opened 2 years ago
用lua 自載
function auto_load(env)
local config=env.engine.schema.config
for _,path in next, {"processors","segments","translators","filters"} do
local config_list= config:get_list("engine/" .. path)
for i=0,config_list.size do
local module = config:get_value_at(i):match("^lua_%a+@(.*)$")
module= module:match("^(.+)@.+$") or module
_G[module] =_G[module] and _G[module] or require(module)
end
end
end
原本的设计是不强求 lua_component 必定对应一个可以被 require 的文件,而是对应一个 global function(或者 table)就可以。这样相比 require 自载可以理灵活,比如简单的 component 全部写到 rime.lua
就可以了;有些复杂的功能需要在一个文件里面写多个 component 。这两种情况自载都不容易做到。
不过这个想法很合理:需要有某种办法能自动地载入他人做好的功能模块,而不是要用户自己编辑 rime.lua
,类似 #151 的要求。
我剛才用 luaL_dostring() ok,前提是 klass 要和 moduel 同名
這是在 create lua_component時發現 找不到 _G[klass]
可省去 rime.lua 中編輯 require 也可以不放在global
ex:
在 https://github.com/hchunhui/librime-lua/blob/8b37d5541b0341a07ed7517c78df1a09268001fd/src/lua_gears.cc#L36-L40
插入