diff options
-rw-r--r-- | common/content/commandline.js | 24 | ||||
-rw-r--r-- | common/content/commands.js | 11 | ||||
-rw-r--r-- | common/content/dactyl.js | 4 | ||||
-rw-r--r-- | common/locale/en-US/cmdline.xml | 1 | ||||
-rw-r--r-- | common/locale/en-US/index.xml | 1 | ||||
-rw-r--r-- | common/locale/en-US/various.xml | 8 | ||||
-rw-r--r-- | pentadactyl/NEWS | 1 |
7 files changed, 42 insertions, 8 deletions
diff --git a/common/content/commandline.js b/common/content/commandline.js index 9f71909b..00532bce 100644 --- a/common/content/commandline.js +++ b/common/content/commandline.js @@ -538,7 +538,7 @@ const CommandLine = Module("commandline", { * @param {boolean} forceSingle If provided, don't let over-long * messages move to the MOW. */ - _echoLine: function echoLine(str, highlightGroup, forceSingle) { + _echoLine: function echoLine(str, highlightGroup, forceSingle, silent) { this.widgets.message = str ? [highlightGroup, str] : null; dactyl.triggerObserver("echoLine", str, highlightGroup, forceSingle); @@ -549,7 +549,7 @@ const CommandLine = Module("commandline", { let field = this.widgets.active.message.inputField; if (field.value && !forceSingle && field.editor.rootElement.scrollWidth > field.scrollWidth) { this.widgets.message = null; - this._echoMultiline(<span highlight="Message">{str}</span>, highlightGroup); + this._echoMultiline(<span highlight="Message">{str}</span>, highlightGroup, true); } }, @@ -559,7 +559,7 @@ const CommandLine = Module("commandline", { * @param {string} str * @param {string} highlightGroup */ - _echoMultiline: function echoMultiline(str, highlightGroup) { + _echoMultiline: function echoMultiline(str, highlightGroup, silent) { let doc = this.widgets.multilineOutput.contentDocument; let win = this.widgets.multilineOutput.contentWindow; @@ -567,8 +567,6 @@ const CommandLine = Module("commandline", { 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, { @@ -585,6 +583,9 @@ const CommandLine = Module("commandline", { this._lastMowOutput = <div class="ex-command-output" style={"white-space: " + style} highlight={highlightGroup}>{str}</div>; let output = util.xmlToDom(this._lastMowOutput, doc); + if (!silent) + dactyl.triggerObserver("echoMultiline", str, highlightGroup, output); + // FIXME: need to make sure an open MOW is closed when commands // that don't generate output are executed if (this.widgets.mowContainer.collapsed) @@ -660,7 +661,7 @@ const CommandLine = Module("commandline", { else { if (this.widgets.message && this.widgets.message[1] == this._lastEcho) this._echoMultiline(<span highlight="Message">{this._lastEcho}</span>, - this.widgets.message[0]); + this.widgets.message[0], true); if (action === this._echoLine && !(flags & this.FORCE_MULTILINE) && !this.widgets.mowContainer.collapsed) { highlightGroup += " Message"; @@ -1153,6 +1154,17 @@ const CommandLine = Module("commandline", { } if (this._history) this._history.reset(); + }, + + withOutputToString: function (fn, self) { + let buffer = []; + dactyl.registerObserver("echoLine", observe, true); + dactyl.registerObserver("echoMultiline", observe, true); + function observe(str, highlight, dom) { + buffer.push(dom ? dom.textContent : str) + } + dactyl.trapErrors.apply(dactyl, [fn, self].concat(Array.slice(arguments, 2))); + return buffer.join("\n"); } }, { /** diff --git a/common/content/commands.js b/common/content/commands.js index c2760018..f4833938 100644 --- a/common/content/commands.js +++ b/common/content/commands.js @@ -1241,6 +1241,17 @@ const Commands = Module("commands", { argCount: "1", completer: function (context) completion.userCommand(context) }); + + commands.add(["y[ank]"], + "Yanks the output of the given command to the clipboard", + function (args) { + dactyl.clipboardWrite( + commandline.withOutputToString(commands.execute, commands, args[0])); + }, + { + completer: function (context) completion.ex(context), + literal: 0 + }); }, javascript: function () { JavaScript.setCompleter([this.get, this.removeUserCommand], diff --git a/common/content/dactyl.js b/common/content/dactyl.js index 1b45c777..b9e9df39 100644 --- a/common/content/dactyl.js +++ b/common/content/dactyl.js @@ -621,7 +621,7 @@ const Dactyl = Module("dactyl", { let br = <> </>; - dactyl.clipboardWrite(<> + return <> <item> <tags>{template.map(obj.names, tag, " ")}</tags> <spec>{spec((obj.specs || obj.names)[0])}</spec>{ @@ -633,7 +633,7 @@ const Dactyl = Module("dactyl", { extraHelp ? br+extraHelp : "" }{ !(extraHelp || obj.description) ? br+<p>Sorry, no help available.</p> : "" } </description> - </item></>.toXMLString().replace(/^ {12}/gm, ""), true); + </item></>.toXMLString().replace(/^ {12}/gm, ""); }, /** diff --git a/common/locale/en-US/cmdline.xml b/common/locale/en-US/cmdline.xml index 099368d8..34e166eb 100644 --- a/common/locale/en-US/cmdline.xml +++ b/common/locale/en-US/cmdline.xml @@ -210,6 +210,7 @@ <li><ex>:vmap</ex></li> <li><ex>:vnoremap</ex></li> <li><ex>:winopen</ex></li> + <li><ex>:yank</ex></li> </ul> </p> </description> diff --git a/common/locale/en-US/index.xml b/common/locale/en-US/index.xml index cf7c2405..501bbece 100644 --- a/common/locale/en-US/index.xml +++ b/common/locale/en-US/index.xml @@ -351,6 +351,7 @@ This file contains a list of all available commands, mappings and options. <dt><ex>:winonly</ex></dt> <dd>Close all other windows</dd> <dt><ex>:winopen</ex></dt> <dd>Open one or more URLs in a new window</dd> <dt><ex>:wqall</ex></dt> <dd>Save the session and quit</dd> + <dt><ex>:yank</ex></dt> <dd>Yanks the output of the given command to the clipboard.</dd> <dt><ex>:zoom</ex></dt> <dd>Set zoom value of current web page</dd> </dl> diff --git a/common/locale/en-US/various.xml b/common/locale/en-US/various.xml index bdcc3af2..a093cc42 100644 --- a/common/locale/en-US/various.xml +++ b/common/locale/en-US/various.xml @@ -110,6 +110,14 @@ </description> </item> +<item> + <tags>:yank :y</tags> + <spec>:y[ank] <a>cmd</a></spec> + <description> + <p>Yanks the output of the given command to the clipboard.</p> + </description> +</item> + <h2 tag="privacy">Privacy and sensitive information</h2> <p> diff --git a/pentadactyl/NEWS b/pentadactyl/NEWS index f8c7b909..66e5895f 100644 --- a/pentadactyl/NEWS +++ b/pentadactyl/NEWS @@ -83,6 +83,7 @@ * Added several new options to :map. * Added -agent flag to :style. * Added :write !cmd and :write >>file. + * Added :yank command. * Removed the :source line at the end of files generated by :mkpentadactylrc. * gf now toggles between source and content view. |