macOS SierraでKarabinerが効かなくなったのでhammerspoon


技術ブログを無くしたのでちょっと場違い感すごいけどここに書くね。

USBでwindowsのキーボードを使っているのだけど、mac OSをSierraにあげたらKey Configの設定で使っていたKarabinerが効かなくなってしまったんだよ。

どうしたらいいのかとプログラマーズカフェで訪ねたらhammerspoonつかえばいいよと教えてもらったので、ちょっとluaを書いてみることにしたんだよ。

luaなんてラグナロクオンラインでホムンクルスのAIを書いて以来。さっぱり覚えてなくてどったんばったん大騒ぎ。

ググればそのものが出てくるかとおもったらみんな[esc]に割り当ててたりキーボードのイベントハンドラーをつかってたりして、ハンドリングしたあとのいべんとキャンセルの仕方がわからなかったしてちょっと目的と違って。こまったねー。

 

hs.hotkey.bindを使って書き直してみたので貼っておくね。homeキーとendキーのも挙動が嫌いなので書いておいたよ。

hs.hotkey.bind({}, vk_home, keyStroke({"cmd"}, vk_Left), {}, {})

みたいな書き方ができなくてちょっとまあ動けばいいか的になってるけどご愛嬌ね。

hammerspoonは

www.hammerspoon.org/

ここからダウンロードできるよ。

Preferencesをひらいてloginしたときに起動するようにしたら、config開いて、下記の内容に編集して、Reloadだよ。これなら内容がよくわからなくてもできるね!すごいね!

一応ESCのキーコードも書いておいたのでバックスラッシュじゃないのがいいっていうフレンズはvk_escにおきかえるといいよ。こういうのを弄るのが得意なフレンズがいたらあとはよろしくおねがいね。

 

local vk_jis_eisuu = 0x66
local vk_jis_kana = 0x68
local vk_backslash = 0x32
local vk_esc = 0x35
local vk_home = 0x73
local vk_end = 0x77
local vk_Right = 0x7c
local vk_Left = 0x7b
local isKanaMode = false

local function keyStroke(modifiers, character)
    hs.eventtap.keyStroke(modifiers, character)
end

HomeKey = function()
    keyStroke({"cmd"}, vk_Left)
end
ShiftHomeKey = function()
    keyStroke({"shift","cmd"}, vk_Left)
end
EndKey = function()
    keyStroke({"cmd"}, vk_Right)
end
ShiftEndKey = function()
    keyStroke({"shift","cmd"}, vk_Right)
end
KanaKey = function()
    if isKanaMode then
        keyStroke({}, vk_jis_eisuu)
        isKanaMode = false
    else
        keyStroke({}, vk_jis_kana)
        isKanaMode = true
    end
end
hs.hotkey.bind({}, vk_backslash, KanaKey, {}, {})
hs.hotkey.bind({}, vk_home, HomeKey, {}, {})
hs.hotkey.bind({"shift"}, vk_home, ShiftHomeKey, {}, {})
hs.hotkey.bind({}, vk_end, EndKey, {}, {})
hs.hotkey.bind({"shift"}, vk_end, ShiftEndKey, {}, {})