KarabinerでMicrosoft Remote Desktop使用時のキー配列を設定する

OSXからWindowsへリモートデスクトップで作業する際に、commandキーがWinキーになっていたりで
コピペや日本語切り替えのショートカットが違ったりして以前からストレスを感じていました。
慣れればいいのでしょうが、慣れたところでストレスに変わりはないので、
いまさらですがいつも後回しにしていたこの件を本気で取り組むことにしました。

**※SierraではまだKarabiner自体が対応していないとのことで利用できないかもしれません。**

## 前提
- US配列のキーボード
- OSX 10.11まで
- Microsoft Remote Desktop（proxy環境下でもTCPポート3389あたりは空いてたりして可能な状態）
- Karabiner （SierraはKarabinerが現在未対応。代替のKarabiner-Elementsが簡易対応）


## やろうとしたこと
- OSX操作時は別にUS配列のショートカットはそのまま利用
- RDPでWindows操作時も似たようなショートカットで操作したい
- **RDP使用中にCommandキーを押すとWinキーが起動するのが気に入らない、本当に気に入らない**
- Win内での日本語切り替えを出来れば左右のCommandキーで切り替えたい
 - OSX側で左Commandキーで「英数」、右Commandキーで「かな」という運用をしているため

## そうだprivate.xmlがあった

ということで、Karabinerだけでなんとかしてみましょう。

`Karabiner→Preferences→Misc & Uninstall`タブ

<img width="600" alt="スクリーンショット 2016-10-17 11.32.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/30278/0ffce4d5-fd6f-eeb4-4779-406581ab4884.png">

この`Open private.xml`ボタンでFinderが開きますのでお好きなエディタで編集です。

## 書式

### 特定のアプリのみキーリマップする場合
root要素配下に`appdef`を追加し、その中に`appname（任意）`、`equal（特定の値があるので調べる。調べ方は後述）`を指定。

#### equalの調べ方
- 指定したいアプリを起動。
- OSXのメニューバーにアイコンがあればそこからでもいいので、`Launch EventViewer`で起動
- Appタブ内のApplication Bundle Identifierの値を見る

![スクリーンショット 2016-10-17 11.51.37.png](https://qiita-image-store.s3.amazonaws.com/0/30278/a354bf82-44f7-bfae-3a0c-015edaae2c98.png)

ということでこのように。

```
<appdef>
  <appname>Microsoft Remote Desktop</appname>
  <equal>com.microsift.rdc.mac</equal>
</appdef>
```

`item`要素内は下記。

- `name` : KarabinerのPreferencesに表示させる名前
- `identifier` : private.hogeみたいな形で指定。hogeは使い回しできず、一意の名前に。ここがないとチェックボックスが表示されない。
- `only` : アプリ名。EventViewerのApp内、`current appnames`にアプリを選択した時に出てくる名前。これがないと特定のアプリだけで動かす、ということができない
- `autogen` : ここが動作の設定。

### autogenの書き方
下記リンクを参照してください。

- [private.xml Reference Manual](https://pqrs.org/osx/karabiner/xml.html.ja)
- [KeyCode.data](https://github.com/tekezo/Karabiner/blob/version_10.5.0/src/bridge/generator/keycode/data/KeyCode.data)
- [ModifierFlag.data](https://github.com/tekezo/Karabiner/blob/version_10.5.0/src/bridge/generator/keycode/data/ModifierFlag.data)

## 設定のまとめ

以下は自分用の設定ですが

```
Win内での日本語切り替えを出来れば左右のCommandキーで切り替えたい
```

これが解消出来てません。
左commandキーを英数にすること自体は簡単ですが、
これをやるとctrlキーの配置都合上win側のショートカットが使えないという事になってしまったからです。

- 左commandキーをCtrlにリマップ
- 右commandキーで英数/かなの入力切り替えをトグルする

ということに変更しておおまかな目的は達しました。

```
<?xml version="1.0"?>
<root>
  <appdef>
    <appname>Microsoft Remote Desktop</appname>
    <equal>com.microsift.rdc.mac</equal>
  </appdef>
  <item>
    <name>Use Left Command as Left Control in Microsoft Remote Desktop</name>
    <identifier>private.rdc_l_control</identifier>
    <only>REMOTEDESKTOPCONNECTION</only>
    <autogen>
      __KeyToKey__
      KeyCode::COMMAND_L,
      KeyCode::CONTROL_L
    </autogen>
  </item>
  <item>
    <name>Use Right Command as EISUU KANA toggle in Microsoft Remote Desktop</name>
    <identifier>private.rdc_eisuu_kana</identifier>
    <only>REMOTEDESKTOPCONNECTION</only>
    <autogen>
      __KeyToKey__
      KeyCode::COMMAND_R,
      KeyCode::JIS_PC_HAN_ZEN
    </autogen>
  </item>
</root>
```

これが使えれば、他のアプリに対しても似たような設定でリマップできるかと思います。

## 参考
- [Karabiner の private.xml 設定方法](http://qiita.com/altitude3190/items/bbef986ff8dd288b2641)
- [private.xml Reference Manual](https://pqrs.org/osx/karabiner/xml.html.ja)
- [KeyCode.data](https://github.com/tekezo/Karabiner/blob/version_10.5.0/src/bridge/generator/keycode/data/KeyCode.data)
- [ModifierFlag.data](https://github.com/tekezo/Karabiner/blob/version_10.5.0/src/bridge/generator/keycode/data/ModifierFlag.data)