这样的话,拼音和 vim binding 终于不在打架了。

The content of ~/.hammerspoon/init.lua:

-- 全局变量保存 watcher 实例以避免重复创建
local escWatcher
 
function switchToUS()
    hs.keycodes.currentSourceID("com.apple.keylayout.US")
end
 
function myConfigFunction()
    -- 停止旧监听器并创建新实例
    if escWatcher then 
        print("stop monitoring ESC")
        escWatcher:stop()  
    end
    
     escWatcher = hs.eventtap.new({hs.eventtap.event.types.keyDown}, function(event)
         local keyCode = event:getKeyCode()
         if keyCode == 53 then -- 捕获 Esc 键
             print("Esc pressed,switch input source to U.S.")
             switchToUS()
         else 
            return false   -- 其他键继续传递给系统
        end  
    end):start() 
 
end
 
-- 延迟初始化(等待权限生效)
hs.timer.doAfter(2, myConfigFunction)
 
function sleepCallback(eventType)
    if eventType == hs.caffeinate.watcher.systemDidWake then 
       print("Device awake,restarting monitor")
        -- 仅在必要时重启配置
        myConfigFunction()  
    end  
end 
 
-- 单例模式创建睡眠监视器(避免重复)
local sleepWatcher = nil  
if not sleepWatcher then    
   sleepWatcher = hs.caffeinate.watcher.new(sleepCallback):start()
end