From c43a1e5ce57e618339fc37c776231534156af10b Mon Sep 17 00:00:00 2001 From: Jon Rohan Date: Fri, 25 Jan 2013 20:37:31 -0800 Subject: [PATCH] Undo last closed tab --- spec/app/editor-spec.coffee | 19 +++++++++++++++++++ src/app/editor.coffee | 10 +++++++++- src/app/keymaps/editor.cson | 3 +++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index eed7563b5..f70abe357 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -151,6 +151,13 @@ describe "Editor", -> expect(otherEditSession.buffer.subscriptionCount()).toBe 0 describe "when 'close' is triggered", -> + it "adds a closed session path to the array", -> + editor.edit(rootView.project.buildEditSessionForPath()) + editSession = editor.activeEditSession + expect(editor.closedEditSessions.length).toBe 0 + editor.trigger "core:close" + expect(editor.closedEditSessions.length).toBe 1 + it "closes the active edit session and loads next edit session", -> editor.edit(rootView.project.buildEditSessionForPath()) editSession = editor.activeEditSession @@ -2664,3 +2671,15 @@ describe "Editor", -> editor.moveEditSessionToEditor(0, rightEditor, 0) expect(rightEditor.editSessions[0].getPath()).toBe jsPath expect(rightEditor.editSessions[1].getPath()).toBe txtPath + + describe "when editor:undo-close-session is triggered", -> + it "opens the closed session back up", -> + rootView.open('sample.txt') + expect(editor.getPath()).toBe require.resolve('fixtures/sample.txt') + expect(editor.closedEditSessions.length).toBe 0 + editor.trigger "core:close" + expect(editor.getPath()).toBe require.resolve('fixtures/sample.js') + expect(editor.closedEditSessions.length).toBe 1 + editor.trigger 'editor:undo-close-session' + expect(editor.getPath()).toBe require.resolve('fixtures/sample.txt') + expect(editor.closedEditSessions.length).toBe 0 diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 80ed42943..7e7c253a1 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -48,6 +48,7 @@ class Editor extends View lineCache: null isFocused: false activeEditSession: null + closedEditSessions: null editSessions: null attached: false lineOverdraw: 10 @@ -74,6 +75,7 @@ class Editor extends View @cursorViews = [] @selectionViews = [] @editSessions = [] + @closedEditSessions = [] @pendingChanges = [] @newCursors = [] @newSelections = [] @@ -187,6 +189,7 @@ class Editor extends View 'editor:move-line-up': @moveLineUp 'editor:move-line-down': @moveLineDown 'editor:duplicate-line': @duplicateLine + 'editor:undo-close-session': @undoDestroySession documentation = {} for name, method of editorBindings @@ -470,6 +473,9 @@ class Editor extends View getBuffer: -> @activeEditSession.buffer + undoDestroySession: -> + @rootView().open(@closedEditSessions.pop(), true) unless @closedEditSessions.length == 0 + destroyActiveEditSession: -> @destroyEditSessionIndex(@getActiveEditSessionIndex()) @@ -477,7 +483,9 @@ class Editor extends View return if @mini editSession = @editSessions[index] - destroySession = -> + destroySession = => + path = editSession.getPath() + @closedEditSessions.push(path) unless @closedEditSessions.indexOf(path) > -1 editSession.destroy() callback?(index) diff --git a/src/app/keymaps/editor.cson b/src/app/keymaps/editor.cson index fdccfd939..273cb34aa 100644 --- a/src/app/keymaps/editor.cson +++ b/src/app/keymaps/editor.cson @@ -1,3 +1,6 @@ +'#root-view': + 'meta-T': 'editor:undo-close-session' + '.editor': 'meta-s': 'editor:save' 'meta-S': 'editor:save-as'