[覚書]Escキーでパネルを閉じる方法[Atomパッケージ作成]


  escapeListener: null

  activate: (state) ->
    # 略
    @escapeListener = @onEscapeKey.bind(this)


  showPanel: ->
    @somePanel.show()
    window.addEventListener('keydown', @escapeListener, true) # 1

  onEscapeKey: (e) ->
    keystroke = atom.keymaps.keystrokeForKeyboardEvent(e) # 2
    if keystroke == 'escape'
      @somePanel.hide()
      window.removeEventListener('keydown', @escapeListener, true)
  1. window.addEventListener('keydown', @escapeListener, true) で、キーダウンイベントを監視する。3番目の引数をtrueにしないと、すべてのキー入力を補足できない(他のパネルなどでのキー入力も補足する)。

  2. atom.keymaps.keystrokeForKeyboardEvent(e) でキーストロークを文字列に変換して、どのキーが押されたのか判定している。
    MacだとかWindowsだとかDvorak配列だとか気にしなくとも、atom.keymapsが勝手に考えてくれる(はず)。