React = require 'react' _ = require 'underscore' path = require 'path' fs = require 'fs' {RetinaImg, Flexbox} = require 'nylas-component-kit' DisplayedKeybindings = [ ['application:new-message', 'New Message'], ['application:reply', 'Reply'], ['application:reply-all', 'Reply All'], ['application:forward', 'Forward'], ['application:focus-search', 'Search'], ['application:change-category', 'Change Folder / Labels'], ['core:select-item', 'Select Focused Item'], ['core:star-item', 'Star Focused Item'], ] class PreferencesKeymaps extends React.Component @displayName: 'PreferencesKeymaps' constructor: (@props) -> @state = templates: [] bindings: @_getStateFromKeymaps() @_loadTemplates() componentDidMount: => @unsubscribe = atom.keymaps.onDidReloadKeymap => @setState(bindings: @_getStateFromKeymaps()) componentWillUnmount: => @unsubscribe?() _loadTemplates: => templatesDir = path.join(atom.getLoadSettings().resourcePath, 'keymaps', 'templates') fs.readdir templatesDir, (err, files) => return unless files and files instanceof Array templates = files.filter (filename) => path.extname(filename) is '.cson' @setState(templates: templates) _getStateFromKeymaps: => bindings = {} for [command, label] in DisplayedKeybindings bindings[command] = atom.keymaps.findKeyBindings(command: command, target: document.body) || [] bindings render: =>