diff --git a/spec/extensions/tree-view-spec.coffee b/spec/extensions/tree-view-spec.coffee index 12aa90cd1..54f8bac3c 100644 --- a/spec/extensions/tree-view-spec.coffee +++ b/spec/extensions/tree-view-spec.coffee @@ -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() diff --git a/src/extensions/command-panel/command-panel.coffee b/src/extensions/command-panel/command-panel.coffee index 242374edc..eef6f7c0d 100644 --- a/src/extensions/command-panel/command-panel.coffee +++ b/src/extensions/command-panel/command-panel.coffee @@ -51,6 +51,7 @@ class CommandPanel extends View toggle: -> if @parent().length then @detach() else @attach() + false attach: (text='') -> @rootView.append(this) diff --git a/src/extensions/command-panel/keymap.coffee b/src/extensions/command-panel/keymap.coffee index 0f7d1a7be..605ac9b2e 100644 --- a/src/extensions/command-panel/keymap.coffee +++ b/src/extensions/command-panel/keymap.coffee @@ -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' diff --git a/src/extensions/fuzzy-finder/keymap.coffee b/src/extensions/fuzzy-finder/keymap.coffee index 66bf1b34e..b06be4909 100644 --- a/src/extensions/fuzzy-finder/keymap.coffee +++ b/src/extensions/fuzzy-finder/keymap.coffee @@ -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' diff --git a/src/extensions/tree-view/keymap.coffee b/src/extensions/tree-view/keymap.coffee index 1330170e9..735a8bc41 100644 --- a/src/extensions/tree-view/keymap.coffee +++ b/src/extensions/tree-view/keymap.coffee @@ -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' diff --git a/src/extensions/tree-view/tree-view.coffee b/src/extensions/tree-view/tree-view.coffee index 260dbaaf1..5207e7a41 100644 --- a/src/extensions/tree-view/tree-view.coffee +++ b/src/extensions/tree-view/tree-view.coffee @@ -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: ->