From 693d8258adba8b9f441f1027eebd556fa30e4867 Mon Sep 17 00:00:00 2001 From: Mutwin Kraus Date: Mon, 25 Mar 2013 20:16:22 +0100 Subject: [PATCH] Preserve buffer contents for unsaved files when reloading --- spec/app/edit-session-spec.coffee | 4 ++++ src/app/edit-session.coffee | 3 +++ src/app/project.coffee | 8 ++++++++ src/app/text-buffer.coffee | 2 +- 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 3337d526b..061139528 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -2059,6 +2059,10 @@ describe "EditSession", -> editSession.setCursorScreenPosition([0, 1]) editSession.buffer.reload() expect(editSession.getCursorScreenPosition()).toEqual [0,1] + it "preserves the current state if the file was not saved yet", -> + editSession = project.buildEditSessionFromState('test', autoIndent: false) + editSession = EditSession.deserialize(editSession.serialize()) + expect(editSession.buffer.getText()).toBe('test') describe "when the 'grammars-loaded' event is triggered on the syntax global", -> it "reloads the edit session's grammar and re-tokenizes the buffer if it changes", -> diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index e14baa16a..9b7b611b6 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -17,6 +17,8 @@ class EditSession @deserialize: (state) -> if fs.exists(state.buffer) session = project.buildEditSession(state.buffer) + else if state.unsavedState + session = project.buildEditSessionFromState(state.unsavedState) else console.warn "Could not build edit session for path '#{state.buffer}' because that file no longer exists" if state.buffer session = project.buildEditSession(null) @@ -92,6 +94,7 @@ class EditSession scrollTop: @getScrollTop() scrollLeft: @getScrollLeft() cursorScreenPosition: @getCursorScreenPosition().serialize() + unsavedState: @buffer.getText() if !@buffer.fileExists() copy: -> EditSession.deserialize(@serialize(), @project) diff --git a/src/app/project.coffee b/src/app/project.coffee index 53621f374..ff2805692 100644 --- a/src/app/project.coffee +++ b/src/app/project.coffee @@ -87,6 +87,9 @@ class Project buildEditSession: (filePath, editSessionOptions={}) -> @buildEditSessionForBuffer(@bufferForPath(filePath), editSessionOptions) + buildEditSessionFromState: (state, editSessionOptions={}) -> + @buildEditSessionForBuffer(@bufferForState(state), editSessionOptions) + buildEditSessionForBuffer: (buffer, editSessionOptions) -> options = _.extend(@defaultEditSessionOptions(), editSessionOptions) options.project = this @@ -138,6 +141,11 @@ class Project else @buildBuffer() + bufferForState: (state) -> + buffer = @buildBuffer() + buffer.setText(state) if state + buffer + buildBuffer: (filePath) -> buffer = new Buffer(filePath, this) @buffers.push buffer diff --git a/src/app/text-buffer.coffee b/src/app/text-buffer.coffee index bd06299d2..c6cf06c79 100644 --- a/src/app/text-buffer.coffee +++ b/src/app/text-buffer.coffee @@ -445,7 +445,7 @@ class Buffer @trigger 'modified-status-changed', modifiedStatus fileExists: -> - @file.exists() + @file? && @file.exists() logLines: (start=0, end=@getLastRow())-> for row in [start..end]