From d178d2bdcfcf88889528e0957390569c61ba39b7 Mon Sep 17 00:00:00 2001 From: Bryan Hoekstra Date: Sat, 19 Sep 2015 16:42:12 +1200 Subject: [PATCH] Terminal force to bottom and line wrap on/off. --- html/modal-settings.html | 2 ++ main.js | 35 +++++++++++++++++++++++++++++++---- preferences.js | 2 ++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/html/modal-settings.html b/html/modal-settings.html index b000420..7ee428a 100644 --- a/html/modal-settings.html +++ b/html/modal-settings.html @@ -24,6 +24,8 @@
+ +
diff --git a/main.js b/main.js index ce36b11..749a2cc 100644 --- a/main.js +++ b/main.js @@ -19,7 +19,9 @@ define(function (require, exports, module) { NODE_EXEC_DIALOG_ID = "node-exec-dialog", LS_PREFIX = "node-", DOMAIN_NAME = "brackets-nodejs", - scrollEnabled = prefs.get("autoscroll"); + scrollEnabled = prefs.get("autoscroll"), + termBottom = prefs.get("termbottom"), + wrap = prefs.get("wrap"); /** * Connect to the backend nodejs domain @@ -131,7 +133,11 @@ define(function (require, exports, module) { /** * Panel alias terminal */ - $(".content").append(require("text!html/panel.html")); + //this puts the terminal under the status bar... that's bad + //but it can end up in seemingly odd positions, so we have an + //option to make it the last one + //$(".content").append(require("text!html/panel.html")); + $("#status-bar").before(require("text!html/panel.html")); var Panel = { id: "brackets-nodejs-terminal", @@ -147,6 +153,21 @@ define(function (require, exports, module) { * Basic functionality */ show: function (command) { + //force terminal to bottom, but above the status-bar + if ( prefs.get("termbottom") ) { + $("#"+this.id).detach() + $("#status-bar").before(this.panel); + } + if ( prefs.get("wrap") ) + { + this.pre.style.removeProperty("white-space"); + this.pre.style.removeProperty("word-wrap"); + } + else + { + this.pre.style.setProperty("white-space", "pre"); + this.pre.style.setProperty("word-wrap", "normal"); + } this.panel.style.display = "block"; this.commandTitle.textContent = command; WorkspaceManager.recomputeLayout(); @@ -168,12 +189,10 @@ define(function (require, exports, module) { write: function (str) { var e = document.createElement("span"); e.innerHTML = ansi(str.replace(//g, ">")); - var scroll = false; if (this.pre.parentNode.scrollTop === 0 || this.pre.parentNode.scrollTop === this.pre.parentNode.scrollHeight || this.pre.parentNode.scrollHeight - this.pre.parentNode.scrollTop === this.pre.parentNode.clientHeight) { scroll = true; } - this.pre.appendChild(e); if (scroll && scrollEnabled) { @@ -271,11 +290,15 @@ define(function (require, exports, module) { // Store autoscroll config globally scrollEnabled = scrollInput.checked; + termBottom = termBottom.checked; + wrap = wrap.checked; prefs.set("node-bin", node.trim()); prefs.set("npm-bin", npm.trim()); prefs.set("v8-flags", v8flags.trim()); prefs.set("autoscroll", scrollEnabled); + prefs.set("termbottom",termBottom); + prefs.set("wrap", wrap); prefs.save(); }); @@ -284,11 +307,15 @@ define(function (require, exports, module) { var nodeInput = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .node"), npmInput = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .npm"), scrollInput = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .autoscroll"), + termBottom = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .termbottom"), + wrap = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .wrap"), flagsInput = document.querySelector("." + NODE_SETTINGS_DIALOG_ID + " .flags"); nodeInput.value = prefs.get("node-bin"); npmInput.value = prefs.get("npm-bin"); flagsInput.value = prefs.get("v8-flags"); scrollInput.checked = prefs.get("autoscroll"); + termBottom.checked = prefs.get("termbottom"); + wrap.checked = prefs.get("wrap"); } }, diff --git a/preferences.js b/preferences.js index 32d4a33..07ca693 100644 --- a/preferences.js +++ b/preferences.js @@ -6,6 +6,8 @@ define(function main(require, exports, module) { prefs.definePreference("node-bin", "string", ""); prefs.definePreference("npm-bin", "string", ""); prefs.definePreference("autoscroll", "boolean", true); + prefs.definePreference("termbottom", "boolean", true); + prefs.definePreference("wrap", "boolean", false); prefs.definePreference("v8-flags", "string", ""); // Conversion from the old localstorage