From 117ece00ef9aaa7168bce1b5cd5de5aca5ec7502 Mon Sep 17 00:00:00 2001 From: nightwing Date: Thu, 4 Aug 2016 03:28:06 +0400 Subject: [PATCH 1/4] add showLineNumbers option --- package.json | 2 +- plugins/c9.ide.ace/ace.js | 100 +++++++++++++++++++++++++++++++------- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index d08b1392..ced15b4c 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,7 @@ "c9.ide.language.javascript.infer": "#b9c2e4bdb8", "c9.ide.language.jsonalyzer": "#a0549e14ff", "c9.ide.language.codeintel": "#4e0a272229", - "c9.ide.collab": "#d149eae786", + "c9.ide.collab": "#39fc27d13f", "c9.ide.local": "#9169fec157", "c9.ide.find": "#e632ecf4be", "c9.ide.find.infiles": "#ad9ff74638", diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index 98172b82..f68ee410 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -241,32 +241,33 @@ define(function(require, exports, module) { ["newLineMode", "unix", STRING, "newlinemode", 1], // Per document ["tabSize", "4", NUMBER, "tabsize", 1], - ["useSoftTabs", "true", BOOL, "softtabs", 1], - ["guessTabSize", "true", BOOL, "guesstabsize", 1], - ["useWrapMode", "false", BOOL, "wrapmode"], - ["wrapToView", "true", BOOL, "wrapmodeViewport"], + ["useSoftTabs", true, BOOL, "softtabs", 1], + ["guessTabSize", true, BOOL, "guesstabsize", 1], + ["useWrapMode", false, BOOL, "wrapmode"], + ["wrapToView", true, BOOL, "wrapmodeViewport"], // Ace ["fontSize", "12", NUMBER, "fontsize"], ["fontFamily", font, STRING, "fontfamily"], - ["antialiasedfonts", "false", BOOL], - ["overwrite", "false", BOOL, "overwrite"], + ["antialiasedfonts", false, BOOL], + ["overwrite", false, BOOL, "overwrite"], ["selectionStyle", "line", STRING, "selectstyle"], ["cursorStyle", "ace", STRING, "cursorstyle"], - ["highlightActiveLine", "true", BOOL, "activeline"], - ["highlightGutterLine", "true", BOOL, "gutterline"], - ["showInvisibles", "false", BOOL, "showinvisibles"], - ["showPrintMargin", "true", BOOL, "showprintmargin"], - ["displayIndentGuides", "true", BOOL, "showindentguides"], + ["highlightActiveLine", true, BOOL, "activeline"], + ["highlightGutterLine", true, BOOL, "gutterline"], + ["showInvisibles", false, BOOL, "showinvisibles"], + ["showPrintMargin", true, BOOL, "showprintmargin"], + ["displayIndentGuides", true, BOOL, "showindentguides"], ["printMarginColumn", "80", NUMBER, "printmargincolumn"], - ["behavioursEnabled", "true", BOOL, "behaviors"], - ["wrapBehavioursEnabled", "false", BOOL, "wrapbehaviors"], + ["behavioursEnabled", true, BOOL, "behaviors"], + ["wrapBehavioursEnabled", false, BOOL, "wrapbehaviors"], ["scrollSpeed", "2", NUMBER, "scrollspeed"], - ["showGutter", "true", BOOL, "gutter"], - ["showFoldWidgets", "true", BOOL, "folding"], - ["fadeFoldWidgets", "true", BOOL, "fadefoldwidgets"], - ["highlightSelectedWord", "true", BOOL, "highlightselectedword"], - ["animatedScroll", "true", BOOL, "animatedscroll"], + ["showGutter", true, BOOL, "gutter"], + ["showLineNumbers", true, STRING], + ["showFoldWidgets", true, BOOL, "folding"], + ["fadeFoldWidgets", true, BOOL, "fadefoldwidgets"], + ["highlightSelectedWord", true, BOOL, "highlightselectedword"], + ["animatedScroll", true, BOOL, "animatedscroll"], ["scrollPastEnd", "0.5", NUMBER], ["mergeUndoDeltas", "off", STRING], ["theme", defaultThemes[skin], STRING, "theme"] @@ -825,6 +826,17 @@ define(function(require, exports, module) { position: 6000, path: "user/ace/@showGutter" }, + "Show Line Numbers" : { + type: "dropdown", + width: 150, + path: "user/ace/@showLineNumbers", + items: [ + { caption : "Normal", value : true }, + { caption : "Relative", value : "relative" }, + { caption : "None", value : false } + ], + position: 6250 + }, "Show Indent Guides" : { type: "checkbox", position: 6500, @@ -1531,6 +1543,41 @@ define(function(require, exports, module) { return s; } + /***** Gutter Renderers *****/ + + var relativeNumbers = { + getText: function(session, row) { + return (Math.abs(session.selection.lead.row - row) || (row + 1 + (row < 9 ? "\xb7" : ""))) + ""; + }, + getWidth: function(session, lastLineNumber, config) { + return session.getLength().toString().length * config.characterWidth; + }, + update: function(e, editor) { + editor.renderer.$loop.schedule(editor.renderer.CHANGE_GUTTER); + }, + attach: function(editor) { + editor.renderer.$gutterLayer.$renderer = this; + editor.on("changeSelection", this.update); + }, + detach: function(editor) { + editor.renderer.$gutterLayer.$renderer = null; + editor.off("changeSelection", this.update); + } + }; + + var noNumbers = { + getText: function(session, row) { + return ""; + }, + getWidth: function(session, lastLineNumber, config) { + return ""; + }, + attach: function(editor) { + }, + detach: function(editor) { + }, + }; + /** * The ace handle, responsible for events that involve all ace * instances. This is the object you get when you request the ace @@ -2148,6 +2195,23 @@ define(function(require, exports, module) { if (session) session.$guessTabSize = false; break; + case "showLineNumbers": + var renderer = ace.renderer; + var gutterRenderer = renderer.$gutterLayer.$renderer; + if (gutterRenderer && gutterRenderer.detach) + gutterRenderer.detach(ace); + if (value == "relative") + gutterRenderer = relativeNumbers; + else if (value) + gutterRenderer = null; + else + gutterRenderer = noNumbers; + + renderer.$gutterLayer.$renderer = gutterRenderer; + if (gutterRenderer && gutterRenderer.attach) + gutterRenderer.attach(ace); + renderer.$loop.schedule(renderer.CHANGE_GUTTER); + return; } if (session && docLut[name]) // this can be called for session different than current ace session From ac5b4d490fafe13359697090df7bd7255edad58c Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 9 Aug 2016 20:03:13 +0400 Subject: [PATCH 2/4] add gutter options to the context menu --- plugins/c9.ide.ace/ace.js | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index f68ee410..967538f8 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -590,7 +590,32 @@ define(function(require, exports, module) { ] }, handle); - mnuGutter = new Menu({ id: "menuGutter" }, handle); + mnuGutter = new Menu({ + id: "menuGutter", + items: [ + new Divider({ position: 1000 }, handle), + new MenuItem({ + position: 1000, + caption: "Gutter Options", + submenu: new Menu({ + items: [ + new MenuItem({ + position: 10, + caption: "Show Line Number", + type: "check", + checked: "user/ace/@showLineNumbers" + }, handle), + new MenuItem({ + position: 10, + caption: "Show Fold Widgets", + type: "check", + checked: "user/ace/@showFoldWidgets" + }, handle), + ] + }) + }, handle), + ] + }, handle); mnuGutter.on("show", function(e) { var ace = tabs.focussedTab.editor.ace; var region = ace.renderer.$gutterLayer.getRegion(e); From 1f3d3af3e21cec2eaacf922b64539da677c48b1a Mon Sep 17 00:00:00 2001 From: nightwing Date: Tue, 9 Aug 2016 20:04:06 +0400 Subject: [PATCH 3/4] handle tab renames in language worker --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ced15b4c..c887a54d 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "c9" ], "c9plugins": { - "c9.ide.language": "#0426ee345b", + "c9.ide.language": "#f55c832376", "c9.ide.language.core": "#bfb5dd2acc", "c9.ide.language.css": "#46ad561506", "c9.ide.language.generic": "#b47cbe58f9", From 1a999f47694f387a4f1d72196c972ceb4bdb467b Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 10 Aug 2016 14:33:29 +0400 Subject: [PATCH 4/4] remove extra padding when line numbers are hidden --- plugins/c9.ide.ace/ace.js | 4 ++-- plugins/c9.ide.ace/style.less | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/plugins/c9.ide.ace/ace.js b/plugins/c9.ide.ace/ace.js index 967538f8..3f896011 100644 --- a/plugins/c9.ide.ace/ace.js +++ b/plugins/c9.ide.ace/ace.js @@ -601,7 +601,7 @@ define(function(require, exports, module) { items: [ new MenuItem({ position: 10, - caption: "Show Line Number", + caption: "Show Line Numbers", type: "check", checked: "user/ace/@showLineNumbers" }, handle), @@ -2231,7 +2231,7 @@ define(function(require, exports, module) { gutterRenderer = null; else gutterRenderer = noNumbers; - + dom.setCssClass(renderer.$gutter, "ace_gutter-compact", !value); renderer.$gutterLayer.$renderer = gutterRenderer; if (gutterRenderer && gutterRenderer.attach) gutterRenderer.attach(ace); diff --git a/plugins/c9.ide.ace/style.less b/plugins/c9.ide.ace/style.less index 8d263c67..bd5e1d3c 100644 --- a/plugins/c9.ide.ace/style.less +++ b/plugins/c9.ide.ace/style.less @@ -26,6 +26,15 @@ z-index : -1; } +.ace_gutter-compact:not(.ace_folding-enabled) > .ace_gutter-layer > .ace_gutter-cell { + padding-left: 15px!important; + padding-right: 5px!important; +} +.ace_gutter-compact.ace_folding-enabled > .ace_gutter-layer > .ace_gutter-cell { + padding-left: 16px!important; + padding-right: 12px!important; +} + .dark .ace_gutter .ace_gutter_active_line { background-color: rgba(255, 255, 255, 0.07); }