diff --git a/lib/ace/css/editor.css b/lib/ace/css/editor.css index 0d596052..83c21130 100644 --- a/lib/ace/css/editor.css +++ b/lib/ace/css/editor.css @@ -151,6 +151,10 @@ opacity: 0.2; } +.ace_editor.multiselect .ace_cursor { + border-left-width: 1px; +} + .ace_line { white-space: nowrap; } diff --git a/lib/ace/editor.js b/lib/ace/editor.js index d7a5966e..0e1df71b 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -1163,11 +1163,12 @@ var Editor = function(renderer, session) { if (!ranges.length) return replaced; + this.$blockScrolling += 1; + var selection = this.getSelectionRange(); this.clearSelection(); this.selection.moveCursorTo(0, 0); - this.$blockScrolling += 1; for (var i = ranges.length - 1; i >= 0; --i) { if(this.$tryReplace(ranges[i], replacement)) { replaced++; diff --git a/lib/ace/layer/cursor.js b/lib/ace/layer/cursor.js index 36a085f3..1c55d7a8 100644 --- a/lib/ace/layer/cursor.js +++ b/lib/ace/layer/cursor.js @@ -107,11 +107,11 @@ var Cursor = function(parentEl) { if (!this.isVisible) return; - var element = this.element; + var element = this.cursors.length == 1 ? this.cursor : this.element; this.blinkId = setInterval(function() { element.style.visibility = "hidden"; setTimeout(function() { - element.style.visibility = "visible"; + element.style.visibility = ""; }, 400); }, 1000); }; @@ -141,7 +141,7 @@ var Cursor = function(parentEl) { this.update = function(config) { this.config = config; - if (this.session.selectionMarkerCount > 1) { + if (this.session.selectionMarkerCount > 0) { var selections = this.session.$selectionMarkers; var i = 0, sel, cursorIndex = 0; diff --git a/lib/ace/layer/marker.js b/lib/ace/layer/marker.js index ac361249..741a271d 100644 --- a/lib/ace/layer/marker.js +++ b/lib/ace/layer/marker.js @@ -99,7 +99,7 @@ var Marker = function(parentEl) { } else { this.drawSingleLineMarker( - html, range, marker.clazz, config, + html, range, marker.clazz + " start", config, null, marker.type ); } @@ -122,7 +122,7 @@ var Marker = function(parentEl) { row, range.start.column, row, this.session.getScreenLastRowColumn(row) ); - this.drawSingleLineMarker(stringBuilder, lineRange, clazz, layerConfig, 1, "text"); + this.drawSingleLineMarker(stringBuilder, lineRange, clazz + " start", layerConfig, 1, "text"); // selection end row = range.end.row; @@ -152,7 +152,7 @@ var Marker = function(parentEl) { ); stringBuilder.push( - "
+ * Javier Perez-Griffo + * James Tan * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -47,14 +49,20 @@ var ShHighlightRules = function() { var reservedKeywords = lang.arrayToMap( ('!|{|}|case|do|done|elif|else|'+ 'esac|fi|for|if|in|then|until|while|'+ - '&|;' + '&|;|export|local|read|typeset|unset|'+ + 'elif|select|set' ).split('|') ); var languageConstructs = lang.arrayToMap( - // TODO - ('echo|exit|eval|source|[|]|test|'+ - 'true|false|read' + ('[|]|alias|bg|bind|break|builtin|'+ + 'cd|command|compgen|complete|continue|'+ + 'dirs|disown|echo|enable|eval|exec|'+ + 'exit|fc|fg|getopts|hash|help|history|'+ + 'jobs|kill|let|logout|popd|printf|pushd|'+ + 'pwd|return|set|shift|shopt|source|'+ + 'suspend|test|times|trap|type|ulimit|'+ + 'umask|unalias|wait' ).split('|') ); diff --git a/lib/ace/mode/text_highlight_rules.js b/lib/ace/mode/text_highlight_rules.js index 862035d6..4af6cb20 100644 --- a/lib/ace/mode/text_highlight_rules.js +++ b/lib/ace/mode/text_highlight_rules.js @@ -65,8 +65,6 @@ var TextHighlightRules = function() { var rule = state[i]; if (rule.next) { rule.next = prefix + rule.next; - } else { - rule.next = prefix + key; } } this.$rules[prefix + key] = state; diff --git a/lib/ace/mouse/multi_select_handler.js b/lib/ace/mouse/multi_select_handler.js index fa5def23..24b25cd4 100644 --- a/lib/ace/mouse/multi_select_handler.js +++ b/lib/ace/mouse/multi_select_handler.js @@ -111,9 +111,10 @@ function onMouseDown(e) { if (!isMultiSelect && inSelection) return; // dragging - if (!isMultiSelect) - selection.addRange(selection.toOrientedRange()); - + if (!isMultiSelect) { + var range = selection.toOrientedRange(); + editor.addSelectionMarker(range); + } var oldRange = selection.rangeList.rangeAtPoint(pos); @@ -122,8 +123,13 @@ function onMouseDown(e) { if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor); - else + else { + if (range) { + editor.removeSelectionMarker(range); + selection.addRange(range); + } selection.addRange(tmpSel); + } }); } else if (!shift && alt && button == 0) { diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js index 716bc0fc..0b8850bc 100644 --- a/lib/ace/multi_select.js +++ b/lib/ace/multi_select.js @@ -76,18 +76,19 @@ var EditSession = require("./edit_session").EditSession; * * adds a range to selection entering multiselect mode if necessary **/ - this.addRange = function(range) { - if (!this.inMultiSelectMode && this.rangeCount == 0) { - var oldRange = this.toOrientedRange(); - if (!range || !range.isEqual(oldRange)) { - this.rangeList.add(oldRange); - this.$onAddRange(oldRange); - } - } - + this.addRange = function(range, $blockChangeEvents) { if (!range) return; + if (!this.inMultiSelectMode && this.rangeCount == 0) { + var oldRange = this.toOrientedRange(); + if (range.intersects(oldRange)) + return $blockChangeEvents || this.fromOrientedRange(range); + + this.rangeList.add(oldRange); + this.$onAddRange(oldRange); + } + if (!range.cursor) range.cursor = range.end; @@ -98,12 +99,14 @@ var EditSession = require("./edit_session").EditSession; if (removed.length) this.$onRemoveRange(removed); - if (this.rangeCount > 0 && !this.inMultiSelectMode) { + if (this.rangeCount > 1 && !this.inMultiSelectMode) { this._emit("multiSelect"); this.inMultiSelectMode = true; this.session.$undoSelect = false; this.rangeList.attach(this.session); } + + return $blockChangeEvents || this.fromOrientedRange(range); }; this.toSingleRange = function(range) { @@ -145,7 +148,6 @@ var EditSession = require("./edit_session").EditSession; this.$onAddRange = function(range) { this.rangeCount = this.rangeList.ranges.length; this.ranges.unshift(range); - this.fromOrientedRange(range); this._emit("addRange", {range: range}); }; @@ -309,17 +311,34 @@ var Editor = require("./editor").Editor; return orientedRange; }; + /** + * Editor.removeSelectionMarker(range) -> Void + * - range: selection range added with addSelectionMarker + * + * removes selection marker + **/ + this.removeSelectionMarker = function(range) { + if (!range.marker) + return; + this.session.removeMarker(range.marker); + var index = this.session.$selectionMarkers.indexOf(range); + if (index != -1) + this.session.$selectionMarkers.splice(index, 1); + this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + }; + this.removeSelectionMarkers = function(ranges) { + var markerList = this.session.$selectionMarkers; for (var i = ranges.length; i--; ) { var range = ranges[i]; if (!range.marker) continue; this.session.removeMarker(range.marker); - var index = this.session.$selectionMarkers.indexOf(range); + var index = markerList.indexOf(range); if (index != -1) - this.session.$selectionMarkers.splice(index, 1); + markerList.splice(index, 1); } - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; + this.session.selectionMarkerCount = markerList.length; }; this.$onAddRange = function(e) { @@ -442,6 +461,37 @@ var Editor = require("./editor").Editor; return text; }; + /** + * Editor.findAll(dir, options) -> Number + * - needle: text to find + * - options: search options + * - additive: keeps + * + * finds and selects all the occurencies of needle + * returns number of found ranges + **/ + this.findAll = function(needle, options, additive) { + options = options || {}; + options.needle = needle || options.needle; + this.$search.set(options); + + var ranges = this.$search.findAll(this.session); + if (!ranges.length) + return 0; + + this.$blockScrolling += 1; + var selection = this.multiSelect; + + if (!additive) + selection.toSingleRange(ranges[0]); + + for (var i = ranges.length; i--; ) + selection.addRange(ranges[i], true); + + this.$blockScrolling -= 1; + + return ranges.length; + }; // commands /** @@ -623,6 +673,33 @@ function MultiSelect(editor) { editor.on("mousedown", onMouseDown); editor.commands.addCommands(exports.commands.defaultCommands); + + addAltCursorListeners(editor); +} + +function addAltCursorListeners(editor){ + var el = editor.textInput.getElement(); + var altCursor = false; + var contentEl = editor.renderer.content; + el.addEventListener("keydown", function(e) { + if (e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey)) { + if (!altCursor) { + contentEl.style.cursor = "crosshair"; + altCursor = true; + } + } else if (altCursor) { + contentEl.style.cursor = ""; + } + }); + + el.addEventListener("keyup", reset); + el.addEventListener("blur", reset); + function reset() { + if (altCursor) { + contentEl.style.cursor = ""; + altCursor = false; + } + } } exports.MultiSelect = MultiSelect; diff --git a/lib/ace/multi_select_test.js b/lib/ace/multi_select_test.js index 571202f0..8e0a4013 100644 --- a/lib/ace/multi_select_test.js +++ b/lib/ace/multi_select_test.js @@ -57,7 +57,7 @@ var exec = function(name, times, args) { } while(times --> 1) }; var testRanges = function(str) { - assert.equal(editor.selection.getAllRanges()+"", str); + assert.equal(editor.selection.getAllRanges() + "", str + ""); } module.exports = { @@ -78,8 +78,8 @@ module.exports = { assert.ok(editor.inMultiSelectMode); assert.equal(editor.selection.getAllRanges().length, 4); - var newLine = editor.session.getDocument().getNewLineCharacter(); - var copyText = "wwww".split("").join(newLine); + var newLine = editor.session.getDocument().getNewLineCharacter(); + var copyText = "wwww".split("").join(newLine); assert.equal(editor.getCopyText(), copyText); exec("insertstring", 1, "a"); exec("backspace", 2); @@ -120,14 +120,11 @@ module.exports = { " wtt.w", " wtt.w" ]); - var editor = new Editor(new MockRenderer(), doc); + editor = new Editor(new MockRenderer(), doc); MultiSelect(editor); editor.selectMoreLines(1) - assert.equal( - editor.selection.getAllRanges()+"", - "Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]" - ); + testRanges("Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]"); assert.ok(editor.inMultiSelectMode); var doc2 = new EditSession(["w1"]); @@ -136,6 +133,34 @@ module.exports = { editor.setSession(doc); assert.ok(editor.inMultiSelectMode); + }, + + "test: multiselect addRange": function() { + var doc = new EditSession([ + "w1.w2", + " wtt.w", + " wtt.w" + ]); + editor = new Editor(new MockRenderer(), doc); + MultiSelect(editor); + var selection = editor.selection; + + var range1 = new Range(0, 2, 0, 4); + editor.selection.fromOrientedRange(range1); + + var range2 = new Range(0, 3, 0, 4); + selection.addRange(range2); + assert.ok(!editor.inMultiSelectMode); + assert.ok(range2.isEqual(editor.selection.getRange())); + + var range3 = new Range(0, 1, 0, 1); + selection.addRange(range3); + assert.ok(editor.inMultiSelectMode); + testRanges([range3, range2]); + + var range4 = new Range(0, 0, 4, 0); + selection.addRange(range4); + assert.ok(!editor.inMultiSelectMode); } }; diff --git a/lib/ace/range.js b/lib/ace/range.js index 163979fe..0947d9f4 100644 --- a/lib/ace/range.js +++ b/lib/ace/range.js @@ -117,7 +117,7 @@ var Range = function(startRow, startColumn, endRow, endColumn) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; } - this.intersectsRange = function(range) { + this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); } diff --git a/lib/ace/split.js b/lib/ace/split.js index 068d5269..fc5ae07d 100644 --- a/lib/ace/split.js +++ b/lib/ace/split.js @@ -56,7 +56,7 @@ var Split = function(container, theme, splits) { this.$splits = 0; this.$editorCSS = ""; this.$editors = []; - this.$oriantation = this.BESIDE; + this.$orientation = this.BESIDE; this.setSplits(splits || 1); this.$cEditor = this.$editors[0]; @@ -213,15 +213,15 @@ var Split = function(container, theme, splits) { return session; }; - this.getOriantation = function() { - return this.$oriantation; + this.getOrientation = function() { + return this.$orientation; }; - this.setOriantation = function(oriantation) { - if (this.$oriantation == oriantation) { + this.setOrientation = function(orientation) { + if (this.$orientation == orientation) { return; } - this.$oriantation = oriantation; + this.$orientation = orientation; this.resize(); }; @@ -230,7 +230,7 @@ var Split = function(container, theme, splits) { var height = this.$container.clientHeight; var editor; - if (this.$oriantation == this.BESIDE) { + if (this.$orientation == this.BESIDE) { var editorWidth = width / this.$splits; for (var i = 0; i < this.$splits; i++) { editor = this.$editors[i]; diff --git a/lib/ace/theme/clouds.js b/lib/ace/theme/clouds.js index 8d827f97..11a54d3d 100644 --- a/lib/ace/theme/clouds.js +++ b/lib/ace/theme/clouds.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-clouds .ace_cursor {\ - border-left: 1px solid #000000;\ + border-left: 2px solid #000000;\ }\ \ .ace-clouds .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #BDD5FC;\ }\ \ +.ace-clouds.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ .ace-clouds .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/clouds_midnight.js b/lib/ace/theme/clouds_midnight.js index be2673c7..094f95de 100644 --- a/lib/ace/theme/clouds_midnight.js +++ b/lib/ace/theme/clouds_midnight.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-clouds-midnight .ace_cursor {\ - border-left: 1px solid #7DA5DC;\ + border-left: 2px solid #7DA5DC;\ }\ \ .ace-clouds-midnight .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #000000;\ }\ \ +.ace-clouds-midnight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #191919;\ + border-radius: 2px;\ +}\ +\ .ace-clouds-midnight .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/cobalt.js b/lib/ace/theme/cobalt.js index b678a5cf..0b461b39 100644 --- a/lib/ace/theme/cobalt.js +++ b/lib/ace/theme/cobalt.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-cobalt .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-cobalt .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(179, 101, 57, 0.75);\ }\ \ +.ace-cobalt.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002240;\ + border-radius: 2px;\ +}\ +\ .ace-cobalt .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/dawn.js b/lib/ace/theme/dawn.js index 9fd4f22f..1974a94d 100644 --- a/lib/ace/theme/dawn.js +++ b/lib/ace/theme/dawn.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-dawn .ace_cursor {\ - border-left: 1px solid #000000;\ + border-left: 2px solid #000000;\ }\ \ .ace-dawn .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(39, 95, 255, 0.30);\ }\ \ +.ace-dawn.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #F9F9F9;\ + border-radius: 2px;\ +}\ +\ .ace-dawn .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/eclipse.js b/lib/ace/theme/eclipse.js index ed2376a0..8f0bc7c9 100644 --- a/lib/ace/theme/eclipse.js +++ b/lib/ace/theme/eclipse.js @@ -67,7 +67,7 @@ exports.cssText = ".ace-eclipse .ace_editor {\ }\ \ .ace-eclipse .ace_cursor {\ - border-left: 1px solid black;\ + border-left: 2px solid black;\ }\ \ .ace-eclipse .ace_line .ace_storage,\ diff --git a/lib/ace/theme/idle_fingers.js b/lib/ace/theme/idle_fingers.js index b1acacb7..9da3d396 100644 --- a/lib/ace/theme/idle_fingers.js +++ b/lib/ace/theme/idle_fingers.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-idle-fingers .ace_cursor {\ - border-left: 1px solid #91FF00;\ + border-left: 2px solid #91FF00;\ }\ \ .ace-idle-fingers .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(90, 100, 126, 0.88);\ }\ \ +.ace-idle-fingers.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #323232;\ + border-radius: 2px;\ +}\ +\ .ace-idle-fingers .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/kr_theme.js b/lib/ace/theme/kr_theme.js index bcd31b67..413d55d2 100644 --- a/lib/ace/theme/kr_theme.js +++ b/lib/ace/theme/kr_theme.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-kr-theme .ace_cursor {\ - border-left: 1px solid #FF9900;\ + border-left: 2px solid #FF9900;\ }\ \ .ace-kr-theme .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(170, 0, 255, 0.45);\ }\ \ +.ace-kr-theme.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0B0A09;\ + border-radius: 2px;\ +}\ +\ .ace-kr-theme .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/merbivore.js b/lib/ace/theme/merbivore.js index 59a78d6d..95927960 100644 --- a/lib/ace/theme/merbivore.js +++ b/lib/ace/theme/merbivore.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-merbivore .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-merbivore .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #454545;\ }\ \ +.ace-merbivore.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #161616;\ + border-radius: 2px;\ +}\ +\ .ace-merbivore .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/merbivore_soft.js b/lib/ace/theme/merbivore_soft.js index 1ffedc14..107d6df6 100644 --- a/lib/ace/theme/merbivore_soft.js +++ b/lib/ace/theme/merbivore_soft.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-merbivore-soft .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-merbivore-soft .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #494949;\ }\ \ +.ace-merbivore-soft.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1C1C1C;\ + border-radius: 2px;\ +}\ +\ .ace-merbivore-soft .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/mono_industrial.js b/lib/ace/theme/mono_industrial.js index 85c7313a..fdf47fa2 100644 --- a/lib/ace/theme/mono_industrial.js +++ b/lib/ace/theme/mono_industrial.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-mono-industrial .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-mono-industrial .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(145, 153, 148, 0.40);\ }\ \ +.ace-mono-industrial.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #222C28;\ + border-radius: 2px;\ +}\ +\ .ace-mono-industrial .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/monokai.js b/lib/ace/theme/monokai.js index 98782855..ba5fca86 100644 --- a/lib/ace/theme/monokai.js +++ b/lib/ace/theme/monokai.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-monokai .ace_cursor {\ - border-left: 1px solid #F8F8F0;\ + border-left: 2px solid #F8F8F0;\ }\ \ .ace-monokai .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #49483E;\ }\ \ +.ace-monokai.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #272822;\ + border-radius: 2px;\ +}\ +\ .ace-monokai .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/pastel_on_dark.js b/lib/ace/theme/pastel_on_dark.js index 3a95a36f..3399e7ce 100644 --- a/lib/ace/theme/pastel_on_dark.js +++ b/lib/ace/theme/pastel_on_dark.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-pastel-on-dark .ace_cursor {\ - border-left: 1px solid #A7A7A7;\ + border-left: 2px solid #A7A7A7;\ }\ \ .ace-pastel-on-dark .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(221, 240, 255, 0.20);\ }\ \ +.ace-pastel-on-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2C2828;\ + border-radius: 2px;\ +}\ +\ .ace-pastel-on-dark .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/solarized_dark.js b/lib/ace/theme/solarized_dark.js index 159f17bd..35ff5ae9 100644 --- a/lib/ace/theme/solarized_dark.js +++ b/lib/ace/theme/solarized_dark.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-solarized-dark .ace_cursor {\ - border-left: 1px solid #D30102;\ + border-left: 2px solid #D30102;\ }\ \ .ace-solarized-dark .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #073642;\ }\ \ +.ace-solarized-dark.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002B36;\ + border-radius: 2px;\ +}\ +\ .ace-solarized-dark .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/solarized_light.js b/lib/ace/theme/solarized_light.js index dc635f59..1327ce64 100644 --- a/lib/ace/theme/solarized_light.js +++ b/lib/ace/theme/solarized_light.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-solarized-light .ace_cursor {\ - border-left: 1px solid #000000;\ + border-left: 2px solid #000000;\ }\ \ .ace-solarized-light .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #073642;\ }\ \ +.ace-solarized-light.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FDF6E3;\ + border-radius: 2px;\ +}\ +\ .ace-solarized-light .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/textmate.js b/lib/ace/theme/textmate.js index 71885186..76eb0673 100644 --- a/lib/ace/theme/textmate.js +++ b/lib/ace/theme/textmate.js @@ -67,7 +67,7 @@ exports.cssText = ".ace-tm .ace_editor {\ }\ \ .ace-tm .ace_cursor {\ - border-left: 1px solid black;\ + border-left: 2px solid black;\ }\ \ .ace-tm .ace_cursor.ace_overwrite {\ @@ -169,7 +169,10 @@ exports.cssText = ".ace-tm .ace_editor {\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ -\ +.ace-tm.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px white;\ + border-radius: 2px;\ +}\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ diff --git a/lib/ace/theme/tomorrow.js b/lib/ace/theme/tomorrow.js index 3447769a..14e19d77 100644 --- a/lib/ace/theme/tomorrow.js +++ b/lib/ace/theme/tomorrow.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-tomorrow .ace_cursor {\ - border-left: 1px solid #AEAFAD;\ + border-left: 2px solid #AEAFAD;\ }\ \ .ace-tomorrow .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #D6D6D6;\ }\ \ +.ace-tomorrow.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #FFFFFF;\ + border-radius: 2px;\ +}\ +\ .ace-tomorrow .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/tomorrow_night.js b/lib/ace/theme/tomorrow_night.js index 141912de..621c6bb8 100644 --- a/lib/ace/theme/tomorrow_night.js +++ b/lib/ace/theme/tomorrow_night.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-tomorrow-night .ace_cursor {\ - border-left: 1px solid #AEAFAD;\ + border-left: 2px solid #AEAFAD;\ }\ \ .ace-tomorrow-night .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #373B41;\ }\ \ +.ace-tomorrow-night.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #1D1F21;\ + border-radius: 2px;\ +}\ +\ .ace-tomorrow-night .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/tomorrow_night_blue.js b/lib/ace/theme/tomorrow_night_blue.js index eae9284d..72ffb2bc 100644 --- a/lib/ace/theme/tomorrow_night_blue.js +++ b/lib/ace/theme/tomorrow_night_blue.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-tomorrow-night-blue .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-tomorrow-night-blue .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #003F8E;\ }\ \ +.ace-tomorrow-night-blue.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #002451;\ + border-radius: 2px;\ +}\ +\ .ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/tomorrow_night_bright.js b/lib/ace/theme/tomorrow_night_bright.js index a03817d8..6d5f2c2f 100644 --- a/lib/ace/theme/tomorrow_night_bright.js +++ b/lib/ace/theme/tomorrow_night_bright.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-tomorrow-night-bright .ace_cursor {\ - border-left: 1px solid #9F9F9F;\ + border-left: 2px solid #9F9F9F;\ }\ \ .ace-tomorrow-night-bright .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #424242;\ }\ \ +.ace-tomorrow-night-bright.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #000000;\ + border-radius: 2px;\ +}\ +\ .ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/tomorrow_night_eighties.js b/lib/ace/theme/tomorrow_night_eighties.js index 09ad2839..f6a67d4e 100644 --- a/lib/ace/theme/tomorrow_night_eighties.js +++ b/lib/ace/theme/tomorrow_night_eighties.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-tomorrow-night-eighties .ace_cursor {\ - border-left: 1px solid #CCCCCC;\ + border-left: 2px solid #CCCCCC;\ }\ \ .ace-tomorrow-night-eighties .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #515151;\ }\ \ +.ace-tomorrow-night-eighties.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #2D2D2D;\ + border-radius: 2px;\ +}\ +\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/twilight.js b/lib/ace/theme/twilight.js index 633ab66c..842dd234 100644 --- a/lib/ace/theme/twilight.js +++ b/lib/ace/theme/twilight.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-twilight .ace_cursor {\ - border-left: 1px solid #A7A7A7;\ + border-left: 2px solid #A7A7A7;\ }\ \ .ace-twilight .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: rgba(221, 240, 255, 0.20);\ }\ \ +.ace-twilight.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #141414;\ + border-radius: 2px;\ +}\ +\ .ace-twilight .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/theme/vibrant_ink.js b/lib/ace/theme/vibrant_ink.js index 4d497b03..fac89c15 100644 --- a/lib/ace/theme/vibrant_ink.js +++ b/lib/ace/theme/vibrant_ink.js @@ -68,7 +68,7 @@ exports.cssText = "\ }\ \ .ace-vibrant-ink .ace_cursor {\ - border-left: 1px solid #FFFFFF;\ + border-left: 2px solid #FFFFFF;\ }\ \ .ace-vibrant-ink .ace_cursor.ace_overwrite {\ @@ -80,6 +80,11 @@ exports.cssText = "\ background: #6699CC;\ }\ \ +.ace-vibrant-ink.multiselect .ace_selection.start {\ + box-shadow: 0 0 3px 0px #0F0F0F;\ + border-radius: 2px;\ +}\ +\ .ace-vibrant-ink .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ diff --git a/lib/ace/tokenizer.js b/lib/ace/tokenizer.js index 674e30ed..f24d2191 100644 --- a/lib/ace/tokenizer.js +++ b/lib/ace/tokenizer.js @@ -119,9 +119,8 @@ var Tokenizer = function(rules, flag) { else type = rule.token; - var next = rule.next; - if (next && next !== currentState) { - currentState = next; + if (rule.next) { + currentState = rule.next; state = this.rules[currentState]; mapping = this.matchMappings[currentState]; lastIndex = re.lastIndex; diff --git a/tool/Theme.tmpl.css b/tool/Theme.tmpl.css index 308f63ff..1d6aca07 100644 --- a/tool/Theme.tmpl.css +++ b/tool/Theme.tmpl.css @@ -27,7 +27,7 @@ } .%cssClass% .ace_cursor { - border-left: 1px solid %cursor%; + border-left: 2px solid %cursor%; } .%cssClass% .ace_cursor.ace_overwrite { @@ -39,6 +39,11 @@ background: %selection%; } +.%cssClass%.multiselect .ace_selection.start { + box-shadow: 0 0 3px 0px %background%; + border-radius: 2px; +} + .%cssClass% .ace_marker-layer .ace_step { background: %step%; }