Start implementing "tool-panel" keymap scheme

Tool panels will be mapped to ctrl-# bindings. If the panel is focused, the # binding closes it. Otherwise the # binding shows it (if needed) and focuses it. The esc key unfocuses the panel, but does not necessarily close it. Meta-w always closes the panel.

This is the scheme. Right now we only have 2 panels:

Command Panel: Ctrl-0, esc still hides it
Tree View: Ctrl-1, esc just unfocuses it
This commit is contained in:
Nathan Sobo
2012-07-20 17:56:36 -06:00
parent ac04a8ed66
commit e8a892ee3e
6 changed files with 47 additions and 13 deletions

View File

@@ -103,18 +103,42 @@ describe "TreeView", ->
newRootView.remove()
describe "when tree-view:toggle is triggered on the root view", ->
it "shows/hides the tree view", ->
beforeEach ->
rootView.attachToDom()
describe "when the tree view is visible", ->
beforeEach ->
expect(treeView).toBeVisible()
describe "when the tree view is focused", ->
it "hides the tree view", ->
treeView.focus()
rootView.trigger 'tree-view:toggle'
expect(treeView).toBeHidden()
describe "when the tree view is not focused", ->
it "shifts focus to the tree view", ->
rootView.focus()
rootView.trigger 'tree-view:toggle'
expect(treeView).toBeVisible()
expect(treeView).toMatchSelector(':focus')
describe "when the tree view is hidden", ->
it "shows and focuses the tree view", ->
treeView.detach()
rootView.trigger 'tree-view:toggle'
expect(treeView.hasParent()).toBeTruthy()
expect(treeView).toMatchSelector(':focus')
describe "when tree-view:unfocus is triggered on the tree view", ->
fit "surrenders focus to the root view but remains open", ->
rootView.attachToDom()
treeView.focus()
expect(treeView.hasParent()).toBeTruthy()
rootView.trigger 'tree-view:toggle'
expect(treeView.hasParent()).toBeFalsy()
treeView.trigger 'tree-view:unfocus'
expect(treeView).toBeVisible()
expect(treeView).not.toMatchSelector(':focus')
expect(rootView).toMatchSelector(':focus')
rootView.trigger 'tree-view:toggle'
expect(treeView.hasParent()).toBeTruthy()
expect(treeView).toMatchSelector(':focus')
describe "when a directory's disclosure arrow is clicked", ->
it "expands / collapses the associated directory", ->
subdir = treeView.root.find('.entries > li:contains(dir/)').view()

View File

@@ -51,6 +51,7 @@ class CommandPanel extends View
toggle: ->
if @parent().length then @detach() else @attach()
false
attach: (text='') ->
@rootView.append(this)

View File

@@ -1,7 +1,11 @@
window.keymap.bindKeys '*'
'ctrl-0': 'command-panel:toggle'
'ctrl-meta-0': 'command-panel:toggle-preview'
'meta-:': 'command-panel:toggle'
'meta-F': 'command-panel:find-in-project'
window.keymap.bindKeys '.command-panel .editor',
window.keymap.bindKeys '.command-panel .editor input',
'meta-w': 'command-panel:toggle'
escape: 'command-panel:toggle'
enter: 'command-panel:execute'

View File

@@ -2,6 +2,7 @@ window.keymap.bindKeys '*'
'meta-t': 'fuzzy-finder:toggle-file-finder'
'meta-b': 'fuzzy-finder:toggle-buffer-finder'
window.keymap.bindKeys ".fuzzy-finder .editor",
window.keymap.bindKeys ".fuzzy-finder .editor input",
'enter': 'fuzzy-finder:select-path',
'escape': 'fuzzy-finder:cancel'
'meta-w': 'fuzzy-finder:cancel'

View File

@@ -1,8 +1,11 @@
window.keymap.bindKeys '#root-view'
'alt-tab': 'tree-view:focus'
'ctrl-1': 'tree-view:toggle'
'ctrl-T': 'tree-view:toggle'
'alt-tab': 'tree-view:focus'
window.keymap.bindKeys '.tree-view'
'escape': 'tree-view:unfocus'
'meta-w': 'tree-view:toggle'
'right': 'tree-view:expand-directory'
'left': 'tree-view:collapse-directory'
'enter': 'tree-view:open-selected-entry'

View File

@@ -49,6 +49,7 @@ class TreeView extends View
@on 'tree-view:add', => @add()
@on 'tree-view:remove', => @removeSelectedEntry()
@on 'tree-view:directory-modified', => @selectActiveFile()
@on 'tree-view:unfocus', => @rootView.focus()
@rootView.on 'tree-view:toggle', => @toggle()
@rootView.on 'active-editor-path-change', => @selectActiveFile()
@rootView.project.on 'path-change', => @updateRoot()
@@ -71,11 +72,11 @@ class TreeView extends View
@root?.unwatchEntries()
toggle: ->
if @hasParent()
if @is(':focus')
@detach()
@rootView.focus()
else
@attach()
@attach() unless @hasParent()
@focus()
attach: ->