Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Commit bc60bab

Browse files
committed
Merge pull request #714 from atom/ku-right-arrow
Open pending file on right arrow keypress
2 parents 9285c7e + bc72a16 commit bc60bab

File tree

3 files changed

+84
-31
lines changed

3 files changed

+84
-31
lines changed

keymaps/tree-view.cson

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
'cmd-c': 'tree-view:copy'
1515
'cmd-x': 'tree-view:cut'
1616
'cmd-v': 'tree-view:paste'
17-
'ctrl-f': 'tree-view:expand-directory'
17+
'ctrl-f': 'tree-view:expand-item'
1818
'ctrl-b': 'tree-view:collapse-directory'
1919
'cmd-k right': 'tree-view:open-selected-entry-right'
2020
'cmd-k l': 'tree-view:open-selected-entry-right'
@@ -57,9 +57,9 @@
5757
'ctrl-9': 'tree-view:open-selected-entry-in-pane-9'
5858

5959
'.tree-view':
60-
'right': 'tree-view:expand-directory'
61-
'ctrl-]': 'tree-view:expand-directory'
62-
'l': 'tree-view:expand-directory'
60+
'right': 'tree-view:expand-item'
61+
'ctrl-]': 'tree-view:expand-item'
62+
'l': 'tree-view:expand-item'
6363
'left': 'tree-view:collapse-directory'
6464
'ctrl-[': 'tree-view:collapse-directory'
6565
'alt-ctrl-]': 'tree-view:recursive-expand-directory'

lib/tree-view.coffee

+15-6
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ class TreeView extends View
109109
'core:page-down': => @pageDown()
110110
'core:move-to-top': => @scrollToTop()
111111
'core:move-to-bottom': => @scrollToBottom()
112-
'tree-view:expand-directory': => @expandDirectory()
112+
'tree-view:expand-item': => @openSelectedEntry(pending: true, true)
113113
'tree-view:recursive-expand-directory': => @expandDirectory(true)
114114
'tree-view:collapse-directory': => @collapseDirectory()
115115
'tree-view:recursive-collapse-directory': => @collapseDirectory(true)
@@ -205,7 +205,7 @@ class TreeView extends View
205205
when 1
206206
@selectEntry(entry)
207207
if entry instanceof FileView
208-
@openSelectedEntry(pending: true)
208+
atom.workspace.open(entry.getPath(), pending: true)
209209
else if entry instanceof DirectoryView
210210
entry.toggleExpansion(isRecursive)
211211
when 2
@@ -368,7 +368,9 @@ class TreeView extends View
368368
@scrollToEntry(@selectedEntry())
369369

370370
expandDirectory: (isRecursive=false) ->
371-
@selectedEntry()?.expand?(isRecursive)
371+
selectedEntry = @selectedEntry()
372+
if selectedEntry instanceof DirectoryView
373+
selectedEntry.expand(isRecursive)
372374

373375
collapseDirectory: (isRecursive=false) ->
374376
selectedEntry = @selectedEntry()
@@ -378,12 +380,19 @@ class TreeView extends View
378380
directory.collapse(isRecursive)
379381
@selectEntry(directory)
380382

381-
openSelectedEntry: (options) ->
383+
openSelectedEntry: (options={}, expandDirectory=false) ->
382384
selectedEntry = @selectedEntry()
383385
if selectedEntry instanceof DirectoryView
384-
selectedEntry.toggleExpansion()
386+
if expandDirectory
387+
selectedEntry.expand()
388+
else
389+
selectedEntry.toggleExpansion()
385390
else if selectedEntry instanceof FileView
386-
atom.workspace.open(selectedEntry.getPath(), options)
391+
uri = selectedEntry.getPath()
392+
item = atom.workspace.getActivePane()?.itemForURI(uri)
393+
if item? and not options.pending
394+
item.terminatePendingState?()
395+
atom.workspace.open(uri, options)
387396

388397
openSelectedEntrySplit: (orientation, side) ->
389398
selectedEntry = @selectedEntry()

spec/tree-view-spec.coffee

+65-21
Original file line numberDiff line numberDiff line change
@@ -942,25 +942,6 @@ describe "TreeView", ->
942942
_.times entryCount, -> atom.commands.dispatch(treeView.element, 'core:move-up')
943943
expect(treeView.scrollTop()).toBe 0
944944

945-
describe "tree-view:expand-directory", ->
946-
describe "when a directory entry is selected", ->
947-
it "expands the current directory", ->
948-
subdir = root1.find('.directory:first')
949-
subdir.click()
950-
subdir[0].collapse()
951-
952-
expect(subdir).not.toHaveClass 'expanded'
953-
atom.commands.dispatch(treeView.element, 'tree-view:expand-directory')
954-
expect(subdir).toHaveClass 'expanded'
955-
956-
describe "when a file entry is selected", ->
957-
it "does nothing", ->
958-
waitsForFileToOpen ->
959-
root1.find('.file').click()
960-
961-
runs ->
962-
atom.commands.dispatch(treeView.element, 'tree-view:expand-directory')
963-
964945
describe "tree-view:recursive-expand-directory", ->
965946
describe "when an collapsed root is recursively expanded", ->
966947
it "expands the root and all subdirectories", ->
@@ -1056,8 +1037,8 @@ describe "TreeView", ->
10561037
it "opens the file in the editor and focuses it", ->
10571038
jasmine.attachToDOM(workspaceElement)
10581039

1059-
waitsForFileToOpen ->
1060-
root1.find('.file:contains(tree-view.js)').click()
1040+
file = root1.find('.file:contains(tree-view.js)')[0]
1041+
treeView.selectEntry(file)
10611042

10621043
waitsForFileToOpen ->
10631044
atom.commands.dispatch(treeView.element, 'tree-view:open-selected-entry')
@@ -1066,6 +1047,36 @@ describe "TreeView", ->
10661047
item = atom.workspace.getActivePaneItem()
10671048
expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js')
10681049
expect(atom.views.getView(item)).toHaveFocus()
1050+
if atom.workspace.buildTextEditor().isPending?
1051+
expect(item.isPending()).toBe false
1052+
1053+
if atom.workspace.buildTextEditor().isPending?
1054+
it "terminates pending state for items that are pending", ->
1055+
jasmine.attachToDOM(workspaceElement)
1056+
1057+
file = root1.find('.file:contains(tree-view.js)')[0]
1058+
treeView.selectEntry(file)
1059+
1060+
waitsForFileToOpen ->
1061+
atom.commands.dispatch(treeView.element, 'tree-view:expand-item')
1062+
1063+
runs ->
1064+
item = atom.workspace.getActivePaneItem()
1065+
expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js')
1066+
expect(item.isPending()).toBe true
1067+
expect(atom.views.getView(item)).toHaveFocus()
1068+
1069+
file = root1.find('.file:contains(tree-view.js)')[0]
1070+
treeView.selectEntry(file)
1071+
1072+
waitsForFileToOpen ->
1073+
atom.commands.dispatch(treeView.element, 'tree-view:open-selected-entry')
1074+
1075+
runs ->
1076+
item = atom.workspace.getActivePaneItem()
1077+
expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js')
1078+
expect(atom.views.getView(item)).toHaveFocus()
1079+
expect(item.isPending()).toBe false
10691080

10701081
describe "when a directory is selected", ->
10711082
it "expands or collapses the directory", ->
@@ -1132,6 +1143,39 @@ describe "TreeView", ->
11321143
atom.commands.dispatch(treeView.element, command)
11331144
expect(atom.workspace.getActivePaneItem()).toBeUndefined()
11341145

1146+
describe "tree-view:expand-item", ->
1147+
describe "when a file is selected", ->
1148+
it "opens the file in the editor in pending state and focuses it", ->
1149+
jasmine.attachToDOM(workspaceElement)
1150+
1151+
file = root1.find('.file:contains(tree-view.js)')[0]
1152+
treeView.selectEntry(file)
1153+
1154+
waitsForFileToOpen ->
1155+
atom.commands.dispatch(treeView.element, 'tree-view:expand-item')
1156+
1157+
runs ->
1158+
item = atom.workspace.getActivePaneItem()
1159+
expect(item.getPath()).toBe atom.project.getDirectories()[0].resolve('tree-view.js')
1160+
if atom.workspace.buildTextEditor().isPending?
1161+
expect(item.isPending()).toBe true
1162+
expect(atom.views.getView(item)).toHaveFocus()
1163+
1164+
describe "when a directory is selected", ->
1165+
it "expands the directory", ->
1166+
subdir = root1.find('.directory').first()
1167+
subdir.click()
1168+
subdir[0].collapse()
1169+
1170+
expect(subdir).not.toHaveClass 'expanded'
1171+
atom.commands.dispatch(treeView.element, 'tree-view:expand-item')
1172+
expect(subdir).toHaveClass 'expanded'
1173+
1174+
describe "when nothing is selected", ->
1175+
it "does nothing", ->
1176+
atom.commands.dispatch(treeView.element, 'tree-view:expand-item')
1177+
expect(atom.workspace.getActivePaneItem()).toBeUndefined()
1178+
11351179
describe "opening in existing split panes", ->
11361180
beforeEach ->
11371181
jasmine.attachToDOM(workspaceElement)

0 commit comments

Comments
 (0)