初投稿。
ほぼタイトルの通りなんですが、Ctrl+H叩いた時に(おそらく制御コードが送られてて)文字消えねーよ!!!バーン ってなったときの対処方法。
自分はMac用のLINEでこうなったのがきっかけです。これ結構ストレスマッハなんすよね……
なおこの記事書いた時点でのバージョンは、
- OSX: 10.11.5(15F34)
- Karabiner: 10.20.0
です。
前提事項
Karabinerをいれる。以上。
簡単に言うと色々いい感じにキーリマップいじれる定番ツールですね。
この記事で書いてることをどうにかしたいような人は大抵の場合入ってるような気がしています。
主旨からは外れるので、Karabinerの導入方法は省略します。手順もくそもないとは思うけど
どうすればいいのか
Karabinerにはキーリマップとかを自分でカスタム定義できる機能があるらしく、それを使用します。
左右コマンドキーを英数/かなに置き換えることにしか使ってなかったので全く知りませんでした。
private.xml の場所を調べる
たぶん ~/Library/Application Support/Karabiner だと思うけど一応手順を。
Karabinerを開いてメニューから "Misc&Uninstall" を選択し、その中の "Open private.xml" というボタンをクリック。
Finderでprivate.xmlの格納ディレクトリが開かれます。
ここにオリジナルのキーリマップを定義できます。
private.xml の編集
公式マニュアルなどを参考に直していきます。
(といってもデフォルトでは<root>
要素しかないと思いますが)
先に自分のxml内容を晒してしまうとこんな感じ。
<?xml version="1.0"?>
<root>
<appdef>
<appname>LINE</appname>
<equal>jp.naver.line.mac</equal>
</appdef>
<item>
<name>Ctrl+HでDelete</name>
<identifier>private.CtrlH_to_Del</identifier>
<only>LINE</only>
<autogen>__KeyToKey__ KeyCode::H, ModifierFlag::CONTROL_L, KeyCode::DELETE</autogen>
</item>
</root>
ざーっと言ってしまうと、
<appdef>
要素でアプリケーションを定義
<item>
要素でキーリマップを定義
しています。
appdefを定義
まずはこの設定の対象とするアプリケーションを定義していきます。複数定義するならその分並べましょう。
<appname>
要素にはわかりやすい名前を自分でつけてください。
<equal>
要素には、アプリケーションidをつけます。
アプリケーションidの調べ方には、
- アプリケーションのInfo.plistを直接覗く
- Karabiner付属のEventViewerを使う
などがあります。
書くのが面倒横道に逸れまくってもアレなので、ここの説明も省きます。
キーリマップの設定
<item>
要素
キーリマップ1つ1つの単位になります。
<name>
要素
適当に好きな名前をつけてください。ここの内容が設定ウィンドウに出てきます。
<identifier>
要素
設定のidをつけます。かぶらないようにお好きなのをどうぞ。
公式では、"private."をプリフィックスにつけるのをおすすめしてます。
<only>
要素
対象とするアプリケーションを定義します。
<appdef>
要素内の<appname>
要素につけた名前を入れてください。
複数のアプリケーションを対象とする場合はカンマ区切りで設定します。
<autogen>
要素
設定時の動作を定義します。
ここでは、__KeyToKey__
によりKeyCode::H, ModifierFlag::CONTROL_L
(=Ctrl+H)をKeyCode::DELETE
(=Deleteキー)にリマップしています。
これでprivate.xmlの編集は終了です。
private.xmlを読み込ませる
Karabinerを開いてメニューから "Change Key" を選択し、その中の "Reload XML" というボタンをクリック。
すると、一覧のトップにprivate.xmlで定義した内容が出てきます。
参考にさせていただきました
Karabiner: private.xml Reference Manual
Karabiner の private.xml 設定方法 | Qiita