右コマンドキーを日本語入力ON/OFFのトグルにする

右コマンドキーを、日本語入力切り換えのトグルにしたかったので、Karabiner-Elementsで設定してみました。

macOSをsierraにアップデートしたら、Karabinerが動かなくなりました。Hammerspoonを試したり、⌘英かなを試したりしたのですが、最終的に、Karabiner-Elementsに帰ってきました。

右コマンドをかな、左コマンドを英数として使うのであれば、どれで行っても問題なさそうです。

まずは、Karabiner-Elementsのインストール。brew cask install karabiner-elementsでインストールしています。

次に、システム環境設定 → キーボード → ショートカット → 入力ソース → 前の入力ソースを選択をF13などの使ってないキーに指定します。 キーボードに存在しないので押せないキーにしたほうがバッティングしなくてよさそうなので、F13にしています。

toggle-ime-right-command1.png

ただ、キーボードに存在しないのでキーコードを送出するためにソフトウェアキーボードを使います。

toggle-ime-right-command2.png

入力ソースのメニューから「キーボードビューアを表示」を選択して、ソフトウェアキーボードを表示します。

toggle-ime-right-command3.png

そして、前出の「前の入力ソースを選択」をダブルクリックしたあと、F13をクリックして設定します。

toggle-ime-right-command4.png

あとは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()

参考