From f48e6f68c25424f82a9a8b6dfc28f26e0570ee87 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Wed, 27 Jan 2016 12:22:28 -0700 Subject: [PATCH 1/3] Open pending file on right arrow keypress --- keymaps/tree-view.cson | 2 +- lib/tree-view.coffee | 10 +++++++--- spec/tree-view-spec.coffee | 39 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/keymaps/tree-view.cson b/keymaps/tree-view.cson index e591f8ce..557eee25 100644 --- a/keymaps/tree-view.cson +++ b/keymaps/tree-view.cson @@ -57,7 +57,7 @@ 'ctrl-9': 'tree-view:open-selected-entry-in-pane-9' '.tree-view': - 'right': 'tree-view:expand-directory' + 'right': 'tree-view:expand-item' 'ctrl-]': 'tree-view:expand-directory' 'l': 'tree-view:expand-directory' 'left': 'tree-view:collapse-directory' diff --git a/lib/tree-view.coffee b/lib/tree-view.coffee index 995ccc38..c8e56c39 100644 --- a/lib/tree-view.coffee +++ b/lib/tree-view.coffee @@ -109,6 +109,7 @@ class TreeView extends View 'core:page-down': => @pageDown() 'core:move-to-top': => @scrollToTop() 'core:move-to-bottom': => @scrollToBottom() + 'tree-view:expand-item': => @openSelectedEntry(pending: true, true) 'tree-view:expand-directory': => @expandDirectory() 'tree-view:recursive-expand-directory': => @expandDirectory(true) 'tree-view:collapse-directory': => @collapseDirectory() @@ -205,7 +206,7 @@ class TreeView extends View when 1 @selectEntry(entry) if entry instanceof FileView - @openSelectedEntry(pending: true) + atom.workspace.open(entry.getPath(), pending: true) else if entry instanceof DirectoryView entry.toggleExpansion(isRecursive) when 2 @@ -378,10 +379,13 @@ class TreeView extends View directory.collapse(isRecursive) @selectEntry(directory) - openSelectedEntry: (options) -> + openSelectedEntry: (options, expandDirectory) -> selectedEntry = @selectedEntry() if selectedEntry instanceof DirectoryView - selectedEntry.toggleExpansion() + if expandDirectory + @expandDirectory() + else + selectedEntry.toggleExpansion() else if selectedEntry instanceof FileView atom.workspace.open(selectedEntry.getPath(), options) diff --git a/spec/tree-view-spec.coffee b/spec/tree-view-spec.coffee index 0b60c68c..78bbb7b2 100644 --- a/spec/tree-view-spec.coffee +++ b/spec/tree-view-spec.coffee @@ -1056,8 +1056,8 @@ describe "TreeView", -> it "opens the file in the editor and focuses it", -> jasmine.attachToDOM(workspaceElement) - waitsForFileToOpen -> - root1.find('.file:contains(tree-view.js)').click() + file = root1.find('.file:contains(tree-view.js)')[0] + treeView.selectEntry(file) waitsForFileToOpen -> atom.commands.dispatch(treeView.element, 'tree-view:open-selected-entry') @@ -1066,6 +1066,8 @@ describe "TreeView", -> item = atom.workspace.getActivePaneItem() expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js') expect(atom.views.getView(item)).toHaveFocus() + if atom.workspace.buildTextEditor().isPending? + expect(item.isPending()).toBe false describe "when a directory is selected", -> it "expands or collapses the directory", -> @@ -1132,6 +1134,39 @@ describe "TreeView", -> atom.commands.dispatch(treeView.element, command) expect(atom.workspace.getActivePaneItem()).toBeUndefined() + describe "tree-view:expand-item", -> + describe "when a file is selected", -> + it "opens the file in the editor in pending state and focuses it", -> + jasmine.attachToDOM(workspaceElement) + + file = root1.find('.file:contains(tree-view.js)')[0] + treeView.selectEntry(file) + + waitsForFileToOpen -> + atom.commands.dispatch(treeView.element, 'tree-view:expand-item') + + runs -> + item = atom.workspace.getActivePaneItem() + expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js') + if atom.workspace.buildTextEditor().isPending? + expect(item.isPending()).toBe true + expect(atom.views.getView(item)).toHaveFocus() + + describe "when a directory is selected", -> + it "expands the directory", -> + subdir = root1.find('.directory').first() + subdir.click() + subdir[0].collapse() + + expect(subdir).not.toHaveClass 'expanded' + atom.commands.dispatch(treeView.element, 'tree-view:expand-item') + expect(subdir).toHaveClass 'expanded' + + describe "when nothing is selected", -> + it "does nothing", -> + atom.commands.dispatch(treeView.element, 'tree-view:expand-item') + expect(atom.workspace.getActivePaneItem()).toBeUndefined() + describe "opening in existing split panes", -> beforeEach -> jasmine.attachToDOM(workspaceElement) From da73935dc4eb16f133e976d49c968ae046b8bbbc Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Mon, 1 Feb 2016 13:45:23 -0800 Subject: [PATCH 2/3] Terminate pending state for pending item in `openSelectedEntry` --- lib/tree-view.coffee | 8 ++++++-- spec/tree-view-spec.coffee | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/lib/tree-view.coffee b/lib/tree-view.coffee index c8e56c39..caacfd0f 100644 --- a/lib/tree-view.coffee +++ b/lib/tree-view.coffee @@ -379,7 +379,7 @@ class TreeView extends View directory.collapse(isRecursive) @selectEntry(directory) - openSelectedEntry: (options, expandDirectory) -> + openSelectedEntry: (options={}, expandDirectory=false) -> selectedEntry = @selectedEntry() if selectedEntry instanceof DirectoryView if expandDirectory @@ -387,7 +387,11 @@ class TreeView extends View else selectedEntry.toggleExpansion() else if selectedEntry instanceof FileView - atom.workspace.open(selectedEntry.getPath(), options) + uri = selectedEntry.getPath() + item = atom.workspace.getActivePane()?.itemForURI(uri) + if item? and not options.pending + item.terminatePendingState?() + atom.workspace.open(uri, options) openSelectedEntrySplit: (orientation, side) -> selectedEntry = @selectedEntry() diff --git a/spec/tree-view-spec.coffee b/spec/tree-view-spec.coffee index 78bbb7b2..813d750f 100644 --- a/spec/tree-view-spec.coffee +++ b/spec/tree-view-spec.coffee @@ -1069,6 +1069,34 @@ describe "TreeView", -> if atom.workspace.buildTextEditor().isPending? expect(item.isPending()).toBe false + if atom.workspace.buildTextEditor().isPending? + it "terminates pending state for items that are pending", -> + jasmine.attachToDOM(workspaceElement) + + file = root1.find('.file:contains(tree-view.js)')[0] + treeView.selectEntry(file) + + waitsForFileToOpen -> + atom.commands.dispatch(treeView.element, 'tree-view:expand-item') + + runs -> + item = atom.workspace.getActivePaneItem() + expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js') + expect(item.isPending()).toBe true + expect(atom.views.getView(item)).toHaveFocus() + + file = root1.find('.file:contains(tree-view.js)')[0] + treeView.selectEntry(file) + + waitsForFileToOpen -> + atom.commands.dispatch(treeView.element, 'tree-view:open-selected-entry') + + runs -> + item = atom.workspace.getActivePaneItem() + expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js') + expect(atom.views.getView(item)).toHaveFocus() + expect(item.isPending()).toBe false + describe "when a directory is selected", -> it "expands or collapses the directory", -> subdir = root1.find('.directory').first() From bc72a16a2956348e152ef33d0ebf395ac8b07f55 Mon Sep 17 00:00:00 2001 From: Katrina Uychaco Date: Mon, 1 Feb 2016 15:06:20 -0800 Subject: [PATCH 3/3] Remove expand-directory command and replace with expand-item --- keymaps/tree-view.cson | 6 +++--- lib/tree-view.coffee | 7 ++++--- spec/tree-view-spec.coffee | 19 ------------------- 3 files changed, 7 insertions(+), 25 deletions(-) diff --git a/keymaps/tree-view.cson b/keymaps/tree-view.cson index 557eee25..08c943c0 100644 --- a/keymaps/tree-view.cson +++ b/keymaps/tree-view.cson @@ -14,7 +14,7 @@ 'cmd-c': 'tree-view:copy' 'cmd-x': 'tree-view:cut' 'cmd-v': 'tree-view:paste' - 'ctrl-f': 'tree-view:expand-directory' + 'ctrl-f': 'tree-view:expand-item' 'ctrl-b': 'tree-view:collapse-directory' 'cmd-k right': 'tree-view:open-selected-entry-right' 'cmd-k l': 'tree-view:open-selected-entry-right' @@ -58,8 +58,8 @@ '.tree-view': 'right': 'tree-view:expand-item' - 'ctrl-]': 'tree-view:expand-directory' - 'l': 'tree-view:expand-directory' + 'ctrl-]': 'tree-view:expand-item' + 'l': 'tree-view:expand-item' 'left': 'tree-view:collapse-directory' 'ctrl-[': 'tree-view:collapse-directory' 'alt-ctrl-]': 'tree-view:recursive-expand-directory' diff --git a/lib/tree-view.coffee b/lib/tree-view.coffee index caacfd0f..457a299c 100644 --- a/lib/tree-view.coffee +++ b/lib/tree-view.coffee @@ -110,7 +110,6 @@ class TreeView extends View 'core:move-to-top': => @scrollToTop() 'core:move-to-bottom': => @scrollToBottom() 'tree-view:expand-item': => @openSelectedEntry(pending: true, true) - 'tree-view:expand-directory': => @expandDirectory() 'tree-view:recursive-expand-directory': => @expandDirectory(true) 'tree-view:collapse-directory': => @collapseDirectory() 'tree-view:recursive-collapse-directory': => @collapseDirectory(true) @@ -369,7 +368,9 @@ class TreeView extends View @scrollToEntry(@selectedEntry()) expandDirectory: (isRecursive=false) -> - @selectedEntry()?.expand?(isRecursive) + selectedEntry = @selectedEntry() + if selectedEntry instanceof DirectoryView + selectedEntry.expand(isRecursive) collapseDirectory: (isRecursive=false) -> selectedEntry = @selectedEntry() @@ -383,7 +384,7 @@ class TreeView extends View selectedEntry = @selectedEntry() if selectedEntry instanceof DirectoryView if expandDirectory - @expandDirectory() + selectedEntry.expand() else selectedEntry.toggleExpansion() else if selectedEntry instanceof FileView diff --git a/spec/tree-view-spec.coffee b/spec/tree-view-spec.coffee index 813d750f..fd316180 100644 --- a/spec/tree-view-spec.coffee +++ b/spec/tree-view-spec.coffee @@ -942,25 +942,6 @@ describe "TreeView", -> _.times entryCount, -> atom.commands.dispatch(treeView.element, 'core:move-up') expect(treeView.scrollTop()).toBe 0 - describe "tree-view:expand-directory", -> - describe "when a directory entry is selected", -> - it "expands the current directory", -> - subdir = root1.find('.directory:first') - subdir.click() - subdir[0].collapse() - - expect(subdir).not.toHaveClass 'expanded' - atom.commands.dispatch(treeView.element, 'tree-view:expand-directory') - expect(subdir).toHaveClass 'expanded' - - describe "when a file entry is selected", -> - it "does nothing", -> - waitsForFileToOpen -> - root1.find('.file').click() - - runs -> - atom.commands.dispatch(treeView.element, 'tree-view:expand-directory') - describe "tree-view:recursive-expand-directory", -> describe "when an collapsed root is recursively expanded", -> it "expands the root and all subdirectories", ->