From cdc4da2f7d6f0e04cd0de8fd0ffeee6f7db2b3eb Mon Sep 17 00:00:00 2001 From: Corey Johnson & Nathan Sobo Date: Tue, 10 Apr 2012 17:05:45 -0700 Subject: [PATCH 1/4] :lipstick: (this was added so the function could be one line instead of two) --- src/app/command-panel.coffee | 4 ++-- src/app/root-view.coffee | 6 ++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/app/command-panel.coffee b/src/app/command-panel.coffee index e7eb9d0f7..fe027b1f5 100644 --- a/src/app/command-panel.coffee +++ b/src/app/command-panel.coffee @@ -32,11 +32,11 @@ class CommandPanel extends View toggle: -> if @parent().length then @hide() else @show() - show: -> + show: (text='') -> @rootView.append(this) @prompt.css 'font', @editor.css('font') @editor.focus() - @editor.buffer.setText('') + @editor.buffer.setText(text) hide: -> @detach() diff --git a/src/app/root-view.coffee b/src/app/root-view.coffee index aacbd959b..afbd4e2e0 100644 --- a/src/app/root-view.coffee +++ b/src/app/root-view.coffee @@ -25,10 +25,8 @@ class RootView extends View @createProject(path) @on 'toggle-file-finder', => @toggleFileFinder() - @on 'show-console', -> window.showConsole() - @on 'find-in-file', => - @commandPanel.show() - @commandPanel.editor.setText("/") + @on 'show-console', => window.showConsole() + @on 'find-in-file', => @commandPanel.show("/") @one 'attach', => @focus() @on 'focus', (e) => From 4bdc908b986d2451dd84ae59aee8b1f93c889a37 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 11 Apr 2012 12:57:42 -0700 Subject: [PATCH 2/4] Store editorStates as an array on Editor --- src/app/editor.coffee | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 5292d567f..c1052885d 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -48,7 +48,7 @@ class Editor extends View @autoIndent = true @buildCursorAndSelection() @handleEvents() - @editorStatesByBufferId = {} + @editorStates = [] @setEditorState(editorState) bindKeys: -> @@ -217,15 +217,30 @@ class Editor extends View @buffer.on "change.editor#{@id}", (e) => @handleBufferChange(e) @renderer.on 'change', (e) => @handleRendererChange(e) + getEditorStateForBuffer: (buffer) -> + _.find @editorStates, (editorState) => + editorState.buffer.id == buffer.id + + setEditorStateForBuffer: (buffer, editorState) -> + editorState.buffer = buffer + existingEditorState = @getEditorStateForBuffer(buffer) + if existingEditorState + _.extend(existingEditorState, editorState) + else + @editorStates.push(editorState) + loadEditorStateForBuffer: (buffer) -> - editorState = (@editorStatesByBufferId[buffer.id] ?= {}) + editorState = @getEditorStateForBuffer(buffer) + if not editorState + editorState = {} + @setEditorStateForBuffer(buffer, editorState) @setCursorScreenPosition(editorState.cursorScreenPosition ? [0, 0]) @scroller.scrollTop(editorState.scrollTop ? 0) @scroller.scrollLeft(editorState.scrollLeft ? 0) - setEditorState: (editorState) -> - buffer = editorState.buffer ? new Buffer - @editorStatesByBufferId[buffer.id] = editorState + setEditorState: (editorState={}) -> + buffer = editorState.buffer ?= new Buffer + @setEditorStateForBuffer(buffer, editorState) @setBuffer(buffer) getEditorState: -> @@ -235,7 +250,7 @@ class Editor extends View scrollLeft: @scroller.scrollLeft() saveEditorStateForCurrentBuffer: -> - @editorStatesByBufferId[@buffer.id] = @getEditorState() + @setEditorStateForBuffer(@buffer, @getEditorState()) handleBufferChange: (e) -> @compositeCursor.handleBufferChange(e) From bf367863ba98a6ca846e16d18e1d891eebd2aa37 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 11 Apr 2012 13:41:19 -0700 Subject: [PATCH 3/4] meta-} goes to next buffer --- spec/app/editor-spec.coffee | 18 ++++++++++++++++++ src/app/editor.coffee | 19 ++++++++++++++++--- src/app/keymaps/editor.coffee | 3 ++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index b796898b4..d1b8bfe37 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -2096,3 +2096,21 @@ describe "Editor", -> eventHandler.reset() editor.buffer.setPath("new.txt") expect(eventHandler).toHaveBeenCalled() + + + fdescribe ".loadNextEditorState()", -> + it "loads the next editor state and wraps to beginning when end is reached", -> + buffer0 = new Buffer("0") + buffer1 = new Buffer("1") + buffer2 = new Buffer("2") + editor = new Editor {buffer: buffer0} + editor.setBuffer(buffer1) + editor.setBuffer(buffer2) + + expect(editor.buffer.path).toBe "2" + editor.loadNextEditorState() + expect(editor.buffer.path).toBe "0" + editor.loadNextEditorState() + expect(editor.buffer.path).toBe "1" + editor.loadNextEditorState() + expect(editor.buffer.path).toBe "2" diff --git a/src/app/editor.coffee b/src/app/editor.coffee index c1052885d..c7d09ae01 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -84,6 +84,7 @@ class Editor extends View @on 'split-up', => @splitUp() @on 'split-down', => @splitDown() @on 'close', => @remove(); false + @on 'show-next-buffer', => @loadNextEditorState() @on 'move-to-top', => @moveCursorToTop() @on 'move-to-bottom', => @moveCursorToBottom() @@ -223,12 +224,18 @@ class Editor extends View setEditorStateForBuffer: (buffer, editorState) -> editorState.buffer = buffer - existingEditorState = @getEditorStateForBuffer(buffer) - if existingEditorState - _.extend(existingEditorState, editorState) + index = @indexOfEditorState(editorState) + if index? + @editorStates[index] = editorState else @editorStates.push(editorState) + indexOfEditorState: (editorState) -> + for o, i in @editorStates + return i if o.buffer.id == editorState.buffer.id + + return null + loadEditorStateForBuffer: (buffer) -> editorState = @getEditorStateForBuffer(buffer) if not editorState @@ -238,6 +245,12 @@ class Editor extends View @scroller.scrollTop(editorState.scrollTop ? 0) @scroller.scrollLeft(editorState.scrollLeft ? 0) + loadNextEditorState: -> + index = @indexOfEditorState(@getEditorState()) + if index? + nextIndex = (index + 1) % @editorStates.length + @setEditorState(@editorStates[nextIndex]) + setEditorState: (editorState={}) -> buffer = editorState.buffer ?= new Buffer @setEditorStateForBuffer(buffer, editorState) diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.coffee index 91946d070..4c05b7698 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.coffee @@ -30,4 +30,5 @@ window.keymap.bindKeys '.editor', 'alt-meta-up': 'split-up' 'alt-meta-down': 'split-down' 'meta-[': 'outdent-selected-rows' - 'meta-]': 'indent-selected-rows' \ No newline at end of file + 'meta-]': 'indent-selected-rows' + 'meta-}': 'show-next-buffer' \ No newline at end of file From 5097218aa204a8448e4b80b647802f191b0d4454 Mon Sep 17 00:00:00 2001 From: Corey Johnson Date: Wed, 11 Apr 2012 13:41:54 -0700 Subject: [PATCH 4/4] meta-{ goes to previous buffer --- spec/app/editor-spec.coffee | 20 ++++++++++++++++++-- src/app/editor.coffee | 7 +++++++ src/app/keymaps/editor.coffee | 1 + 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index d1b8bfe37..61a5cb93c 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -2097,8 +2097,7 @@ describe "Editor", -> editor.buffer.setPath("new.txt") expect(eventHandler).toHaveBeenCalled() - - fdescribe ".loadNextEditorState()", -> + describe ".loadNextEditorState()", -> it "loads the next editor state and wraps to beginning when end is reached", -> buffer0 = new Buffer("0") buffer1 = new Buffer("1") @@ -2114,3 +2113,20 @@ describe "Editor", -> expect(editor.buffer.path).toBe "1" editor.loadNextEditorState() expect(editor.buffer.path).toBe "2" + + describe ".loadPreviousEditorState()", -> + it "loads the next editor state and wraps to beginning when end is reached", -> + buffer0 = new Buffer("0") + buffer1 = new Buffer("1") + buffer2 = new Buffer("2") + editor = new Editor {buffer: buffer0} + editor.setBuffer(buffer1) + editor.setBuffer(buffer2) + + expect(editor.buffer.path).toBe "2" + editor.loadPreviousEditorState() + expect(editor.buffer.path).toBe "1" + editor.loadPreviousEditorState() + expect(editor.buffer.path).toBe "0" + editor.loadPreviousEditorState() + expect(editor.buffer.path).toBe "2" diff --git a/src/app/editor.coffee b/src/app/editor.coffee index c7d09ae01..8c51d02af 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -85,6 +85,7 @@ class Editor extends View @on 'split-down', => @splitDown() @on 'close', => @remove(); false @on 'show-next-buffer', => @loadNextEditorState() + @on 'show-previous-buffer', => @loadPreviousEditorState() @on 'move-to-top', => @moveCursorToTop() @on 'move-to-bottom', => @moveCursorToBottom() @@ -251,6 +252,12 @@ class Editor extends View nextIndex = (index + 1) % @editorStates.length @setEditorState(@editorStates[nextIndex]) + loadPreviousEditorState: -> + index = @indexOfEditorState(@getEditorState()) + if index? + previousIndex = if --index >= 0 then index else @editorStates.length - 1 + @setEditorState(@editorStates[previousIndex]) + setEditorState: (editorState={}) -> buffer = editorState.buffer ?= new Buffer @setEditorStateForBuffer(buffer, editorState) diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.coffee index 4c05b7698..883c2e6e6 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.coffee @@ -31,4 +31,5 @@ window.keymap.bindKeys '.editor', 'alt-meta-down': 'split-down' 'meta-[': 'outdent-selected-rows' 'meta-]': 'indent-selected-rows' + 'meta-{': 'show-previous-buffer' 'meta-}': 'show-next-buffer' \ No newline at end of file