キーの入力ルールを調整する。
システム環境設定では大体次のようになっていた。
・Shift + キーは受け付けない
・Command + キーは OK
・Option + キーは OK
・Control + キーは OK
・Shiftは他の Command, Option, Control との組み合わせなら OK
・Escapeキーは他の Command, Option, Control との組み合わせなら OK
・Returnキーは他の Command, Option, Control との組み合わせなら OK
・入力中に Escapeキーを押すとキャンセル
その他、Deleteは不可など。
独自にルールを決める必要も無いので、上記に従う様にした。
Deleteなどキー毎に使えるかどうかの判断は以前定義した構造体のパラメータで判断する。
static const struct {
UInt32 keycode;
NSString* description;
NSString* string;
BOOL is_hotkey;
}
@"Unkown" , NO },
{ kVK_ANSI_A , @"A" , @"A" , YES },
{ kVK_ANSI_S , @"S" , @"S" , YES },
:
最後の is_hotkeyがそれ。
それ以外のルールはロジックを組み込む。
TextView.m
-(void)keyDown:(NSEvent *)theEvent
:
if (!(modifier & (cmdKey | optionKey | controlKey))) {
if (key == kVK_Escape) {
[self redraw];
[self endEdit];
}
// abort
return;
}
if (![KeyCharMapper isHotKeyForKeyCode:key]) {
// abort
return;
}
: