Mac
AppleScript
Atok

Mac OS Xでオリジナルのキーレイアウト変更にショートカットを割り当てる

More than 1 year has passed since last update.

初めに

この問題の最善の解決方法が最下部にあります。
備忘録として題意を達成するための経緯を記します

Mac OS Xでインプットソースとして日本語入力(ja)とオリジナルキーレイアウト(orig)を使っていたんだけれど切り替えがうまく行かなくて困ってた。
この二つのインプットソースと標準のU.S.(us)で三つのインプットソースになっているため、コードのコメント文などでCommand+Spaceで切り替えを行う際に
ja -> orig -> ja -> orig
と調子よく行っているうちはいいんだけれど、Command+Spaceを間違って二回入力しちゃうと
ja -> orig -> ja -> us -> ja -> us -> ja
ってなってオリジナルキーレイアウトに戻らなくなっちゃう問題。

ちなみに「ことえり」だとショートカットがある模様。

超カスタマイズツールKarabiner

まずはKarabinerというツールでインプットソースを直接指定できるようにする。
https://pqrs.org/osx/karabiner/index.html.ja
従来はKeyRemap4MacBookっていう名前だったみたい。

こちらから「For Japanese」の
「Change Command_L Key
Command_L x2 to EISUU
Change Command_R Key
Command_L x2 to KANA
としておく。
これで左コマンドキーを二回入力でUSレイアウト、右コマンドキーを二回入力で日本語入力に切り替わる。
ちなみに僕はキーボード自体がUSレイアウトなのでカナキーとかが無い。

でもこれだと

でもこれだとせっかくつくったオリジナルレイアウトに選択できない。ということで標準のAppleScriptと「FastScript」というソフトで切り替えれるようにする。

AppleScript

OS標準の「Script Editor」を起動して下記のコードをコピペする。

on changeKeyboardLayout(layoutName)
    tell application "System Events" to tell process "SystemUIServer"
        tell (1st menu bar item of menu bar 1 whose description is "text input") to {click, click (menu 1's menu item layoutName)}
    end tell
end changeKeyboardLayout

changeKeyboardLayout("origninal_layout")

http://apple.stackexchange.com/questions/61250/bind-each-keyboard-layout-to-keys-combination

最終行の original_layout は環境によって適宜変更。

スクリプト自体はCommand+Rで実行できるのでちゃんと動くことを確認しておく。
次に保存してファイルを/Library/Scripts移動する。
「Script Editor」での保存、移動がちょっと分かりにくいんだけれど、まずは保存してメニューの「File>Move To」を選択すると良い。
移動先がroot権限なので一旦デスクトップなどに保存して、ターミナルで移動
すると良い(直接いけるかも?)

shell> mv ~/original_layout /Library/Scripts

AppleScriptにショートカットを割り当て

「FastScripts」というソフトでAppleScriptにショートカットを割り当てる。
インストールが終わって起動したら、画面上部のナビゲーションバー?にあるアイコンから「FastScripts>Preferences」を選択する。
「Script Shotrcuts」から先ほど移動したスクリプトをダブルクリック。
今回は先ほどのKarabinerに割り当てた「左コマンドキー二回」を入力する。
「修飾キーが無いとまずいかもしれないけど大丈夫?」と聞かれるけどそのままOK。

以上

切り替えられるようになったけれど…

これで「オリジナルのキーレイアウトをショートカットで選択」ができるようになった!

のだけれど…、遅延があるんですね。
AppleScriptの実行に0.5秒ぐらいの遅延があるため、頻繁に切り替えを行うタイプの自分では入力漏れが頻発…。これじゃぁ使い物にならない。残念。

USレイアウトの削除

後になって調べるとどうやらU.S.レイアウトは消せる模様で、そもそもこれをすれば解決という事に…。
いままで何をしてたのか…やったね!

Macで入力ソースにいつの間にかU.S.が入ってきて消せない時の対処法
http://rcmdnk.github.io/blog/2014/05/23/computer-mac/

上記サイトの通り、ことえりの日本語をオンにするとUSレイアウトが削除できる。
よって

ことえり日本語をオン

USを削除

Karabinerで英数とカナを割り振る

英数キーが自分のレイアウトに対応するか心配だったけどうまく変更できました。
これで英数とカナをすぐに切り替えられるようになりました。