Open ChihSee-Hsie opened 1 year ago
context:get_option("ascii_mode") -- return bool context:set_option("ascii_mode", true) -- (string key, bool) 如果要找 librime component 調用開關有那些 可以 搜尋 librime/src 中 get_option
你可以看一下 librime src/rime/gear/ascii_composer.cc 中英文模式
感谢指点。但我看过之后还是不太理解。这里的 context:get_option
放在 ascii_composer.cc
中,为 librime
提供了选项,那么在 lua
语言中,我要使用类似的语句,是应该在 rime.lua
中引用过对应的函数过后,再使用这一语句将它绑定到选项吗?如:
local charset = require("charset")
CJK = charset.CJK_filter
env.engine.context:get_option("CJK")
然后在指定的 yaml
文件之 switches
中加入名为 CJK
的选项?
在脚本开发指南中确实看到了有关的文档,但是自己写不出来。我一直不知道 env.engine.context:get_option("option_name")
这一语句的具体工作原理是什么,应该放在哪里——以 charset.lua
为例(脚本内容和 rime.lua
分开),应该放在 charset.lua
中,还是 rime.lua
中呢?
贴入直接相关的代码吧:
lua/charset.lua
......
local function CJK(input)
-- 使用 `iter()` 遍历所有输入候选项
for cand in input:iter() do
-- 如果当前候选项 `cand` 不含 CJK 扩展汉字
if (not exists(is_cjk_ext, cand.text))
then
-- 结果中仍保留此候选
yield(cand)
end
--[[ 上述条件不满足时,当前的候选 `cand` 没有被 yield。
因此过滤结果中将不含有该候选。
--]]
end
end
......
return {CJK_filter = CJK}
rime.lua
local charset = require("charset")
CJK = charset.CJK_filter
env.engine.context:get_option("CJK")
xxx.custom.yaml
patch:
switches:
- name: CJK
reset: 1
states: ["UTF-8", "CJK"]
engine/filters/@next:
lua_filter@CJK
在脚本开发指南中确实看到了有关的文档,但是自己写不出来。我一直不知道
env.engine.context:get_option("option_name")
这一语句的具体工作原理是什么,应该放在哪里——以charset.lua
为例(脚本内容和rime.lua
分开),应该放在charset.lua
中,还是rime.lua
中呢?贴入直接相关的代码吧:
lua/charset.lua
local function CJK(input) -- 使用 `iter()` 遍历所有输入候选项 for cand in input:iter() do -- JCK fileter enable if ctx:get_option("CJK") then -- 如果当前候选项 `cand` 不含 CJK 扩展汉字 ,送出候選 if not exists(is_cjk_ext, cand.text) then yield(cand) end else -- bypass all candidates yield( cand) end
end end
return {CJK_filter = CJK}
>
> `rime.lua`
>
> ```
> local charset = require("charset")
> CJK = charset.CJK_filter
> env.engine.context:get_option("CJK")
> ```
>
> `xxx.custom.yaml`
>
> ```
> patch:
> switches:
> - name: CJK
> reset: 1
> states: ["UTF-8", "CJK"]
>
> engine/filters/@next:
> lua_filter@CJK
> ```
env.engine.context:get_option("option_name")
这一语句的具体工作原理是什么,应该放在哪里——以charset.lua
为例(脚本内容和rime.lua
分开),应该放在charset.lua
中,还是rime.lua
中呢?
应该放在 lua/charset.lua 中,还是 rime.lua 中呢? 兩個都可以,寫法不同,變化多多!
放在 charset.lua 中調取方式也有兩種! schema 中前面用「*」調取,不用另外在 rime.lua 寫 require 引用! https://github.com/hchunhui/librime-lua/wiki/Scripting#%E5%BC%95%E7%94%A8%E6%A8%A1%E5%9D%97
schema.yaml
engine:
filters:
+ - lua_filter@filter
switches
+ - {name: filter, reset: 0, states: ["关", "开"]}
`rime.lua`
```diff
+ require("filter")
lua/filter.lua
local opction_name
return{
init=function(env)
local name=env.name_space:match("^%*?(.*)$")
opction_name=env.engine.schema.config:get_string(name.."/opction_name") or name
end,
tags_match=function(seg,env)
return env.engine.context:get_option(opction_name)
end,
func=function(input,env)
for cand in input:iter() do
end
end
}
如题,虽然在这篇文档中提到「可以
env.engine.context:get_option("option_name")
方式綁定到switch
開關/key_binder
快捷鍵」,但具体将这条语句放在哪里、怎么放、option_name
用什么字段代换都没有给出实例。我对lua
语言缺乏了解,一时也找不到可资参考的材料,所以在这里求助,希望方家给出一个实例,此致 祝安