Rime输入法通过定义lua文件,可以实现获取当前时间日期的功能。
1.TIME
Rime是一款可以高度自定义的输入法,相关教程可以查看往期文章,关于时间获取是指输入一个指定关键字,输出当前时间,效果如下(我定义了time关键字):
实现如下:
①在用户文件夹中新建一个rime.lua文件加入如下代码
time_translator = require("time")
②在用户文件夹下新建文件夹Lua,并新建文件time.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--” local function translator(input, seg) if (input == "time") then --关键字更改,你也可以用or语句定义多个关键字 yield(Candidate("time", seg.start, seg._end, os.date("%H:%M"), " ")) yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分"), " ")) yield(Candidate("time", seg.start, seg._end, os.date("%H:%M:%S"), " ")) yield(Candidate("time", seg.start, seg._end, os.date("%H点%M分%S秒"), " ")) end end return translator
此处代码用lua语言编写而成,若有一定语言基础,根据自己的需求调整响应代码。
③在用户配置文件中开启(*.custom.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码 - lua_translator@time_translator #若你的配置文件中无engine/translator项,则加入 engine/+: translators/+: - lua_translator@time_translator #此处@后面的名称必需与rime.lua文件中的定义名称一致
2.DATE
与time类似,只需修改lua文件中的实现代码即可,我定义的关键字是date,效果如下:
实现如下:①在rime.lua文件加入如下代码
date_translator = require("date")
②在文件夹Lua中新建文件date.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--” local function translator(input, seg) if (input == "date") then ------------------------------------------------------------------------------------ --普通日期1,类似2022年01月02日 date1=os.date("%Y年%m月%d日") date_y=os.date("%Y") --取年 date_m=os.date("%m") --取月 date_d=os.date("%d") --取日 --yield(Candidate("date", seg.start, seg._end, date1, " ")) ------------------------------------------------------------------------------------ --普通日期2,类似2022年1月1日 num_m=os.date("%m")+0 num_m1=math.modf(num_m) num_d=os.date("%d")+0 num_d1=math.modf(num_d) date2=os.date("%Y年")..tostring(num_m1).."月"..tostring(num_d1).."日" yield(Candidate("date", seg.start, seg._end, date2, " ")) ------------------------------------------------------------------------------------ --普通日期3,类似1月1日 num_m=os.date("%m")+0 num_m1=math.modf(num_m) num_d=os.date("%d")+0 num_d1=math.modf(num_d) date3=tostring(num_m1).."月"..tostring(num_d1).."日" yield(Candidate("date", seg.start, seg._end, date3, " ")) yield(Candidate("date", seg.start, seg._end, os.date("%Y/%m/%d"), " ")) yield(Candidate("date", seg.start, seg._end, os.date("%Y-%m-%d"), " ")) ------------------------------------------------------------------------------------ --大写日期,类似二〇二〇年十一月二十六日 date_y=date_y:gsub("%d",{ ["1"]="一", ["2"]="二", ["3"]="三", ["4"]="四", ["5"]="五", ["6"]="六", ["7"]="七", ["8"]="八", ["9"]="九", ["0"]="〇", }) date_y=date_y.."年" date_m=date_m:gsub("%d",{ ["1"]="一", ["2"]="二", ["3"]="三", ["4"]="四", ["5"]="五", ["6"]="六", ["7"]="七", ["8"]="八", ["9"]="九", ["0"]="", }) date_m=date_m.."月" if num_m1==10 then date_m="十月" end if num_m1==11 then date_m="十一月" end if num_m1==12 then date_m="十二月" end date_d=date_d:gsub("%d",{ ["1"]="一", ["2"]="二", ["3"]="三", ["4"]="四", ["5"]="五", ["6"]="六", ["7"]="七", ["8"]="八", ["9"]="九", ["0"]="", }) date_d=date_d.."日" if num_d1>9 then if num_d1<19 then date_d="十"..string.sub(date_d,4,#date_d) end end if num_d1>19 then date_d=string.sub(date_d,1,3).."十"..string.sub(date_d,4,#date_d) end date4=date_y..date_m..date_d yield(Candidate("date", seg.start, seg._end, date4, " ")) ------------------------------------------------------------------------------------ --英文日期 local date_d=os.date("%d") local date_m=os.date("%m") local date_y=os.date("%Y") local date_m1="" local date_m2="" if date_m=="01" then date_m1="Jan." date_m2="January" end if date_m=="02" then date_m1="Feb." date_m2="February" end if date_m=="03" then date_m1="Mar." date_m2="March" end if date_m=="04" then date_m1="Apr." date_m2="April" end if date_m=="05" then date_m1="May." date_m2="May" end if date_m=="06" then date_m1="Jun." date_m2="June" end if date_m=="07" then date_m1="Jul." date_m2="July" end if date_m=="08" then date_m1="Aug." date_m2="August" end if date_m=="09" then date_m1="Sept." date_m2="September" end if date_m=="10" then date_m1="Oct." date_m2="October" end if date_m=="11" then date_m1="Nov." date_m2="November" end if date_m=="12" then date_m1="Dec." date_m2="December" end if date_d=="0" then symbal="st" elseif date_d=="1" then symbal="nd" elseif date_d=="2" then symbal="rd" else symbal="th" end date5=date_m1.." "..date_d..symbal..", "..date_y date6=date_m2.." "..date_d..symbal..", "..date_y yield(Candidate("date", seg.start, seg._end, date5, " ")) yield(Candidate("date", seg.start, seg._end, date6, " ")) yield(Candidate("date", seg.start, seg._end, os.date("%Y%m%d"), " ")) end end ------------------------------------------------------------------------------------ return translator
③在用户配置文件中开启(*.custom.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码 - lua_translator@date_translator #若你的配置文件中无engine/translator项,则加入 engine/+: translators/+: - lua_translator@date_translator #此处@后面的名称必需与rime.lua文件中的定义名称一致
3.WEEK
与time类似,只需修改lua文件中的实现代码即可,我定义的关键字是week,效果如下:
实现如下:①在rime.lua文件加入如下代码
week_translator = require("week")
②在
文件夹Lua中新建文件date.lua(此处的文件名必需与上文require中的内容相同),加入如下lua代码:
--lua语言中的注释用“--” function translator(input, seg) if (input == "week") then local day_w=os.date("%w") local day_w1="" local day_w2="" local day_w3="" if day_w=="0" then day_w1="星期日" day_w2="Sunday" day_w3="Sun." end if day_w=="1" then day_w1="星期一" day_w2="Monday" day_w3="Mon." end if day_w=="2" then day_w1="星期二" day_w2="Tuesday" day_w3="Tues." end if day_w=="3" then day_w1="星期三" day_w2="Wednesday" day_w3="Wed." end if day_w=="4" then day_w1="星期四" day_w2="Thursday" day_w3="Thur." end if day_w=="5" then day_w1="星期五" day_w2="Friday" day_w3="Fri." end if day_w=="6" then day_w1="星期六" day_w2="Saturday" day_w3="Sat." end yield(Candidate("date", seg.start, seg._end, day_w1, " ")) yield(Candidate("date", seg.start, seg._end, day_w2, " ")) yield(Candidate("date", seg.start, seg._end, day_w3, " ")) yield(Candidate("week", seg.start, seg._end, os.date("%w"),"")) end end return translator
③在用户配置文件中开启(*.custom.yaml文件)
#若你的配置文件中有engine/translator,则后面直接加入代码 - lua_translator@week_translator#若你的配置文件中无engine/translator项,则加入 engine/+: translators/+: - lua_translator@week_translator#此处@后面的名称必需与rime.lua文件中的定义名称一致
以上配置文件的合集打包可在公众号获取。
参考:感谢Github项目网址作者的方案。