LoginSignup
6
6

More than 5 years have passed since last update.

Karabinerの__KeyOverlaidModifier__の使い方を覚えた

Posted at

KeyOverlaidModifierとは

  • 任意のキーを修飾キーとして利用できる機能
  • 「s」を押している間だけ、「hjkl」が「←↓↑→」になる、とかできる
  • __SimultaneousKeyPresses__との違いは、上の例で言えば「sを押したままh連打」が「←連打」になること
    • __SimultaneousKeyPresses__で「sとh同時押し」を「←」に割り当てても「←hhhhh...」になってしまう

使い方

  • あるitem要素内で__BlockUntilKeyUp__を記述し、「定義した修飾キーを押している間」のみ有効なリマップを定義する
    • hidden="true"プロパティを与えることで、これ自体は設定画面に表示されず、また常に有効になる
    • 子要素のidentifiervk_config="true"プロパティを与えることで、別のitemから参照できる
  • 別のitem要素内で、任意のキーを、蒸気のitemを参照する修飾キーに割り当てる

最初から入っている例

応用

__KeyOverlaidModifier__の書き方

  • そこだけ取り出すと以下のようになっている。
    <autogen>
      __KeyOverlaidModifier__
      KeyCode::S, ModifierFlag::NONE, <!-- 対象キーコンビネーション -->
      @begin <!-- 修飾キーとしての(ホールド時の)送信されるキーコンビネーション -->
      KeyCode::VK_CONFIG_SYNC_KEYDOWNUP_notsave_custom_vi_mode,
      @end
      @begin <!-- 通常の(プッシュ時の)送信されるキーコンビネーション -->
      KeyCode::S
      @end
    </autogen>
  • __KeyOverlaidModifier__は、厳密には、あるキーの「通常動作」と「修飾キーとしての動作」を、それぞれに指定する機能だと言える。

修飾キー「のみ」を複数パターン用意する

  • 例えば、「aまたはs」を押している間だけ、「hjkl」を「←↓↑→」にするにはどうすればよいか?
private.xml
<?xml version="1.0"?>
<root>
  <item>
    <name>Custom Vi mode</name>
    <identifier>remap.custom_vi_mode</identifier>
    <autogen>
      __KeyOverlaidModifier__
      KeyCode::S, ModifierFlag::NONE,
      @begin
      KeyCode::VK_CONFIG_SYNC_KEYDOWNUP_notsave_custom_vi_mode,
      @end
      @begin
      KeyCode::S
      @end
    </autogen>
  </item>
    <autogen>
      __KeyOverlaidModifier__
      KeyCode::A, ModifierFlag::NONE,
      @begin
      KeyCode::VK_CONFIG_SYNC_KEYDOWNUP_notsave_custom_vi_mode,
      @end
      @begin
      KeyCode::A
      @end
    </autogen>
  <item hidden="true">
    <identifier vk_config="true">notsave_custom_vi_mode</identifier>
    <autogen>
      __BlockUntilKeyUp__ KeyCode::S
    </autogen>
    <autogen>__KeyToKey__ KeyCode::H, KeyCode::CURSOR_LEFT</autogen>
    <autogen>__KeyToKey__ KeyCode::J, KeyCode::CURSOR_DOWN</autogen>
    <autogen>__KeyToKey__ KeyCode::K, KeyCode::CURSOR_UP</autogen>
    <autogen>__KeyToKey__ KeyCode::L, KeyCode::CURSOR_RIGHT</autogen>
    <autogen>__KeyToKey__ KeyCode::F, KeyCode::FN</autogen>
  </item>
</root>
  • notsave_custom_vi_modeが、ふたつのitemから参照されていることに着目して欲しい。
    • __BlockUntilKeyUp__は一種類しかないんだけどね? よくわからないね。
  • 上記の__KeyOverlaidModifier__の指定方法を踏まえると、「a」をホールドしたときは「左コマンドキー」も押されてることにする、とかもできる。
6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6