diff --git a/spec/app/buffer-spec.coffee b/spec/app/buffer-spec.coffee index 932506576..6478a1e7b 100644 --- a/spec/app/buffer-spec.coffee +++ b/spec/app/buffer-spec.coffee @@ -90,6 +90,21 @@ describe 'Buffer', -> expect(event.newText).toBe "second" expect(buffer.isModified()).toBeFalsy() + describe "when the buffer is modified", -> + it "sets modifiedOnDisk to be true", -> + fileChangeHandler = jasmine.createSpy('fileChange') + buffer.file.on 'contents-change', fileChangeHandler + + buffer.insert([0, 0], "a change") + fs.write(path, "second") + + expect(fileChangeHandler.callCount).toBe 0 + waitsFor "file to trigger contents-change event", -> + fileChangeHandler.callCount > 0 + + runs -> + expect(buffer.isModifiedOnDisk()).toBeTruthy() + describe ".isModified()", -> beforeEach -> buffer.destroy() @@ -284,6 +299,17 @@ describe 'Buffer', -> buffer = new Buffer expect(-> buffer.save()).toThrow() + describe "reload()", -> + it "loads text from disk are sets @modified and @modifiedOnDisk to false", -> + buffer.modified = true + buffer.modifiedOnDisk = true + buffer.setText("abc") + + buffer.reload() + expect(buffer.modifed).toBeFalsy() + expect(buffer.modifiedOnDisk).toBeFalsy() + expect(buffer.getText()).toBe(fileContents) + describe ".saveAs(path)", -> filePath = null diff --git a/src/app/buffer.coffee b/src/app/buffer.coffee index 21aa60e57..b8838c505 100644 --- a/src/app/buffer.coffee +++ b/src/app/buffer.coffee @@ -12,6 +12,7 @@ class Buffer @idCounter = 1 undoManager: null modified: null + modifiedOnDisk: null lines: null file: null @@ -32,6 +33,11 @@ class Buffer destroy: -> @file?.off() + reload: -> + @setText(fs.read(@file.getPath())) + @modified = false + @modifiedOnDisk = false + getPath: -> @file?.getPath() @@ -41,7 +47,9 @@ class Buffer @file?.off() @file = new File(path) @file.on "contents-change", => - unless @isModified() + if @isModified() + @modifiedOnDisk = true + else @setText(fs.read(@file.getPath())) @modified = false @trigger "path-change", this @@ -167,9 +175,13 @@ class Buffer fs.write path, @getText() @file?.updateMd5() @modified = false + @modifiedOnDisk = false @setPath(path) @trigger 'after-save' + isModifiedOnDisk: -> + @modifiedOnDisk + isModified: -> @modified diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.coffee index 6bdce72c3..60aef8450 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.coffee @@ -9,6 +9,7 @@ window.keymap.bindKeys '.editor', 'meta-enter': 'newline-below' 'tab': 'indent' 'backspace': 'backspace' + 'shift-backspace': 'backspace' 'delete': 'delete' 'meta-x': 'cut' 'meta-c': 'copy'