2019/10/20

DefaultKeyBinding.dict を編集して ^; を入力しても beep が鳴らないようにする

私が作業する時は Terminal.app + tmux + neovim の時が多いです。
beep 音はあまり鳴って欲しくないので neovim と Terminal の beep setting は全て off 。
それでも稀に beep 音が鳴ってしまう。しかし、稀すぎて再現できず。
が、最近再現できたので、それに対処したログを残しておきます。


環境

  • OS: macOS Mojave 10.14.6


beep が鳴る原因

『^;(control + ';')』を入力した際に beep が鳴ることを見付けました。
Terminal.app に限らず Safari といった他の Application でも鳴るので、macOS 側の設定のようです。


対応: DefaultKeybinding.dict

OSX 時代から DefaultKeybinding.dict という物があって、それで keymap を設定できるようです。
参考のリンクで一番古いのは2010年とか。そのくらい前から存在しているらしい。
最終的には ~/Library/KeyBindings/DefaultKeyBinding.dict に

だけ記述。
一度 Application を落として ^; を入力しても何も鳴らない。よし。


寄り道

  • 'noop:' を設定してはダメなのか
    • 設定してみたこともあります。が、どうも『noop: だから beep が鳴る』みたいです。
    • DefaultKeyBinding.dict 自体始めて触るので、まず map ができているか怪しかった。
    • 一度「特定の文字を insert する」ように map して、DefaultKeyBinding.dict が有効な事を確認。
    • それから「空の文字列を insert する」ことで beep を抑えている状態です。
  • 他の組み合せでは beep は鳴らないのか
    • 'noop:' の物は基本鳴ります。
    • なので control + 記号 とかは beep 祭りです。
    • 全組み合せを設定しても良いのですが、特に鳴りまくる物を見付けたら設定していこうかと。
    • Keyboard 側の Setting でそもそも beep が鳴らないようにするのがベストな気がします。
      • が、Input Method "ASCII" には 設定項目が存在せず、 AquaSKK にも無い。
    • ので keymap でアドホックに回避してる状態です。
  • macOS 側の KeyBinding と衝突した場合はどうなるのか
    • macOS 側の設定が優先されました。
  • system-wide の key binding とか参考にならなかったのか
    • /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict ですね。
    • Property List Editor で開けると記述されているが、そんな Application は存在せず。
    • .plist を開ける XCode で開こうと試す。
    • 追加コンポーネントをダウンロードし始めたので、開けるかも、と期待。
    • で、ダウンロードしても開けず。えー。
  • 最終的に私自身の dot_files に入れることにしました。
    • .config/nvim/init.vim といったファイルは symlink で設定を配置しています。
    • が、DefaultKeyBinding.dict は symlink を follow してくれない。
    • ので cp することで対応しています。


参考

0 件のコメント:

コメントを投稿