diff --git a/common/content/commandline.js b/common/content/commandline.js
index 18891285..e5e45b42 100644
--- a/common/content/commandline.js
+++ b/common/content/commandline.js
@@ -340,79 +340,6 @@ const CommandLine = Module("commandline", {
get commandVisible() modes.main == modes.COMMAND_LINE &&
!(modes.extended & (modes.INPUT_MULTILINE | modes.OUTPUT_MULTILINE)),
- /**
- * Display a message in the command-line area.
- *
- * @param {string} str
- * @param {string} highlightGroup
- * @param {boolean} forceSingle If provided, don't let over-long
- * messages move to the MOW.
- */
- _echoLine: function echoLine(str, highlightGroup, forceSingle) {
- this.widgets.message = str ? [highlightGroup, str] : null;
-
- dactyl.triggerObserver("echoLine", str, highlightGroup, forceSingle);
-
- if (!this.commandVisible)
- this.hide();
-
- let field = this.widgets.active.message.inputField;
- if (!forceSingle && field.editor.rootElement.scrollWidth > field.scrollWidth)
- this._echoMultiline({str}, highlightGroup);
- },
-
- /**
- * Display a multiline message.
- *
- * @param {string} str
- * @param {string} highlightGroup
- */
- // TODO: resize upon a window resize
- _echoMultiline: function echoMultiline(str, highlightGroup) {
- let doc = this.widgets.multilineOutput.contentDocument;
- let win = this.widgets.multilineOutput.contentWindow;
-
- if (!this.commandVisible)
- this.hide();
-
- dactyl.triggerObserver("echoMultiline", str, highlightGroup);
-
- this._startHints = false;
- if (!(modes.extended & modes.OUTPUT_MULTILINE))
- modes.push(modes.COMMAND_LINE, modes.OUTPUT_MULTILINE);
-
- // If it's already XML, assume it knows what it's doing.
- // Otherwise, white space is significant.
- // The problem elsewhere is that E4X tends to insert new lines
- // after interpolated data.
- XML.ignoreWhitespace = false;
- XML.prettyPrinting = false;
- let style = typeof str === "string" ? "pre" : "nowrap";
- this._lastMowOutput =
{str}
;
- let output = util.xmlToDom(this._lastMowOutput, doc);
-
- // FIXME: need to make sure an open MOW is closed when commands
- // that don't generate output are executed
- if (this.widgets.mowContainer.collapsed)
- doc.body.innerHTML = "";
-
- doc.body.appendChild(output);
-
- commandline.updateOutputHeight(true);
-
- if (options["more"] && win.scrollMaxY > 0) {
- // start the last executed command's output at the top of the screen
- let elements = doc.getElementsByClassName("ex-command-output");
- elements[elements.length - 1].scrollIntoView(true);
- }
- else
- win.scrollTo(0, doc.height);
-
- win.focus();
-
- commandline.updateMorePrompt();
- },
-
/**
* Ensure that the multiline input widget is the correct size.
*/
@@ -602,6 +529,81 @@ const CommandLine = Module("commandline", {
this.widgets.command = null;
},
+ /**
+ * Display a message in the command-line area.
+ *
+ * @param {string} str
+ * @param {string} highlightGroup
+ * @param {boolean} forceSingle If provided, don't let over-long
+ * messages move to the MOW.
+ */
+ _echoLine: function echoLine(str, highlightGroup, forceSingle) {
+ this.widgets.message = str ? [highlightGroup, str] : null;
+
+ dactyl.triggerObserver("echoLine", str, highlightGroup, forceSingle);
+
+ if (!this.commandVisible)
+ this.hide();
+
+ let field = this.widgets.active.message.inputField;
+ if (!forceSingle && field.editor.rootElement.scrollWidth > field.scrollWidth) {
+ this.widgets.message = null;
+ this._echoMultiline({str}, highlightGroup);
+ }
+ },
+
+ /**
+ * Display a multiline message.
+ *
+ * @param {string} str
+ * @param {string} highlightGroup
+ */
+ // TODO: resize upon a window resize
+ _echoMultiline: function echoMultiline(str, highlightGroup) {
+ let doc = this.widgets.multilineOutput.contentDocument;
+ let win = this.widgets.multilineOutput.contentWindow;
+
+ if (!this.commandVisible)
+ this.hide();
+
+ dactyl.triggerObserver("echoMultiline", str, highlightGroup);
+
+ this._startHints = false;
+ if (!(modes.extended & modes.OUTPUT_MULTILINE))
+ modes.push(modes.COMMAND_LINE, modes.OUTPUT_MULTILINE);
+
+ // If it's already XML, assume it knows what it's doing.
+ // Otherwise, white space is significant.
+ // The problem elsewhere is that E4X tends to insert new lines
+ // after interpolated data.
+ XML.ignoreWhitespace = false;
+ XML.prettyPrinting = false;
+ let style = typeof str === "string" ? "pre" : "nowrap";
+ this._lastMowOutput = {str}
;
+ let output = util.xmlToDom(this._lastMowOutput, doc);
+
+ // FIXME: need to make sure an open MOW is closed when commands
+ // that don't generate output are executed
+ if (this.widgets.mowContainer.collapsed)
+ doc.body.innerHTML = "";
+
+ doc.body.appendChild(output);
+
+ commandline.updateOutputHeight(true);
+
+ if (options["more"] && win.scrollMaxY > 0) {
+ // start the last executed command's output at the top of the screen
+ let elements = doc.getElementsByClassName("ex-command-output");
+ elements[elements.length - 1].scrollIntoView(true);
+ }
+ else
+ win.scrollTo(0, doc.height);
+
+ win.focus();
+
+ commandline.updateMorePrompt();
+ },
+
/**
* Output the given string onto the command line. With no flags, the
* message will be shown in the status line if it's short enough to
@@ -647,6 +649,9 @@ const CommandLine = Module("commandline", {
let single = flags & (this.FORCE_SINGLELINE | this.DISALLOW_MULTILINE);
let action = this._echoLine;
+ if ((flags & this.FORCE_MULTILINE) || (/\n/.test(str) || typeof str == "xml") && !(flags & this.FORCE_SINGLELINE))
+ action = this._echoMultiline;
+
if (single)
this._lastEcho = null;
else {
@@ -654,16 +659,13 @@ const CommandLine = Module("commandline", {
this._echoMultiline({this._lastEcho},
this.widgets.message[0]);
- if (!(flags & this.FORCE_MULTILINE) && !this.widgets.mowContainer.collapsed) {
+ if (action == this._echoLine && !(flags & this.FORCE_MULTILINE) && !this.widgets.mowContainer.collapsed) {
highlightGroup += " Message";
action = this._echoMultiline;
}
this._lastEcho = (action == this._echoLine) && str;
}
- if ((flags & this.FORCE_MULTILINE) || (/\n/.test(str) || typeof str == "xml") && !(flags & this.FORCE_SINGLELINE))
- action = this._echoMultiline;
-
this._lastClearable = action === this._echoLine && String(str);
if (action)