summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorKris Maglione <maglione.k@gmail.com>2010-10-14 18:31:12 -0400
committerKris Maglione <maglione.k@gmail.com>2010-10-14 18:31:12 -0400
commit9f9021e68e35824f1ccf9e976c0d2121ddcf76e2 (patch)
tree0e02771386d8686f952542554dd0bb48cbf4d59c /common
parent6cd4f05790eb6b1ceeb24a72a8c9c2d490d6da7c (diff)
downloadpentadactyl-9f9021e68e35824f1ccf9e976c0d2121ddcf76e2.tar.gz
Add :yank command.
Diffstat (limited to 'common')
-rw-r--r--common/content/commandline.js24
-rw-r--r--common/content/commands.js11
-rw-r--r--common/content/dactyl.js4
-rw-r--r--common/locale/en-US/cmdline.xml1
-rw-r--r--common/locale/en-US/index.xml1
-rw-r--r--common/locale/en-US/various.xml8
6 files changed, 41 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>