From 9ba3b74a9d967ebcf10c431750060720d74b42a2 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Tue, 18 Sep 2012 17:31:16 -0700 Subject: [PATCH 1/6] Add support for Page Up and Page Down keys --- spec/app/editor-spec.coffee | 38 +++++++++++++++++++++++++++++++++++++ src/app/cursor.coffee | 8 ++++---- src/app/edit-session.coffee | 8 ++++---- src/app/editor.coffee | 16 ++++++++++++++++ src/app/keymaps/atom.coffee | 2 ++ 5 files changed, 64 insertions(+), 8 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index 2749ab069..e1df708aa 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -1654,3 +1654,41 @@ describe "Editor", -> editor.edit(project.buildEditSessionForPath()) paths = editor.getOpenBufferPaths().map (path) -> project.relativize(path) expect(paths).toEqual = ['sample.js', 'sample.txt', 'two-hundred.txt'] + + describe "paging up and down", -> + beforeEach -> + editor.attachToDom() + + it "moves to the last line when page down is repeated from the first line", -> + rows = editor.getLineCount() - 1 + expect(rows).toBeGreaterThan(0) + row = editor.getCursor(0).getScreenPosition().row + expect(row).toBe(0) + while row < rows + editor.pageDown() + newRow = editor.getCursor(0).getScreenPosition().row + expect(newRow).toBeGreaterThan(row) + if (newRow <= row) + break + row = newRow + expect(row).toBe(rows) + + it "moves to the first line when page up is repeated from the last line", -> + editor.moveCursorToBottom() + row = editor.getCursor().getScreenPosition().row + expect(row).toBeGreaterThan(0) + while row > 0 + editor.pageUp() + newRow = editor.getCursor().getScreenPosition().row + expect(newRow).toBeLessThan(row) + if (newRow >= row) + break + row = newRow + expect(row).toBe(0) + + it "resets to original position when down is followed by up", -> + expect(editor.getCursor().getScreenPosition().row).toBe(0) + editor.pageDown() + expect(editor.getCursor().getScreenPosition().row).toBeGreaterThan(0) + editor.pageUp() + expect(editor.getCursor().getScreenPosition().row).toBe(0) diff --git a/src/app/cursor.coffee b/src/app/cursor.coffee index af26c65c0..cc707cc8e 100644 --- a/src/app/cursor.coffee +++ b/src/app/cursor.coffee @@ -54,16 +54,16 @@ class Cursor refreshScreenPosition: -> @anchor.refreshScreenPosition() - moveUp: -> + moveUp: (rowCount = 1) -> { row, column } = @getScreenPosition() column = @goalColumn if @goalColumn? - @setScreenPosition({row: row - 1, column: column}) + @setScreenPosition({row: row - rowCount, column: column}) @goalColumn = column - moveDown: -> + moveDown: (rowCount = 1) -> { row, column } = @getScreenPosition() column = @goalColumn if @goalColumn? - @setScreenPosition({row: row + 1, column: column}) + @setScreenPosition({row: row + rowCount, column: column}) @goalColumn = column moveLeft: -> diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index f9b988b32..7b613d3f3 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -427,11 +427,11 @@ class EditSession getTextInBufferRange: (range) -> @buffer.getTextInRange(range) - moveCursorUp: -> - @moveCursors (cursor) -> cursor.moveUp() + moveCursorUp: (lineCount) -> + @moveCursors (cursor) -> cursor.moveUp(lineCount) - moveCursorDown: -> - @moveCursors (cursor) -> cursor.moveDown() + moveCursorDown: (lineCount) -> + @moveCursors (cursor) -> cursor.moveDown(lineCount) moveCursorLeft: -> @moveCursors (cursor) -> cursor.moveLeft() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 00e953981..982c2e207 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -131,6 +131,8 @@ class Editor extends View 'select-to-end-of-word': @selectToEndOfWord 'select-to-beginning-of-word': @selectToBeginningOfWord 'select-all': @selectAll + 'page-down': @pageDown + 'page-up': @pageUp if not @mini _.extend editorBindings, @@ -246,6 +248,20 @@ class Editor extends View bufferRowsForScreenRows: (startRow, endRow) -> @activeEditSession.bufferRowsForScreenRows(startRow, endRow) stateForScreenRow: (row) -> @activeEditSession.stateForScreenRow(row) + pageDown: -> + [top, rows] = @getPageSize() + @activeEditSession.moveCursorDown(rows) + @scrollTop(top, adjustVerticalScrollbar: true) + pageUp: -> + [top, rows] = @getPageSize() + @activeEditSession.moveCursorUp(rows) + @scrollTop(top, adjustVerticalScrollbar: true) + getPageSize: -> + scrollViewHeight = @scrollView[0].clientHeight + newScrollTop = @scrollTop() + scrollViewHeight + rows = Math.max(1, Math.ceil(scrollViewHeight / @lineHeight)) + [newScrollTop, rows] + setText: (text) -> @getBuffer().setText(text) getText: -> @getBuffer().getText() getPath: -> @getBuffer().getPath() diff --git a/src/app/keymaps/atom.coffee b/src/app/keymaps/atom.coffee index 71f03d273..1949c4c0f 100644 --- a/src/app/keymaps/atom.coffee +++ b/src/app/keymaps/atom.coffee @@ -5,3 +5,5 @@ window.keymap.bindKeys '*' left: 'move-left' down: 'move-down' up: 'move-up' + pagedown: 'page-down' + pageup: 'page-up' From 47ed19f851166f04849fd7525688aa698224617b Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 19 Sep 2012 08:52:05 -0700 Subject: [PATCH 2/6] Substract scroll top when paging up --- spec/app/editor-spec.coffee | 3 +++ src/app/editor.coffee | 19 ++++++++----------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/spec/app/editor-spec.coffee b/spec/app/editor-spec.coffee index e1df708aa..7b6a3d6ea 100644 --- a/spec/app/editor-spec.coffee +++ b/spec/app/editor-spec.coffee @@ -1672,6 +1672,7 @@ describe "Editor", -> break row = newRow expect(row).toBe(rows) + expect(editor.getLastVisibleScreenRow()).toBe(rows) it "moves to the first line when page up is repeated from the last line", -> editor.moveCursorToBottom() @@ -1685,6 +1686,7 @@ describe "Editor", -> break row = newRow expect(row).toBe(0) + expect(editor.getFirstVisibleScreenRow()).toBe(0) it "resets to original position when down is followed by up", -> expect(editor.getCursor().getScreenPosition().row).toBe(0) @@ -1692,3 +1694,4 @@ describe "Editor", -> expect(editor.getCursor().getScreenPosition().row).toBeGreaterThan(0) editor.pageUp() expect(editor.getCursor().getScreenPosition().row).toBe(0) + expect(editor.getFirstVisibleScreenRow()).toBe(0) diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 982c2e207..10a02dbcb 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -249,18 +249,15 @@ class Editor extends View stateForScreenRow: (row) -> @activeEditSession.stateForScreenRow(row) pageDown: -> - [top, rows] = @getPageSize() - @activeEditSession.moveCursorDown(rows) - @scrollTop(top, adjustVerticalScrollbar: true) + newScrollTop = @scrollTop() + @scrollView[0].clientHeight + @activeEditSession.moveCursorDown(@getPageRows()) + @scrollTop(newScrollTop, adjustVerticalScrollbar: true) pageUp: -> - [top, rows] = @getPageSize() - @activeEditSession.moveCursorUp(rows) - @scrollTop(top, adjustVerticalScrollbar: true) - getPageSize: -> - scrollViewHeight = @scrollView[0].clientHeight - newScrollTop = @scrollTop() + scrollViewHeight - rows = Math.max(1, Math.ceil(scrollViewHeight / @lineHeight)) - [newScrollTop, rows] + newScrollTop = @scrollTop() - @scrollView[0].clientHeight + @activeEditSession.moveCursorUp(@getPageRows()) + @scrollTop(newScrollTop, adjustVerticalScrollbar: true) + getPageRows: -> + Math.max(1, Math.ceil(@scrollView[0].clientHeight / @lineHeight)) setText: (text) -> @getBuffer().setText(text) getText: -> @getBuffer().getText() From 04b922d0873b4e744952bbd5e295447f28e21236 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Wed, 19 Sep 2012 11:48:34 -0600 Subject: [PATCH 3/6] Add less.tmbundle for supporting less stylesheets --- .../Commands/Save to CSS.tmCommand | 24 ++ bundles/less.tmbundle/README.md | 47 +++ .../less.tmbundle/Syntaxes/LESS.tmLanguage | 344 ++++++++++++++++++ bundles/less.tmbundle/info.plist | 15 + bundles/less.tmbundle/sample.less | 44 +++ bundles/less.tmbundle/sample.png | Bin 0 -> 74284 bytes 6 files changed, 474 insertions(+) create mode 100755 bundles/less.tmbundle/Commands/Save to CSS.tmCommand create mode 100755 bundles/less.tmbundle/README.md create mode 100755 bundles/less.tmbundle/Syntaxes/LESS.tmLanguage create mode 100755 bundles/less.tmbundle/info.plist create mode 100755 bundles/less.tmbundle/sample.less create mode 100755 bundles/less.tmbundle/sample.png diff --git a/bundles/less.tmbundle/Commands/Save to CSS.tmCommand b/bundles/less.tmbundle/Commands/Save to CSS.tmCommand new file mode 100755 index 000000000..aea5128d6 --- /dev/null +++ b/bundles/less.tmbundle/Commands/Save to CSS.tmCommand @@ -0,0 +1,24 @@ + + + + + beforeRunningCommand + saveActiveFile + command + #!/usr/bin/env ruby +file = STDIN.read[/lessc: ([^*]+\.less)/, 1] || ENV["TM_FILEPATH"] +system("lessc --verbose \"#{file}\"") + input + document + keyEquivalent + @s + name + Save to CSS + output + showAsTooltip + scope + source.css.less + uuid + 78788223-5E5E-434E-98BE-17BCDF600611 + + diff --git a/bundles/less.tmbundle/README.md b/bundles/less.tmbundle/README.md new file mode 100755 index 000000000..0b7bdc2f8 --- /dev/null +++ b/bundles/less.tmbundle/README.md @@ -0,0 +1,47 @@ +# LESS TextMate bundle + +Syntax highlighting for `.less` files. To learn more about [LESS][], see . + +This bundle was forked from `appden/less.tmbundle` but has since been rewritten from scratch (the language syntax). + +[`sample.less`](http://github.com/rsms/less.tmbundle/blob/master/sample.less): + + + +Rendered in the ["Hunch Dark dimmed" theme](http://github.com/rsms/workenv/blob/master/textmate/Hunch-Dark-dimmed.tmTheme) + +## Compiling to CSS (⌘B) + +Runs `lessc` on the current file, saving to the same file name with a .css extension (e.g. style.less => style.css). When there is `lessc: somefile.less` somewhere in the current file, that file is compiled instead. + +Compiling requires some version of `lessc` to be in your `PATH`. + +## Authors + +* Rasmus Andersson rsms@github +* Scott Kyle appden@github + +## License (MIT) + +Copyright (c) 2010 Scott Kyle and Rasmus Andersson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +[LESS]: http://lesscss.org diff --git a/bundles/less.tmbundle/Syntaxes/LESS.tmLanguage b/bundles/less.tmbundle/Syntaxes/LESS.tmLanguage new file mode 100755 index 000000000..593f1c3bf --- /dev/null +++ b/bundles/less.tmbundle/Syntaxes/LESS.tmLanguage @@ -0,0 +1,344 @@ + + + + + comment + LeSS + fileTypes + + less + + foldingStartMarker + /\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S)) + foldingStopMarker + (?<!\*)\*\*/|^\s*\} + keyEquivalent + ^~L + name + LESS + patterns + + + match + \b(a|abbr|acronym|address|area|b|base|big|blockquote|body|br|button|caption|cite|code|col|colgroup|dd|del|dfn|div|dl|dt|em|fieldset|figure|form|frame|frameset|(h[1-6])|head|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|meta|noframes|noscript|object|ol|optgroup|option|p|param|pre|q|samp|script|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|ul|var|header|section|footer|article|nav|aside|hgroup|time|mark)\b + name + keyword.control.html.elements + + + begin + " + end + " + name + string.quoted.double.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + begin + ' + end + ' + name + string.quoted.single.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + captures + + 1 + + name + entity.other.attribute-name.class.css + + + match + (\.[a-zA-Z0-9_-]+)[\s,{;] + + + begin + url\( + contentName + variable.parameter.url + end + \) + name + support.function.any-method.builtin.css + + + match + (#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b + name + constant.other.rgb-value.css + + + captures + + 0 + + name + entity.other.attribute-name.id + + + match + #[a-zA-Z0-9_-]+ + name + meta.selector.css + + + begin + /\* + end + \*/ + name + comment.block.css + + + match + (-|\+)?\s*[0-9]+(\.[0-9]+)? + name + constant.numeric.css + + + match + (?<=[\d])(px|pt|cm|mm|in|em|ex|pc)\b|% + name + keyword.unit.css + + + captures + + 1 + + name + punctuation.definition.entity.css + + + match + (:+)\b(after|before|first-child|first-letter|first-line|selection)\b + name + entity.other.attribute-name.pseudo-element.css + + + captures + + 1 + + name + punctuation.definition.entity.css + + + match + (:)\b(active|hover|link|visited|focus)\b + name + entity.other.attribute-name.pseudo-class.css + + + captures + + 1 + + name + punctuation.definition.entity.css + + 2 + + name + entity.other.attribute-name.attribute.css + + 3 + + name + punctuation.separator.operator.css + + 4 + + name + string.unquoted.attribute-value.css + + 5 + + name + string.quoted.double.attribute-value.css + + 6 + + name + punctuation.definition.string.begin.css + + 7 + + name + punctuation.definition.string.end.css + + + match + (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\]) + name + meta.attribute-selector.css + + + captures + + 1 + + name + keyword.control.at-rule.import.css + + 2 + + name + punctuation.definition.keyword.css + + + match + ^\s*((@)import\b) + name + meta.at-rule.import.css + + + captures + + 1 + + name + support.type.property-name.css.vendor + + + match + (-(?:webkit|moz|khtml|o|icab)-(?:background-size|border-radius|box-shadow|opacity|border-image))\s*: + + + captures + + 1 + + name + support.type.property-name.css + + + match + \b(azimuth|background-attachment|background-color|background-clip|background-image|background-position|background-repeat|background-size|background|behavior|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border-radius|border|box-shadow|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow(-[xy])?|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index)\s*: + + + match + \b(absolute|all-scroll|always|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|col-resize|collapse|crosshair|dashed|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|groove|hand|help|hidden|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|keep-all|left|lighter|line-edge|line-through|line|linear|list-item|loose|lower-alpha|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|padding-box)\b + name + support.constant.property-value.css + + + match + (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b) + name + support.constant.font-name.css + + + comment + http://www.w3.org/TR/CSS21/syndata.html#value-def-color + match + \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b + name + support.constant.color.w3c-standard-color-name.css + + + match + \b(saturate|desaturate|lighten|darken|grayscale)\b + name + support.function.any-method.builtin.less + + + match + \b(rgb|rgba|hsl|hsla|url)\b + name + support.function.any-method.builtin.css + + + captures + + 1 + + name + support.function.any-method.vendor.css + + + match + (-(?:webkit|moz|khtml|o|icab)-(?:gradient|linear-gradient)) + + + match + \b(color-stop|from|to)\b + name + support.function.any-method.webkit.gradient.css + + + captures + + 1 + + name + support.function.less + + + match + (\.[a-zA-Z0-9_-]+)\s*(;|\() + + + begin + // + end + $\n? + name + comment.line.double-slash.less + + + match + @[a-zA-Z0-9_-][\w-]* + name + variable.other.less + + + match + \$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\/\b + name + keyword.operator.less + + + match + \{|\} + name + meta.brace.curly.js + + + match + \(|\) + name + meta.brace.round.js + + + match + \[|\] + name + meta.brace.square.js + + + scopeName + source.css.less + uuid + 9343D324-75A1-4733-A5C0-5D1D4B6182D0 + + diff --git a/bundles/less.tmbundle/info.plist b/bundles/less.tmbundle/info.plist new file mode 100755 index 000000000..a99cd654d --- /dev/null +++ b/bundles/less.tmbundle/info.plist @@ -0,0 +1,15 @@ + + + + + name + LESS + uuid + D1D51EE5-E89F-4B14-8AE4-FC364E540B47 + ordering + + 78788223-5E5E-434E-98BE-17BCDF600611 + 9343D324-75A1-4733-A5C0-5D1D4B6182D0 + + + diff --git a/bundles/less.tmbundle/sample.less b/bundles/less.tmbundle/sample.less new file mode 100755 index 000000000..790d9aeb8 --- /dev/null +++ b/bundles/less.tmbundle/sample.less @@ -0,0 +1,44 @@ +// Importing +@import "_base.less" + +// Variables +@nice-blue: #5B83AD; +@light-blue: @nice-blue + #111; +#header { color: @light-blue; } + +// Mixins +.bordered(@color: #f04) { + border-top: dotted 1px @color; + border-bottom: solid 2px @color; +} +#menu a { + .bordered(#f00); color:#111; +} + +// Nested +#header { + h1 { font-size: 12px; } + .logo { + width: 300px; + :hover { text-decoration: none } + } +} + +// Operations +@base: 5%; +@filler: @base * 2; +@other: @base + @filler; +td { + background-color: @base-color + #111; + height: 100% / 2 + @filler; +} + +/* + Accessors +*/ +.comment { + width: #defaults[@width]; + color: .article['color']; +} + + diff --git a/bundles/less.tmbundle/sample.png b/bundles/less.tmbundle/sample.png new file mode 100755 index 0000000000000000000000000000000000000000..5c72a3c5a3f5718d6380c9b46d74aef6c0034eb3 GIT binary patch literal 74284 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ΞI->jW^AC>kQ_no+-6^69q5kHE-3KnE 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 Date: Wed, 19 Sep 2012 11:26:37 -0700 Subject: [PATCH 4/6] Add wrap guide extension Initially places a vertical line in each editor at 80 characters. --- spec/extensions/wrap-guide-spec.coffee | 36 +++++++++++++++++++++ src/extensions/wrap-guide/index.coffee | 1 + src/extensions/wrap-guide/wrap-guide.coffee | 28 ++++++++++++++++ static/wrap-guide.css | 8 +++++ 4 files changed, 73 insertions(+) create mode 100644 spec/extensions/wrap-guide-spec.coffee create mode 100644 src/extensions/wrap-guide/index.coffee create mode 100644 src/extensions/wrap-guide/wrap-guide.coffee create mode 100644 static/wrap-guide.css diff --git a/spec/extensions/wrap-guide-spec.coffee b/spec/extensions/wrap-guide-spec.coffee new file mode 100644 index 000000000..4b40d4bad --- /dev/null +++ b/spec/extensions/wrap-guide-spec.coffee @@ -0,0 +1,36 @@ +$ = require 'jquery' +RootView = require 'root-view' + +describe "WrapGuide", -> + [rootView, editor, wrapGuide] = [] + + beforeEach -> + rootView = new RootView(require.resolve('fixtures/sample.js')) + requireExtension('wrap-guide') + rootView.attachToDom() + editor = rootView.getActiveEditor() + wrapGuide = rootView.find('.wrap-guide').view() + + afterEach -> + rootView.deactivate() + + describe "@initialize", -> + it "appends a wrap guide to all existing and new editors", -> + expect(rootView.panes.find('.pane').length).toBe 1 + expect(rootView.panes.find('.lines > .wrap-guide').length).toBe 1 + editor.splitRight() + expect(rootView.find('.pane').length).toBe 2 + expect(rootView.panes.find('.lines > .wrap-guide').length).toBe 2 + + describe "@updateGuide", -> + it "positions the guide at 80 characters", -> + width = editor.charWidth * 80 + expect(width).toBeGreaterThan(0) + expect(wrapGuide.position().left).toBe(width) + + describe "font-size-change", -> + it "updates the wrap guide position", -> + initial = wrapGuide.position().left + expect(initial).toBeGreaterThan(0) + rootView.trigger('increase-font-size') + expect(wrapGuide.position().left).toBeGreaterThan(initial) diff --git a/src/extensions/wrap-guide/index.coffee b/src/extensions/wrap-guide/index.coffee new file mode 100644 index 000000000..57a87beb6 --- /dev/null +++ b/src/extensions/wrap-guide/index.coffee @@ -0,0 +1 @@ +module.exports = require 'wrap-guide/wrap-guide' diff --git a/src/extensions/wrap-guide/wrap-guide.coffee b/src/extensions/wrap-guide/wrap-guide.coffee new file mode 100644 index 000000000..a4136be94 --- /dev/null +++ b/src/extensions/wrap-guide/wrap-guide.coffee @@ -0,0 +1,28 @@ +{View} = require 'space-pen' + +module.exports = +class WrapGuide extends View + @activate: (rootView) -> + requireStylesheet 'wrap-guide.css' + + for editor in rootView.getEditors() + @appendToEditorPane(rootView, editor) if rootView.parents('html').length + + rootView.on 'editor-open', (e, editor) => + @appendToEditorPane(rootView, editor) + + @appendToEditorPane: (rootView, editor) -> + if lines = editor.pane()?.find('.lines') + lines.append(new WrapGuide(rootView, editor)) + + @content: -> + @div class: 'wrap-guide' + + initialize: (@rootView, @editor) => + @updateGuide(@editor) + @editor.on 'editor-path-change', => @updateGuide(@editor) + @rootView.on 'font-size-change', => @updateGuide(@editor) + + updateGuide: (editor) -> + width = editor.charWidth * 80 + @css("left", width + "px") diff --git a/static/wrap-guide.css b/static/wrap-guide.css new file mode 100644 index 000000000..74979de4c --- /dev/null +++ b/static/wrap-guide.css @@ -0,0 +1,8 @@ +.wrap-guide { + height: 100%; + width: 1px; + background: rgba(150, 150, 150, .33); + z-index: 100; + position: absolute; + top: 0px; +} \ No newline at end of file From b18627ab9b5b7879ca4165df3adb947e3e5aa276 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 19 Sep 2012 14:53:55 -0700 Subject: [PATCH 5/6] Add delete line support bound to meta-d key --- spec/app/edit-session-spec.coffee | 39 +++++++++++++++++++++++++++++++ src/app/buffer.coffee | 18 +++++++++----- src/app/edit-session.coffee | 3 +++ src/app/editor.coffee | 2 ++ src/app/keymaps/editor.coffee | 1 + src/app/selection.coffee | 11 +++++++++ 6 files changed, 68 insertions(+), 6 deletions(-) diff --git a/spec/app/edit-session-spec.coffee b/spec/app/edit-session-spec.coffee index 6b0c0dcc2..aaa5068ec 100644 --- a/spec/app/edit-session-spec.coffee +++ b/spec/app/edit-session-spec.coffee @@ -1461,3 +1461,42 @@ describe "EditSession", -> expect(editSession.clipBufferPosition([-1, -1])).toEqual [0,0] expect(editSession.clipBufferPosition([Infinity, Infinity])).toEqual [12,2] expect(editSession.clipBufferPosition([8, 57])).toEqual [8, 56] + + describe ".deleteLine()", -> + it "deletes the first line when the cursor is there", -> + editSession.getLastCursor().moveToTop() + line1 = buffer.lineForRow(1) + count = buffer.getLineCount() + expect(buffer.lineForRow(0)).not.toBe(line1) + editSession.deleteLine() + expect(buffer.lineForRow(0)).toBe(line1) + expect(buffer.getLineCount()).toBe(count - 1) + + it "deletes the last line when the cursor is there", -> + count = buffer.getLineCount() + secondToLastLine = buffer.lineForRow(count - 2) + expect(buffer.lineForRow(count - 1)).not.toBe(secondToLastLine) + editSession.getLastCursor().moveToBottom() + editSession.deleteLine() + newCount = buffer.getLineCount() + expect(buffer.lineForRow(newCount - 1)).toBe(secondToLastLine) + expect(newCount).toBe(count - 1) + + it "deletes whole lines when partial lines are selected", -> + editSession.setSelectedBufferRange([[0, 2], [1, 2]]) + line2 = buffer.lineForRow(2) + count = buffer.getLineCount() + expect(buffer.lineForRow(0)).not.toBe(line2) + expect(buffer.lineForRow(1)).not.toBe(line2) + editSession.deleteLine() + expect(buffer.lineForRow(0)).toBe(line2) + expect(buffer.getLineCount()).toBe(count - 2) + + it "only deletes first line if only newline is selected on second line", -> + editSession.setSelectedBufferRange([[0, 2], [1, 0]]) + line1 = buffer.lineForRow(1) + count = buffer.getLineCount() + expect(buffer.lineForRow(0)).not.toBe(line1) + editSession.deleteLine() + expect(buffer.lineForRow(0)).toBe(line1) + expect(buffer.getLineCount()).toBe(count - 1) diff --git a/src/app/buffer.coffee b/src/app/buffer.coffee index d86af99f3..0c345e64d 100644 --- a/src/app/buffer.coffee +++ b/src/app/buffer.coffee @@ -162,13 +162,19 @@ class Buffer new Point(row, index) deleteRow: (row) -> - range = null - if row == @getLastRow() - range = new Range([row - 1, @lineLengthForRow(row - 1)], [row, @lineLengthForRow(row)]) - else - range = new Range([row, 0], [row + 1, 0]) + @deleteRows(row, row) - @change(range, '') + deleteRows: (start, end) -> + startPoint = null + endPoint = null + if end == @getLastRow() + startPoint = [start - 1, @lineLengthForRow(start - 1)] + endPoint = [end, @lineLengthForRow(end)] + else + startPoint = [start, 0] + endPoint = [end + 1, 0] + + @change(new Range(startPoint, endPoint), '') insert: (point, text) -> @change(new Range(point, point), text) diff --git a/src/app/edit-session.coffee b/src/app/edit-session.coffee index 7b613d3f3..501f9de8b 100644 --- a/src/app/edit-session.coffee +++ b/src/app/edit-session.coffee @@ -167,6 +167,9 @@ class EditSession deleteToEndOfWord: -> @mutateSelectedText (selection) -> selection.deleteToEndOfWord() + deleteLine: -> + @mutateSelectedText (selection) -> selection.deleteLine() + indentSelectedRows: -> @mutateSelectedText (selection) -> selection.indentSelectedRows() diff --git a/src/app/editor.coffee b/src/app/editor.coffee index 10a02dbcb..c0d7cf3d8 100644 --- a/src/app/editor.coffee +++ b/src/app/editor.coffee @@ -111,6 +111,7 @@ class Editor extends View 'backspace-to-beginning-of-word': @backspaceToBeginningOfWord 'delete': @delete 'delete-to-end-of-word': @deleteToEndOfWord + 'delete-line': @deleteLine 'cut-to-end-of-line': @cutToEndOfLine 'cut': @cutSelection 'copy': @copySelection @@ -209,6 +210,7 @@ class Editor extends View backspaceToBeginningOfWord: -> @activeEditSession.backspaceToBeginningOfWord() delete: -> @activeEditSession.delete() deleteToEndOfWord: -> @activeEditSession.deleteToEndOfWord() + deleteLine: -> @activeEditSession.deleteLine() cutToEndOfLine: -> @activeEditSession.cutToEndOfLine() insertText: (text) -> @activeEditSession.insertText(text) insertNewline: -> @activeEditSession.insertNewline() diff --git a/src/app/keymaps/editor.coffee b/src/app/keymaps/editor.coffee index 5b2a819ff..16621eb1f 100644 --- a/src/app/keymaps/editor.coffee +++ b/src/app/keymaps/editor.coffee @@ -11,6 +11,7 @@ window.keymap.bindKeys '.editor', 'backspace': 'backspace' 'shift-backspace': 'backspace' 'delete': 'delete' + 'meta-d': 'delete-line' 'meta-x': 'cut' 'meta-c': 'copy' 'meta-v': 'paste' diff --git a/src/app/selection.coffee b/src/app/selection.coffee index 1e350d59b..7ba623db9 100644 --- a/src/app/selection.coffee +++ b/src/app/selection.coffee @@ -181,6 +181,17 @@ class Selection @editSession.buffer.delete(bufferRange) unless bufferRange.isEmpty() @cursor?.setBufferPosition(bufferRange.start) + deleteLine: -> + if @isEmpty() + @editSession.buffer.deleteRow(@cursor.getBufferPosition().row) + else + bufferRange = @getBufferRange() + start = bufferRange.start.row + end = bufferRange.end.row + if end isnt @editSession.buffer.getLastRow() and bufferRange.end.column is 0 + end-- + @editSession.buffer.deleteRows(start, end) + indentSelectedRows: -> range = @getBufferRange() for row in [range.start.row..range.end.row] From a269eb39d02d5a214895d91541763c781145114c Mon Sep 17 00:00:00 2001 From: Kevin Sawicki Date: Wed, 19 Sep 2012 15:41:21 -0700 Subject: [PATCH 6/6] Store column position as field --- spec/extensions/wrap-guide-spec.coffee | 4 ++-- src/extensions/wrap-guide/wrap-guide.coffee | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/extensions/wrap-guide-spec.coffee b/spec/extensions/wrap-guide-spec.coffee index 4b40d4bad..a8df87ec2 100644 --- a/spec/extensions/wrap-guide-spec.coffee +++ b/spec/extensions/wrap-guide-spec.coffee @@ -23,8 +23,8 @@ describe "WrapGuide", -> expect(rootView.panes.find('.lines > .wrap-guide').length).toBe 2 describe "@updateGuide", -> - it "positions the guide at 80 characters", -> - width = editor.charWidth * 80 + it "positions the guide at the configured column", -> + width = editor.charWidth * wrapGuide.column expect(width).toBeGreaterThan(0) expect(wrapGuide.position().left).toBe(width) diff --git a/src/extensions/wrap-guide/wrap-guide.coffee b/src/extensions/wrap-guide/wrap-guide.coffee index a4136be94..f373d2fb9 100644 --- a/src/extensions/wrap-guide/wrap-guide.coffee +++ b/src/extensions/wrap-guide/wrap-guide.coffee @@ -18,11 +18,13 @@ class WrapGuide extends View @content: -> @div class: 'wrap-guide' + column: 80 + initialize: (@rootView, @editor) => @updateGuide(@editor) @editor.on 'editor-path-change', => @updateGuide(@editor) @rootView.on 'font-size-change', => @updateGuide(@editor) updateGuide: (editor) -> - width = editor.charWidth * 80 + width = editor.charWidth * @column @css("left", width + "px")