From 6968075d3890fb0692cee98bd44f15870a633827 Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Mon, 22 Jul 2013 12:03:22 -0700 Subject: [PATCH] Jumping to bookmarks works --- .../bookmarks/lib/bookmarks-view.coffee | 32 ++++++++++++++--- .../bookmarks/spec/bookmarks-view-spec.coffee | 35 +++++++++++++++++++ 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/packages/bookmarks/lib/bookmarks-view.coffee b/src/packages/bookmarks/lib/bookmarks-view.coffee index ed17b626a..1c18a4a02 100644 --- a/src/packages/bookmarks/lib/bookmarks-view.coffee +++ b/src/packages/bookmarks/lib/bookmarks-view.coffee @@ -24,18 +24,16 @@ class BookmarksView if bookmarks and bookmarks.length bookmark.destroy() for bookmark in bookmarks - console.log('removing mark', position, bookmark) else newmark = @createBookmarkMarker(position.row) - console.log('bookmarking', position, newmark) @renderBookmarkMarkers() jumpToNextBookmark: => - console.log('next bm', @editor) + @jumpToBookmark('getNextBookmark') jumpToPreviousBookmark: => - console.log('prev bm', @editor) + @jumpToBookmark('getPreviousBookmark') renderBookmarkMarkers: => return unless @gutter.isVisible() @@ -49,6 +47,32 @@ class BookmarksView ### Internal ### + jumpToBookmark: (getBookmarkFunction) => + cursor = @editor.getCursor() + position = cursor.getBufferPosition() + bookmarkMarker = @[getBookmarkFunction](position.row) + @editor.activeEditSession.setSelectedBufferRange(bookmarkMarker.getBufferRange(), autoscroll: true) + + getPreviousBookmark: (bufferRow) -> + markers = @findBookmarkMarkers() + bookmarkIndex = _.sortedIndex markers, bufferRow, (marker) -> + if marker.getBufferRange then marker.getBufferRange().start.row else marker + + bookmarkIndex-- + bookmarkIndex = markers.length - 1 if bookmarkIndex < 0 + + markers[bookmarkIndex] + + getNextBookmark: (bufferRow) -> + markers = @findBookmarkMarkers() + bookmarkIndex = _.sortedIndex markers, bufferRow, (marker) -> + if marker.getBufferRange then marker.getBufferRange().start.row else marker + + bookmarkIndex++ if markers[bookmarkIndex].getBufferRange().start.row == bufferRow + bookmarkIndex = 0 if bookmarkIndex >= markers.length + + markers[bookmarkIndex] + createBookmarkMarker: (bufferRow) -> range = [[bufferRow, 0], [bufferRow, 0]] @displayBuffer().markBufferRange(range, @bookmarkMarkerAttributes(invalidationStrategy: 'never')) diff --git a/src/packages/bookmarks/spec/bookmarks-view-spec.coffee b/src/packages/bookmarks/spec/bookmarks-view-spec.coffee index fa8f1cb96..03346c10f 100644 --- a/src/packages/bookmarks/spec/bookmarks-view-spec.coffee +++ b/src/packages/bookmarks/spec/bookmarks-view-spec.coffee @@ -50,3 +50,38 @@ fdescribe "Bookmarks package", -> editor.trigger 'bookmarks:toggle-bookmark' expect(editor.find('.bookmarked').length).toEqual 0 + + describe "moving between bookmarks", -> + beforeEach -> + editSession.setCursorBufferPosition([2, 0]) + editor.trigger 'bookmarks:toggle-bookmark' + + editSession.setCursorBufferPosition([10, 0]) + editor.trigger 'bookmarks:toggle-bookmark' + + describe "jump-to-next-bookmark", -> + it "finds next bookmark", -> + editSession.setCursorBufferPosition([0, 0]) + + editor.trigger 'bookmarks:jump-to-next-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [2, 0] + + editor.trigger 'bookmarks:jump-to-next-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [10, 0] + + editor.trigger 'bookmarks:jump-to-next-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [2, 0] + + + describe "jump-to-previous-bookmark", -> + it "finds previous bookmark", -> + editSession.setCursorBufferPosition([0, 0]) + + editor.trigger 'bookmarks:jump-to-previous-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [10, 0] + + editor.trigger 'bookmarks:jump-to-previous-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [2, 0] + + editor.trigger 'bookmarks:jump-to-previous-bookmark' + expect(editSession.getCursor().getBufferPosition()).toEqual [10, 0]