kmkのメモ帳

気が向いたときにLinuxだったり、プログラミングだったり、適当なメモを書いてます。

Blogは移転しました。

自動的にリダイレクトします。

MacBookAir(USキーボード)で通常時[Capus Lock]を [Command]キーに、ターミナルを使ってるときだけ[Capus Lock]を [Control]キーに設定する

私は写真のようなMacBookAir(USキーボード/バージョン:Yosemite)を使用しているのですが、 USキーボードだと[A]の左が[Caps Lock]となっています。

f:id:Q068891:20161008130217p:plain

普段、Windows or LinuxではHHKBを使用しているため、[A]の横にはぜひ[Control]が来て欲しいんです。

しかし、単純にMac標準の修飾キー設定で、[Caps Lock]を[Control]に変更するだけでは期待した操作になりませんでした。

例えば、WindowsChromeのタブを閉じるとき[Control]+[w]ですが、Macだと[Command]+[w]となっています。 このように、全てWindowsでの[Control]キー動作 == [Command]キー動作であれば問題はありませんでした。 [Caps Lock]を[Command]キーにしてしまえば良いだけですからね。

しかし、ターミナルソフトを使用する場合、Linuxとかでよくある[Control]+[a]で行頭に移動するという動作は、Macでも同じキー[Control]+[a]となってしまうのです。 これが[Command]+[a]だったら私にとって話は早かったのですが、、、

ぐだぐだ書きましたが、要件をまとめるとこんな感じです。

要件

[A]の左側に、通常時[Command]キーとなり、ターミナルを使用しているときだけ[Control]となるキーが欲しい。他のキーの動作は変えたくない。

結論から言うと下記方法1, 2, 3の複合技で設定できました。

設定方法(1~3全て実施すること)

  1. Macデフォルトの機能の修飾キー設定で、[Caps Lock] を [Control] に変更
  2. karabinerというソフトでターミナル以外では"左側"の [Control] は [Command] となるよう設定
  3. seilというソフトで"左側"の [Control]を、"右側"の [Control] と認識する用に設定 (この設定だと[Aの左側のキー/元Caps Lock/現Control]キーには適用されない)

↑の設定に辿り着くまでの経緯

ここまで辿り着くまでの経緯を簡単に書くと、まずはGoogleさんに聞いてみると下記のような素晴らしいブログが。

isseium.hateblo.jp

そこで、上記ブログ様の方法でターミナルの時だけ[Commnad]キーを[Ctrl]にしてみましたが、私の要件は満たせませんでした。

「[A]の左に通常時[Command]キーとなり、ターミナルを使用しているときだけ[Control]となるキーが欲しい。」までの要件は満たしているのですが、 「その他のキーは変えたくない」という要件を満たしていませんでした。

具体的に言うと、ターミナルを使用しているときに[A]の左のキーが[Control]にはなるのですが、[左下のCommand]まで[Control]となってしまいます。

私はよく[左下のCommand]+[Tab]でアプリを遷移させるので、ターミナルから他のアプリへの遷移がいつも通りにできなくて、非常にストレスを感じてしまいます。

ただ、上記ブログ様のおかげで設定方法はわかったので、少し考えてみて色々設定してみたらいけたという感じです。

実際の設定は下記1, 2, 3を全て実施すれば可能になります。

具体的な設定方法

1. Macデフォルトの機能の修飾キー設定で、[Caps Lock] を [Control] に変更

画像の通り、「システム設定 => キーボード => 修飾キー」で下記画面に移動して、[Caps Lock] を [Control] に変更します。

f:id:Q068891:20161008175438p:plain

次に2を実施します。

2. karabinerというソフトでターミナル以外では"左側"の [Control] は [Command] となるよう設定

まずは karabiner というソフトをインストールする必要があります。

下記karabinerの公式URLから自分のMacOSのバージョンにあったものをダウンロードしてインストールして下さい。

https://pqrs.org/osx/karabiner/index.html.ja

karabinerがインストールできたら、karabinerを起動しターミナル以外では"左側"の [Control] は [Command] となるよう設定していきます。

※karabinerインストール後、karabinerがMacの設定をいじれるようにアクセシビリティの許可をしておいてください。 https://pqrs.org/osx/karabiner/document.html.ja

デフォルトでは「ターミナル以外では"左側"の [Control] は [Command] となるよう設定する機能」はありませんが、karabinerは素晴らしいことに自分で設定を定義できます。

それではその設定が可能になるように自分で設定を定義していきます。

まずは、[Misc & Install」タブをクリックして後「Open private.xml」をクリックします。

するとprivate.xmlが置いてあるフォルダが開かれるので、適当なエディタでそのファイルを開いて下記の通り編集し上書き保存します。

<?xml version="1.0"?>
<root>
  <list>
        <item>
          <name>Control_L to Command_L (Except Terminal)</name>
          <not>TERMINAL</not>
          <identifier>remap.app_term_controlL2commandL_except_terminal</identifier>
          <autogen>--KeyToKey-- KeyCode::CONTROL_L, KeyCode::COMMAND_L</autogen>
        </item>
  </list>
</root>

自分で設定を作ったらそれを有効化する必要があるので、有効化していきます。 [Change Key]タブをクリックして、[Reload XML]をクリックします。すると、自分が設定した名前(\<name>タグで記述した名前)の項目が一覧に出てきます。

今回は「Control_L to Command_L (Except Terminal)」という名前の項目が増えているはずなので、それにチェックを入れて有効化します。これで終了です。

次に3を実施します。

3. seilというソフトで"左側"の [Control]を、"右側"の [Control] と認識する用に設定

1,2を設定しているだけだと、chrome等ターミナル以外のアプリを使用してる時に、[左下のControl]が[Command]キーとして認識してしまいます。 私はタブ移動を[左下のControl]+[Tab]で実施したいので、それを改善するための設定をしていきます。

まずはseilをインストールします。下記公式から自分のMacOSのバージョンにあったものをダウンロードしてインストールして下さい。

https://pqrs.org/osx/karabiner/seil.html.ja

インストール後、左下の[Control]が右側の[Control]と認識するように設定します。

※この方法だと[A]の左にあるキー[元Caps Lock/現Control]には影響しないようです。もしかしたらseilの仕様が変わったらダメになるかもしれませんね。

下記画像のように、Change Control_Lにチェックを入れて、keycodeを62とします。(keycode 62は右側のControlを意味します) f:id:Q068891:20161008141532p:plain

以上で設定は全て終わりです。

おわりに

今回の設定方法だと、左下のControlキーが右のControlとして認識してしまいますが、私のMacBookAirにはそもそも右側の[Control]キーが無く、特に問題は起きないのでこの設定で満足しています。

要件は満たしていますが、設定が結構複数にわたり複雑になってしまっているので、何かもっと良い方法があったら教えてくださいー。

# # #