LoginSignup
14
15

More than 5 years have passed since last update.

Sierra の標準機能でキーリマップする

Last updated at Posted at 2017-05-25

Technical Note TN2450: Remapping Keys in macOS 10.12 Sierra)
https://developer.apple.com/library/content/technotes/tn2450/

Sierra といえば Karabiner が使えず、キーカスタマイザにとっては鬼門のアップデートでしたが、標準でこんな機能が用意されていました。

要点をまとめると、

  • 1 キー対 1 キーの単純なリマップ
  • システム終了すると設定がリセットされる (つまり起動時に毎回設定が必要)
  • 設定に管理者権限は必要ない
  • デバイスごとに設定可能
  • PC キーボード固有のキー(変換、無変換など)にも設定可能

といったところです。デバイスごとの設定について上記 Technical Note には何も書かれていませんが、hidutil の仕様により、

hidutil property --filter '{"ProductID":0x4545,"VendorID":0x4d9,}' --set '...'

というような形式で書くことができます。

PC 固有のキーは一覧には載っていませんが、リンクされている pdf には記載されていてちゃんと使えます。

それ Hammerspoon でやろうぜ

一旦設定を煮詰めてしまえば実行するだけですが、引数は冗長だしキー定義が独自1でかなり書きづらいです。 Hammerspoon を使っているならば実行のタイミングを任せられるし、Lua で組み立てることができるので都合が良いのではないかと configuration を書きました。

foundation_remapping
https://github.com/hetima/hammerspoon-foundation_remapping

これを利用すれば、init.lua に、

local FRemap = require('foundation_remapping')
local remapper = FRemap.new({vendorID=0x4d9, productID=0x4545})
remapper:remap('Muhenkan', 0x66):remap('Henkan', 'f18')
remapper:remap('PCKana', 'rcmd')
remapper:remap('lalt', 'lcmd'):remap('lcmd', 'lalt')
remapper:remap('Application', 'escape')
remapper:register()

と、簡便に書けます。普段使っている方の keyCode やラベルで設定できます。上記の設定で、

/usr/bin/hidutil property \
 --filter '{"ProductID":17733,"VendorID":1241,}' \
 --set '{"UserKeyMapping":[ \
 {"HIDKeyboardModifierMappingSrc":30064771211,"HIDKeyboardModifierMappingDst":30064771217}, \
 {"HIDKeyboardModifierMappingSrc":30064771210,"HIDKeyboardModifierMappingDst":30064771181}, \
 {"HIDKeyboardModifierMappingSrc":30064771208,"HIDKeyboardModifierMappingDst":30064771303}, \
 {"HIDKeyboardModifierMappingSrc":30064771298,"HIDKeyboardModifierMappingDst":30064771299}, \
 {"HIDKeyboardModifierMappingSrc":30064771299,"HIDKeyboardModifierMappingDst":30064771298}, \
 {"HIDKeyboardModifierMappingSrc":30064771173,"HIDKeyboardModifierMappingDst":30064771113}, \
 ]}'

というコマンドを実行します。

以上、半分は Hammerspoon と自作スクリプトの宣伝でした。


  1. Cosmo_USB2ADB.c に定義されていました。ADB 由来の値でしょうか 普段使ってる方が ADB 由来のようですね 

14
15
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
14
15