diff --git a/src/editor.coffee b/src/editor.coffee index c15bc88ce..0f0c51208 100644 --- a/src/editor.coffee +++ b/src/editor.coffee @@ -7,6 +7,9 @@ activeWindow = App.activeWindow ace = require 'ace/ace' +{EditSession} = require 'ace/edit_session' +{UndoManager} = require 'ace/undomanager' + module.exports = class Editor extends Pane filename: null @@ -30,6 +33,8 @@ class Editor extends Pane 'Alt-Shift-.' : 'end' 'Ctrl-L' : 'consolelog' + sessions: {} + initialize: -> @ace = ace.edit "editor" @ace.setTheme require "ace/theme/twilight" @@ -53,6 +58,7 @@ class Editor extends Pane return @saveAs() if not @filename File.write @filename, @ace.getSession().getValue() + @sessions[@filename] = @ace.getSession() activeWindow.setDirty false @ace._emit 'save', { @filename } @@ -64,14 +70,15 @@ class Editor extends Pane if File.isDirectory @filename File.changeWorkingDirectory @filename activeWindow.setTitle _.last @filename.split '/' - @ace.getSession().setValue "" + @ace.setSession @newSession() activeWindow.setDirty false else if /png|jpe?g|gif/i.test @filename App.openURL @filename else activeWindow.setTitle _.last @filename.split '/' - @ace.getSession().setValue File.read @filename + @sessions[@filename] or= @newSession File.read @filename + @ace.setSession @sessions[@filename] activeWindow.setDirty false @ace._emit 'open', { @filename } @@ -87,6 +94,11 @@ class Editor extends Pane @ace.resize() , timeout + newSession: (code) -> + doc = new EditSession code or '' + doc.setUndoManager new UndoManager + doc + copy: -> editor = @ace text = editor.getSession().doc.getTextRange editor.getSelectionRange()