|
|
|
log = hs.logger.new('ime', 'debug')
|
|
|
|
|
|
|
|
local function zh()
|
|
|
|
hs.keycodes.currentSourceID("im.rime.inputmethod.Squirrel.Rime")
|
|
|
|
end
|
|
|
|
|
|
|
|
local function en()
|
|
|
|
hs.keycodes.currentSourceID("com.apple.keylayout.ABC")
|
|
|
|
end
|
|
|
|
|
|
|
|
local function ko()
|
|
|
|
hs.keycodes.currentSourceID("com.apple.inputmethod.Korean.HNCRomaja")
|
|
|
|
end
|
|
|
|
|
|
|
|
-- app to expected ime config
|
|
|
|
local app2Ime = {
|
|
|
|
{'/System/Library/CoreServices/Finder.app', 'zh'},
|
|
|
|
{'/Applications/Alfred 4.app', 'zh'},
|
|
|
|
{'/Applications/Bitwarden.app', 'zh'},
|
|
|
|
{'/Applications/Dash.app', 'zh'},
|
|
|
|
{'/Applications/iTerm.app', 'zh'},
|
|
|
|
{'/Applications/Lark.app', 'zh'},
|
|
|
|
{'/Applications/Xcode.app', 'zh'},
|
|
|
|
{'/Applications/GoldenDict.app', 'zh'},
|
|
|
|
{'/Applications/Google Chrome.app', 'zh'},
|
|
|
|
{'/Applications/DingTalk.app', 'zh'},
|
|
|
|
{'/Applications/KakaoTalk.app', 'zh'},
|
|
|
|
{'/Applications/kitty.app', 'zh'},
|
|
|
|
{'/Applications/NeteaseMusic.app', 'zh'},
|
|
|
|
{'/Applications/System Preferences.app', 'zh'},
|
|
|
|
{'/Applications/MindNode.app', 'zh'},
|
|
|
|
{'/Applications/Obsidian.app', 'zh'},
|
|
|
|
{'/Applications/Preview.app', 'zh'},
|
|
|
|
{'/Applications/Sketch.app', 'zh'},
|
|
|
|
{'/Applications/wechatwebdevtools.app', 'zh'},
|
|
|
|
{'/Applications/WeChat.app', 'zh'},
|
|
|
|
{'/Users/einverne/Applications/JetBrains Toolbox/IntelliJ IDEA Ultimate.app', 'zh'},
|
|
|
|
{'/Users/einverne/Applications/JetBrains Toolbox/PyCharm Professional.app', 'zh'},
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateFocusAppInputMethod()
|
|
|
|
local focusAppPath = hs.window.frontmostWindow():application():path()
|
|
|
|
log.d(focusAppPath)
|
|
|
|
-- hs.alert.show(focusAppPath)
|
|
|
|
for index, app in pairs(app2Ime) do
|
|
|
|
local appPath = app[1]
|
|
|
|
local expectedIme = app[2]
|
|
|
|
|
|
|
|
if focusAppPath == appPath then
|
|
|
|
if expectedIme == 'en' then
|
|
|
|
en()
|
|
|
|
elseif expectedIme == 'zh' then
|
|
|
|
zh()
|
|
|
|
else
|
|
|
|
ko()
|
|
|
|
end
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- helper hotkey to figure out the app path and name of current focused window
|
|
|
|
hs.hotkey.bind({'ctrl', 'cmd'}, ".", function()
|
|
|
|
hs.alert.show("App path: "
|
|
|
|
..hs.window.focusedWindow():application():path()
|
|
|
|
.."\n"
|
|
|
|
.."App name: "
|
|
|
|
..hs.window.focusedWindow():application():name()
|
|
|
|
.."\n"
|
|
|
|
.."IM source id: "
|
|
|
|
..hs.keycodes.currentSourceID())
|
|
|
|
end)
|
|
|
|
|
|
|
|
-- Handle cursor focus and application's screen manage.
|
|
|
|
function applicationWatcher(appName, eventType, appObject)
|
|
|
|
log.i(eventType)
|
|
|
|
log.i("tet")
|
|
|
|
log.i(hs.application.watcher.activated)
|
|
|
|
if eventType == hs.application.watcher.activated then
|
|
|
|
updateFocusAppInputMethod()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
appWatcher = hs.application.watcher.new(applicationWatcher)
|
|
|
|
appWatcher:start()
|
|
|
|
|