Macのhキーのチャタリングをhammerspoonでソフトウェア的に解決する

はじめに

三ヶ月くらい前にMacBookPro(2016 Late)を買ったのですが,hキーが一回押しただけなのに二回押されてしまうことが頻出してきました.
具体的には this と打ったつもりがthihs になったり thhis になったりしてとてもじゃないけどプログラミングできない環境になりました.
自然に治る気配もないので修理にだすのも考えたのですが,ハードウェア的な問題ですしもしかしたら修理費がかさむかもしれないのは嫌です.
というわけで,キーボードイベントを監視し何でも出来るhammerspoonくんを使ってソフトウェア的にこの問題を解決しました.

ソースコード

-- 0.2秒程度以内に二回以上押されると無視するようにする
local hPressed = false
function blockDoublePressedHKey(e)
    -- h キーは 4 番なのでそれ以外は無視
    if e:getKeyCode() ~= 4 then return false end
    if not hPressed then
        hPressed = true
        hs.timer.doAfter(0.18,function() hPressed = false end)
        return false
    else
        -- print("blocked H Key !!")
        return true
    end
end

hs.eventtap.new(
    {hs.eventtap.event.types.keyDown},
    blockDoublePressedHKey
):start()

Tips

hs.hotkey.bind を使わないところがミソで,この関数では書き換えた先が同じキーのイベントの時にhs.eventtap.event.newKeyEventを書き換えてしまい,不都合が生じます.

宣伝

https://github.com/Muratam/dotfiles/blob/master/home/.hammerspoon/init.lua
にてWindowsの「Win+上下左右」の窓移動をMacで再現するやつとかも置いてます.
MacのSplitWindowとかクソなんで…

参考

https://qiita.com/false-git@github/items/73a63537998e6ba3978a

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.