From bb0a19fba3a46ae08a3531182742ca3c9fbdbdec Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Mon, 11 Feb 2013 13:20:31 -0800 Subject: [PATCH 1/5] Sort buffers by most recently opened --- .../fuzzy-finder/lib/fuzzy-finder-view.coffee | 19 +++++++++++++++++-- .../spec/fuzzy-finder-spec.coffee | 19 +++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee index 8b5228571..fb8da7d4f 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee @@ -22,6 +22,10 @@ class FuzzyFinderView extends SelectList @subscribe $(window), 'focus', => @reloadProjectPaths = true @observeConfig 'fuzzy-finder.ignoredNames', => @reloadProjectPaths = true + rootView.eachEditor (editor) -> + editor.activeEditSession.lastOpened = (new Date) - 1 + editor.on 'editor:active-edit-session-changed', (e, editSession, index) -> + editSession.lastOpened = (new Date) - 1 @miniEditor.command 'editor:split-left', => @splitOpenPath (editor, session) -> editor.splitLeft(session) @@ -143,8 +147,19 @@ class FuzzyFinderView extends SelectList @loadPathsTask.start() populateOpenBufferPaths: -> - @paths = rootView.getOpenBufferPaths().map (path) => - rootView.project.relativize(path) + editSessions = [] + rootView.eachEditSession (editSession) -> + editSessions.push editSession + + editSessions = _.sortBy editSessions, (editSession) => + if editSession is rootView.getActiveEditSession() + 0 + else + -(editSession.lastOpened or 1) + + @paths = _.map editSessions, (editSession) => + rootView.project.relativize editSession.buffer.getPath() + @setArray(@paths) detach: -> diff --git a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee index b044cdcef..31018c362 100644 --- a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee +++ b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee @@ -123,11 +123,26 @@ describe 'FuzzyFinder', -> rootView.trigger 'fuzzy-finder:toggle-buffer-finder' expect(finderView.miniEditor.getText()).toBe '' - it "lists the paths of the current open buffers", -> + it "lists the paths of the current open buffers by most recently modified", -> + rootView.attachToDom() + rootView.open 'sample-with-tabs.coffee' rootView.trigger 'fuzzy-finder:toggle-buffer-finder' - expect(finderView.list.children('li').length).toBe 2 + children = finderView.list.children('li') + expect(children.get(0).outerText).toBe "sample.txt" + expect(children.get(1).outerText).toBe "sample.js" + expect(children.get(2).outerText).toBe "sample-with-tabs.coffee" + + rootView.open 'sample.txt' + rootView.trigger 'fuzzy-finder:toggle-buffer-finder' + children = finderView.list.children('li') + expect(children.get(0).outerText).toBe "sample-with-tabs.coffee" + expect(children.get(1).outerText).toBe "sample.js" + expect(children.get(2).outerText).toBe "sample.txt" + + expect(finderView.list.children('li').length).toBe 3 expect(finderView.list.find("li:contains(sample.js)")).toExist() expect(finderView.list.find("li:contains(sample.txt)")).toExist() + expect(finderView.list.find("li:contains(sample-with-tabs.coffee)")).toExist() expect(finderView.list.children().first()).toHaveClass 'selected' describe "when the active editor only contains edit sessions for anonymous buffers", -> From 065019af38d565f24d8f84ff6a7c40587aa02a4a Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 12 Feb 2013 21:20:35 -0800 Subject: [PATCH 2/5] Better getPath() --- src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee index fb8da7d4f..86b488f22 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee @@ -158,7 +158,7 @@ class FuzzyFinderView extends SelectList -(editSession.lastOpened or 1) @paths = _.map editSessions, (editSession) => - rootView.project.relativize editSession.buffer.getPath() + rootView.project.relativize editSession.getPath() @setArray(@paths) From 871498341167a2c6623b1b444ca31c94f642f967 Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 12 Feb 2013 21:25:43 -0800 Subject: [PATCH 3/5] getEditSessions instead of registering a callback --- src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee index 86b488f22..e355f1395 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee @@ -147,9 +147,7 @@ class FuzzyFinderView extends SelectList @loadPathsTask.start() populateOpenBufferPaths: -> - editSessions = [] - rootView.eachEditSession (editSession) -> - editSessions.push editSession + editSessions = rootView.project.getEditSessions() editSessions = _.sortBy editSessions, (editSession) => if editSession is rootView.getActiveEditSession() From 2dc6dfc39f2cf55c505070a23dd27d8d1701465f Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 12 Feb 2013 22:32:05 -0800 Subject: [PATCH 4/5] Serialize buffer last opened times in fuzzy-finder --- .../fuzzy-finder/lib/fuzzy-finder-view.coffee | 6 ++++++ .../fuzzy-finder/lib/fuzzy-finder.coffee | 12 +++++++++++- .../fuzzy-finder/spec/fuzzy-finder-spec.coffee | 16 ++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee index e355f1395..48c4bb117 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee @@ -160,6 +160,12 @@ class FuzzyFinderView extends SelectList @setArray(@paths) + getPaths: -> + paths = {} + for editSession in rootView.project.getEditSessions() + paths[editSession.getPath()] = editSession.lastOpened + paths + detach: -> super diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee index 2bdd340a1..7d89d0056 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee @@ -1,8 +1,10 @@ +_ = require 'underscore' + module.exports = projectPaths: null fuzzyFinderView: null - activate: -> + activate: (state) -> rootView.command 'fuzzy-finder:toggle-file-finder', => @createView().toggleFileFinder() rootView.command 'fuzzy-finder:toggle-buffer-finder', => @@ -15,6 +17,11 @@ module.exports = @loadPathsTask = new LoadPathsTask((paths) => @projectPaths = paths) @loadPathsTask.start() + for path, lastOpened of state + session = _.detect rootView.project.getEditSessions(), (editSession) -> + editSession.getPath() is path + session?.lastOpened = lastOpened + deactivate: -> @loadPathsTask?.terminate() @fuzzyFinderView?.cancel() @@ -22,6 +29,9 @@ module.exports = @projectPaths = null @fuzzyFinderView = null + serialize: -> + @fuzzyFinderView?.getPaths() + createView: -> unless @fuzzyFinderView FuzzyFinderView = require 'fuzzy-finder/lib/fuzzy-finder-view' diff --git a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee index 31018c362..cb9cc03f0 100644 --- a/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee +++ b/src/packages/fuzzy-finder/spec/fuzzy-finder-spec.coffee @@ -1,6 +1,7 @@ RootView = require 'root-view' FuzzyFinder = require 'fuzzy-finder/lib/fuzzy-finder-view' LoadPathsTask = require 'fuzzy-finder/lib/load-paths-task' +_ = require 'underscore' $ = require 'jquery' {$$} = require 'space-pen' fs = require 'fs' @@ -145,6 +146,21 @@ describe 'FuzzyFinder', -> expect(finderView.list.find("li:contains(sample-with-tabs.coffee)")).toExist() expect(finderView.list.children().first()).toHaveClass 'selected' + it "serializes the list of paths and their last opened time", -> + rootView.open 'sample-with-tabs.coffee' + rootView.trigger 'fuzzy-finder:toggle-buffer-finder' + rootView.open 'sample.js' + rootView.trigger 'fuzzy-finder:toggle-buffer-finder' + + states = rootView.serialize().packageStates + states = _.map states['fuzzy-finder'], (path, time) -> [ path, time ] + states = _.sortBy states, (path, time) -> -time + + paths = [ 'sample-with-tabs.coffee', 'sample.txt', 'sample.js' ] + for [time, path] in states + expect(_.last path.split '/').toBe paths.shift() + expect(time).toBeGreaterThan 50000 + describe "when the active editor only contains edit sessions for anonymous buffers", -> it "does not open", -> editor = rootView.getActiveEditor() From d1d5dc051f325b8d8525a4d241dd373fbd70aeaf Mon Sep 17 00:00:00 2001 From: Chris Wanstrath Date: Tue, 12 Feb 2013 22:33:18 -0800 Subject: [PATCH 5/5] better name --- src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee | 2 +- src/packages/fuzzy-finder/lib/fuzzy-finder.coffee | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee index 48c4bb117..3de3b9d49 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder-view.coffee @@ -160,7 +160,7 @@ class FuzzyFinderView extends SelectList @setArray(@paths) - getPaths: -> + getOpenedPaths: -> paths = {} for editSession in rootView.project.getEditSessions() paths[editSession.getPath()] = editSession.lastOpened diff --git a/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee b/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee index 7d89d0056..a117a5735 100644 --- a/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee +++ b/src/packages/fuzzy-finder/lib/fuzzy-finder.coffee @@ -30,7 +30,7 @@ module.exports = @fuzzyFinderView = null serialize: -> - @fuzzyFinderView?.getPaths() + @fuzzyFinderView?.getOpenedPaths() createView: -> unless @fuzzyFinderView