From 7f1b094ed2232f2e19340d812bf0bbde6c1c1c7d Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 21 Jun 2012 17:29:12 -0600 Subject: [PATCH] Make Cursor and Selection create anchors via EditSession.prototype.addAnchor --- src/app/cursor.coffee | 3 ++- src/app/edit-session.coffee | 11 +++++++++++ src/app/selection.coffee | 6 ++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index c151efc21..044b9ab0d 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -12,11 +12,12 @@ class Cursor wordRegex: /(\w+)|([^\w\s]+)/g constructor: ({@editSession, screenPosition, bufferPosition}) -> - @anchor = new Anchor(@editSession) + @anchor = @editSession.addAnchor() @setScreenPosition(screenPosition) if screenPosition @setBufferPosition(bufferPosition) if bufferPosition destroy: -> + @editSession.removeAnchor(@anchor) @editSession.removeCursor(this) @trigger 'destroy' diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index c38227b80..8de5d7f6f 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -1,5 +1,6 @@ Point = require 'point' Buffer = require 'buffer' +Anchor = require 'anchor' DisplayBuffer = require 'display-buffer' Cursor = require 'cursor' Selection = require 'selection' @@ -20,6 +21,7 @@ class EditSession scrollTop: 0 scrollLeft: 0 displayBuffer: null + anchors: null cursors: null selections: null autoIndent: true @@ -31,6 +33,7 @@ class EditSession @softTabs ?= true @displayBuffer = new DisplayBuffer(@buffer, { @tabText }) @tokenizedBuffer = @displayBuffer.tokenizedBuffer + @anchors = [] @cursors = [] @selections = [] @addCursorAtScreenPosition([0, 0]) @@ -227,6 +230,14 @@ class EditSession fn(selection) for selection in selections @buffer.endUndoBatch(@getSelectedBufferRanges()) + addAnchor: -> + anchor = new Anchor(this) + @anchors.push(anchor) + anchor + + removeAnchor: (anchor) -> + _.remove(@anchors, anchor) + getCursors: -> new Array(@cursors...) getCursor: (index=0) -> diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 0cacf5a08..db0a09b3b 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -68,7 +68,9 @@ class Selection @editSession.buffer.getTextInRange(@getBufferRange()) clear: -> - @modifyScreenRange => @anchor = null + @modifyScreenRange => + @editSession.removeAnchor(@anchor) + @anchor = null selectWord: -> @setBufferRange(@cursor.getCurrentWordBufferRange()) @@ -229,7 +231,7 @@ class Selection @trigger 'change-screen-range', newScreenRange unless oldScreenRange.isEqual(newScreenRange) placeAnchor: -> - @anchor = new Anchor(@editSession) + @anchor = @editSession.addAnchor() @anchor.setScreenPosition(@cursor.getScreenPosition()) intersectsBufferRange: (bufferRange) ->