hammerspoon/modules/inputstat.lua
sugood 82df63193b 1. 修改初始化逻辑,防止用户的配置文件更新的时候被修改。
2. 解决一些BUG(监听输入法状态卡死,咖啡因状态栏图标无故消失)
3. 选中文本后,输入翻译快捷键自动翻译选中的文本
2020-11-13 16:15:27 +08:00

132 lines
4.4 KiB
Lua

---
--- 在状态栏中显示输入法的状态
--- 例如:大小写状态,中英文状态,目前只适配搜狗输入法
--- Created by sugood(https://github.com/sugood).
--- DateTime: 2020/10/24 11:12
---
local sougouId = 'com.sogou.inputmethod.sogou.pinyin'
local shuangpinId = 'com.apple.inputmethod.SCIM.Shuangpin'
local abcId = 'com.apple.keylayout.ABC'
local mEventtap
function isChinese()
-- 用于保存当前输入法
local currentSourceID = hs.keycodes.currentSourceID()
return (currentSourceID == sougouId or currentSourceID == shuangpinId)
end
--解决hs.eventtap.new 有时候会卡死的问题。需要每秒检查下监听状态。如果卡死了就重新启动
local listenerEvent = function()
if mEventtap:isEnabled()==false then
print("重启监听事件")
mEventtap:start()
end
end
function initData()
local reverse = true
local imgInputAbc = '~/.hammerspoon/icon/input_abc.pdf'
local imgInputEn = '~/.hammerspoon/icon/input_en.pdf'
local imgInputCn = '~/.hammerspoon/icon/input_cn.pdf'
local imgInputU = '~/.hammerspoon/icon/input_u.pdf'
--初始化默认是英文输入法
hs.keycodes.currentSourceID(abcId)
if hs.hid.capslock.get() then
macMenubar:setIcon(imgInputU)
else
if(isChinese()) then
macMenubar:setIcon(imgInputCn)
else
macMenubar:setIcon(imgInputAbc)
end
end
mEventtap = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, function(event)
--获取shift按键信息
if event:getKeyCode() == 56 and event:getFlags().shift then
if (isChinese()) then
hs.hid.led.set('caps',false)
hs.alert.closeSpecific(showUUID)
if reverse then
reverse = false
macMenubar:setIcon(imgInputEn)
else
reverse = true
macMenubar:setIcon(imgInputCn)
end
else
if hs.hid.capslock.get()==false then
reverse = false
macMenubar:setIcon(imgInputAbc)
end
end
return
end
--获取capslock按键信息
tab =hs.eventtap.checkKeyboardModifiers("capslock")
local isCaptLock = tab["capslock"]
if isCaptLock then
if hs.hid.capslock.get() then
hs.hid.led.set('caps',true)
else
hs.hid.led.set('caps',false)
hs.alert.closeAll(0)
hs.alert.show("键盘小写 🔤- OFF")
if(isChinese()) then
if(reverse) then
macMenubar:setIcon(imgInputCn)
else
macMenubar:setIcon(imgInputEn)
end
else
macMenubar:setIcon(imgInputAbc)
end
end
else
if hs.hid.capslock.get() then
hs.hid.led.set('caps',true)
hs.alert.closeAll(0)
hs.alert.show("键盘大写 🅰️- ON")
macMenubar:setIcon(imgInputU)
else
--print("小写2")
hs.hid.led.set('caps',false)
end
end
return false
end)
mEventtap:start()
hs.timer.doEvery(1, listenerEvent) --有BUG,经常假死
hs.keycodes.inputSourceChanged(function()
--resetCaffeineMeun()
--切换输入法后查询下监听状态
listenerEvent()
-- 用于保存当前输入法
local currentSourceID = hs.keycodes.currentSourceID()
-- 如果当前输入法和上一个输入法相同,则直接返回
if currentSourceID == lastSourceID then
return
end
-- 用于保存当前输入法
local currentSourceID = hs.keycodes.currentSourceID()
hs.alert.closeAll(0)
-- 判断是系统自带的 ABC还是中文输入法
if (currentSourceID == abcId) then
--hs.alert.show("ABC")
macMenubar:setIcon(imgInputAbc)
reverse = false
elseif (currentSourceID == sougouId or currentSourceID == shuangpinId) then
--hs.alert.show("中文")
reverse = true
macMenubar:setIcon(imgInputCn)
end
-- 保存最后一个输入法源名称ds
lastSourceID = currentSourceID
end)
end
-- 初始化
initData()