右コマンドキーを日本語入力ON/OFFのトグルにする
右コマンドキーを、日本語入力切り換えのトグルにしたかったので、Karabiner-Elementsで設定してみました。
macOSをsierraにアップデートしたら、Karabinerが動かなくなりました。Hammerspoonを試したり、⌘英かなを試したりしたのですが、最終的に、Karabiner-Elementsに帰ってきました。
右コマンドをかな、左コマンドを英数として使うのであれば、どれで行っても問題なさそうです。
まずは、Karabiner-Elementsのインストール。brew cask install karabiner-elements
でインストールしています。
次に、システム環境設定 → キーボード → ショートカット → 入力ソース → 前の入力ソースを選択をF13などの使ってないキーに指定します。 キーボードに存在しないので押せないキーにしたほうがバッティングしなくてよさそうなので、F13にしています。
ただ、キーボードに存在しないのでキーコードを送出するためにソフトウェアキーボードを使います。
入力ソースのメニューから「キーボードビューアを表示」を選択して、ソフトウェアキーボードを表示します。
そして、前出の「前の入力ソースを選択」をダブルクリックしたあと、F13をクリックして設定します。
あとはKarabiner-Elementsの方で、右コマンドをF13に置き換えてれば完了。
おまけ
hammerspoonで設定したバージョン。
こちらは右コマンドキーを置き換えるのではなく、そのまま、コマンドキーを修飾キーとして押した状態になる。そのため、押したまま次の動作ができるが、意図しない挙動が発動する可能性があるので、あまりよくないかもしれない。
CocoaAPIをよく理解しないとこのあたりの処理は難しい。
local KEY_CMD_RIGHT = 54
local KEY_EISUU = 102
local KEY_KANA = 104
local function isInputSourceKana()
return hs.keycodes.currentMethod() ~= nil
end
local function keyStroke(modifiers, character)
hs.eventtap.keyStroke(modifiers, character, 5000)
end
local function toggleIME()
if isInputSourceKana() then
keyStroke({}, KEY_EISUU)
else
keyStroke({}, KEY_KANA)
end
end
local tap = hs.eventtap.new({hs.eventtap.event.types.flagsChanged}, function(e)
local c = e:getKeyCode()
local f = e:getFlags()
if f['cmd'] and c == KEY_CMD_RIGHT then toggleIME() end
end)
tap:start()