From 447b0598f98aa493ace3af194017cc02b761bcf3 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Tue, 10 Apr 2012 17:35:49 -0600 Subject: [PATCH] Replace EditSession with dumb editor state hash, which can be supplied on editor construction. --- src/app/edit-session.coffee | 8 ------- src/app/editor.coffee | 42 ++++++++++++++++++++----------------- src/app/point.coffee | 3 +++ src/app/root-view.coffee | 3 ++- 4 files changed, 28 insertions(+), 28 deletions(-) delete mode 100644 src/app/edit-session.coffee diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee deleted file mode 100644 index a640b3a5c..000000000 --- a/src/app/edit-session.coffee +++ /dev/null @@ -1,8 +0,0 @@ -Point = require 'point' - -module.exports = -class EditSession - cursorScreenPosition: new Point(0, 0) - scrollTop: 0 - scrollLeft: 0 - diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 971c239e9..dd2a5fbd0 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -6,7 +6,6 @@ Gutter = require 'gutter' Renderer = require 'renderer' Point = require 'point' Range = require 'range' -EditSession = require 'edit-session' $ = require 'jquery' _ = require 'underscore' @@ -40,17 +39,20 @@ class Editor extends View softTabs: true tabText: ' ' - initialize: ({buffer}) -> + initialize: (editorState={}) -> requireStylesheet 'editor.css' requireStylesheet 'theme/twilight.css' @id = Editor.idCounter++ - @editSessionsByBufferId = {} @bindKeys() + @autoIndent = true @buildCursorAndSelection() @handleEvents() - @setBuffer(buffer ? new Buffer) - @autoIndent = true + + buffer = editorState.buffer ? new Buffer + @editorStatesByBufferId = {} + @editorStatesByBufferId[buffer.id] = editorState + @setBuffer(buffer) bindKeys: -> @on 'save', => @save() @@ -204,7 +206,7 @@ class Editor extends View setBuffer: (buffer) -> if @buffer - @saveEditSession() + @saveEditorStateForCurrentBuffer() @unsubscribeFromBuffer() @buffer = buffer @@ -215,21 +217,25 @@ class Editor extends View @renderLines() @gutter.renderLineNumbers() - @loadEditSessionForBuffer(@buffer) + @loadEditorStateForBuffer(@buffer) @buffer.on "change.editor#{@id}", (e) => @handleBufferChange(e) @renderer.on 'change', (e) => @handleRendererChange(e) - loadEditSessionForBuffer: (buffer) -> - @editSession = (@editSessionsByBufferId[buffer.id] ?= new EditSession) - @setCursorScreenPosition(@editSession.cursorScreenPosition) - @scroller.scrollTop(@editSession.scrollTop) - @scroller.scrollLeft(@editSession.scrollLeft) + loadEditorStateForBuffer: (buffer) -> + editorState = (@editorStatesByBufferId[buffer.id] ?= {}) + @setCursorScreenPosition(editorState.cursorScreenPosition ? [0, 0]) + @scroller.scrollTop(editorState.scrollTop ? 0) + @scroller.scrollLeft(editorState.scrollLeft ? 0) - saveEditSession: -> - @editSession.cursorScreenPosition = @getCursorScreenPosition() - @editSession.scrollTop = @scroller.scrollTop() - @editSession.scrollLeft = @scroller.scrollLeft() + getEditorState: -> + buffer: @buffer + cursorScreenPosition: @getCursorScreenPosition().copy() + scrollTop: @scroller.scrollTop() + scrollLeft: @scroller.scrollLeft() + + saveEditorStateForCurrentBuffer: -> + @editorStatesByBufferId[@buffer.id] = @getEditorState() handleBufferChange: (e) -> @compositeCursor.handleBufferChange(e) @@ -465,9 +471,7 @@ class Editor extends View container = $$ -> @div class: axis container.insertBefore(this).append(this.detach()) - editor = new Editor({@buffer}) - editor.setCursorScreenPosition(@getCursorScreenPosition()) - + editor = new Editor(@getEditorState()) this[insertMethod](editor) @rootView().adjustSplitPanes() editor diff --git a/src/app/point.coffee b/src/app/point.coffee index 665c8a18e..068d3e5f2 100644 --- a/src/app/point.coffee +++ b/src/app/point.coffee @@ -76,3 +76,6 @@ class Point toString: -> "#{@row},#{@column}" + + toArray: -> + [@row, @column] diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index 656908f73..5c6da725c 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -18,7 +18,8 @@ class RootView extends View editors: null - initialize: ({path}) -> + initialize: (params) -> + {path} = params @editors = [] @createProject(path)