From b61ae38c14919e601426b130d308ed449d57f9a7 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 14 Mar 2013 16:54:07 +0400 Subject: [PATCH 1/4] add missing options --- lib/ace/edit_session.js | 14 ++++++++++---- lib/ace/editor.js | 3 +++ lib/ace/mouse/mouse_handler.js | 2 +- lib/ace/virtual_renderer.js | 19 +++++++++++-------- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index 0d4efec8..d2d02a62 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -491,10 +491,7 @@ var EditSession = function(text, mode) { * **/ this.setOverwrite = function(overwrite) { - if (this.$overwrite == overwrite) return; - - this.$overwrite = overwrite; - this._emit("changeOverwrite"); + this.setOption("overwrite", overwrite) }; /** @@ -2437,6 +2434,15 @@ config.defineOptions(EditSession.prototype, "session", { }, initialValue: 4, handlesSet: true + }, + overwrite: { + set: function(val) {this._emit("changeOverwrite");}, + initialValue: false + }, + newLineMode: { + set: function(val) {this.doc.setNewLineMode(val)}, + get: function() {return this.doc.getNewLineMode(newLineMode)}, + handlesSet: true } }); diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 5a7e4022..3810363a 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -2219,6 +2219,7 @@ config.defineOptions(Editor.prototype, "editor", { behavioursEnabled: {initialValue: true}, wrapBehavioursEnabled: {initialValue: true}, + hScrollBarAlwaysVisible: "renderer", highlightGutterLine: "renderer", animatedScroll: "renderer", showInvisibles: "renderer", @@ -2234,6 +2235,8 @@ config.defineOptions(Editor.prototype, "editor", { focusTimout: "$mouseHandler", firstLineNumber: "session", + overwrite: "session", + newLineMode: "session", useWorker: "session", useSoftTabs: "session", tabSize: "session", diff --git a/lib/ace/mouse/mouse_handler.js b/lib/ace/mouse/mouse_handler.js index f8804519..74fc4872 100644 --- a/lib/ace/mouse/mouse_handler.js +++ b/lib/ace/mouse/mouse_handler.js @@ -137,7 +137,7 @@ var MouseHandler = function(editor) { }).call(MouseHandler.prototype); config.defineOptions(MouseHandler.prototype, "mouseHandler", { - scrollSpeed: {initialValue: 1}, + scrollSpeed: {initialValue: 2}, dragDelay: {initialValue: 150}, focusTimout: {initialValue: 0} }); diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 0de955cb..8bc071d2 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -102,7 +102,6 @@ var VirtualRenderer = function(container, theme) { // Indicates whether the horizontal scrollbar is visible this.$horizScroll = false; - this.$horizScrollAlwaysVisible = false; this.scrollBar = new ScrollBar(this.container); this.scrollBar.addEventListener("scroll", function(e) { @@ -615,7 +614,7 @@ var VirtualRenderer = function(container, theme) { * @returns {Boolean} **/ this.getHScrollBarAlwaysVisible = function() { - return this.$horizScrollAlwaysVisible; + return this.$hScrollBarAlwaysVisible; }; /** @@ -625,11 +624,7 @@ var VirtualRenderer = function(container, theme) { * **/ this.setHScrollBarAlwaysVisible = function(alwaysVisible) { - if (this.$horizScrollAlwaysVisible != alwaysVisible) { - this.$horizScrollAlwaysVisible = alwaysVisible; - if (!this.$horizScrollAlwaysVisible || !this.$horizScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - } + this.setOption("hScrollBarAlwaysVisible", alwaysVisible); }; this.$updateScrollBar = function() { @@ -744,7 +739,7 @@ var VirtualRenderer = function(container, theme) { var longestLine = this.$getLongestLine(); - var horizScroll = this.$horizScrollAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; + var horizScroll = this.$hScrollBarAlwaysVisible || this.$size.scrollerWidth - longestLine < 0; var horizScrollChanged = this.$horizScroll !== horizScroll; this.$horizScroll = horizScroll; if (horizScrollChanged) { @@ -1398,6 +1393,14 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { }, initialValue: false, value: true + }, + hScrollBarAlwaysVisible: { + set: function(alwaysVisible) { + this.$hScrollBarAlwaysVisible = alwaysVisible; + if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) + this.$loop.schedule(this.CHANGE_SCROLL); + }, + initialValue: false } }); From 2adb8000f51c7473cd2be32024022e4bcac1e784 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 14 Mar 2013 16:58:26 +0400 Subject: [PATCH 2/4] fold on click instead of mousedown prevents button flickering on chrome --- lib/ace/mouse/fold_handler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/mouse/fold_handler.js b/lib/ace/mouse/fold_handler.js index 3141b26a..d47f6d53 100644 --- a/lib/ace/mouse/fold_handler.js +++ b/lib/ace/mouse/fold_handler.js @@ -49,7 +49,7 @@ function FoldHandler(editor) { } }); - editor.on("guttermousedown", function(e) { + editor.on("gutterclick", function(e) { var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); if (gutterRegion == "foldWidgets") { From b0338c15b4c59324b485738c5026a56afe694a43 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 14 Mar 2013 17:30:19 +0400 Subject: [PATCH 3/4] do not highlight dots without arrows in logicql --- lib/ace/mode/logiql.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ace/mode/logiql.js b/lib/ace/mode/logiql.js index de53bac3..24bcd7d6 100644 --- a/lib/ace/mode/logiql.js +++ b/lib/ace/mode/logiql.js @@ -109,7 +109,7 @@ oop.inherits(Mode, TextMode); if (tok.type == KW_START || tok.type == KW_END) break; } - if (!tok) + if (!tok || tok.type == startToken.type) return; var col = it.getCurrentTokenColumn(); From 82f496a11f0ad51aff9aa1d74da10cd960452425 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 14 Mar 2013 18:07:46 +0400 Subject: [PATCH 4/4] add wrap: printMargin --- lib/ace/edit_session.js | 20 ++++++++++++-------- lib/ace/editor.js | 8 ++++---- lib/ace/virtual_renderer.js | 31 ++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 13 deletions(-) diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js index d2d02a62..697d0508 100644 --- a/lib/ace/edit_session.js +++ b/lib/ace/edit_session.js @@ -1570,9 +1570,12 @@ var EditSession = function(text, mode) { * * @private **/ - this.adjustWrapLimit = function(desiredLimit) { - var wrapLimit = this.$constrainWrapLimit(desiredLimit); - if (wrapLimit != this.$wrapLimit && wrapLimit > 0) { + this.adjustWrapLimit = function(desiredLimit, $printMargin) { + var limits = this.$wrapLimitRange + if (limits.max < 0) + limits = {min: $printMargin, max: $printMargin}; + var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); + if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { this.$wrapLimit = wrapLimit; this.$modified = true; if (this.$useWrapMode) { @@ -1585,17 +1588,14 @@ var EditSession = function(text, mode) { return false; }; - this.$constrainWrapLimit = function(wrapLimit) { - var min = this.$wrapLimitRange.min; + this.$constrainWrapLimit = function(wrapLimit, min, max) { if (min) wrapLimit = Math.max(min, wrapLimit); - var max = this.$wrapLimitRange.max; if (max) wrapLimit = Math.min(max, wrapLimit); - // What would a limit of 0 even mean? - return Math.max(1, wrapLimit); + return wrapLimit; }; /** @@ -2391,9 +2391,13 @@ config.defineOptions(EditSession.prototype, "session", { value = false; else if (value == "free") value = true; + else if (value == "printMargin") + value = -1; else if (typeof value == "string") value = parseInt(value, 10) || false; + if (this.$wrap == value) + return; if (!value) { this.setUseWrapMode(false); } else { diff --git a/lib/ace/editor.js b/lib/ace/editor.js index 3810363a..d793bf79 100644 --- a/lib/ace/editor.js +++ b/lib/ace/editor.js @@ -344,10 +344,7 @@ var Editor = function(renderer, session) { * **/ this.setFontSize = function(size) { - if (typeof size == "number") - size = size + "px"; - this.container.style.fontSize = size; - this.renderer.updateFontSize(); + this.setOption("fontSize", size); }; this.$highlightBrackets = function() { @@ -2225,10 +2222,13 @@ config.defineOptions(Editor.prototype, "editor", { showInvisibles: "renderer", showPrintMargin: "renderer", printMarginColumn: "renderer", + printMargin: "renderer", fadeFoldWidgets: "renderer", showFoldWidgets: "renderer", showGutter: "renderer", displayIndentGuides: "renderer", + fontSize: "renderer", + fontFamily: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", diff --git a/lib/ace/virtual_renderer.js b/lib/ace/virtual_renderer.js index 8bc071d2..a8e64542 100644 --- a/lib/ace/virtual_renderer.js +++ b/lib/ace/virtual_renderer.js @@ -354,7 +354,7 @@ var VirtualRenderer = function(container, theme) { this.adjustWrapLimit = function() { var availableWidth = this.$size.scrollerWidth - this.$padding * 2; var limit = Math.floor(availableWidth / this.characterWidth); - return this.session.adjustWrapLimit(limit); + return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); }; /** @@ -493,6 +493,9 @@ var VirtualRenderer = function(container, theme) { var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; + + if (this.session && this.session.$wrap == -1) + this.adjustWrapLimit(); }; /** @@ -1353,6 +1356,17 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { set: function() { this.$updatePrintMargin(); }, initialValue: 80 }, + printMargin: { + set: function(val) { + if (typeof val == "number") + this.$printMarginColumn = val; + this.$showPrintMargin = !!val; + this.$updatePrintMargin(); + }, + get: function() { + return this.$showPrintMargin && this.$printMarginColumn; + } + }, showGutter: { set: function(show){ this.$gutter.style.display = show ? "block" : "none"; @@ -1401,6 +1415,21 @@ config.defineOptions(VirtualRenderer.prototype, "renderer", { this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false + }, + fontSize: { + set: function(size) { + if (typeof size == "number") + size = size + "px"; + this.container.style.fontSize = size; + this.updateFontSize(); + }, + initialValue: 12 + }, + fontFamily: { + set: function(name) { + this.container.style.fontFamily = name; + this.updateFontSize(); + } } });