--- greasemonkey.js~	2006-10-17 14:25:00.000000000 +0200
+++ greasemonkey.js	2006-12-08 20:33:30.000000000 +0100
@@ -219,6 +219,7 @@
       // add our own APIs
       sandbox.GM_addStyle = function(css) { GM_addStyle(safeDoc, css) };
       sandbox.GM_log = GM_hitch(logger, "log");
+      sandbox.GM_fromClipboard = GM_hitch(this, "fromClipboard");
       sandbox.GM_setValue = GM_hitch(storage, "setValue");
       sandbox.GM_getValue = GM_hitch(storage, "getValue");
       sandbox.GM_openInTab = GM_hitch(this, "openInTab", unsafeContentWin);
@@ -256,6 +257,33 @@
     }
   },
 
+// Only does text for now.
+  fromClipboard: function() {
+
+    var clip = Components.classes["@mozilla.org/widget/clipboard;1"].getService(Components.interfaces.nsIClipboard);
+
+    if (!clip) return false;
+
+    var trans = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
+    if (!trans) return false; 
+
+    try {
+      trans.addDataFlavor("text/unicode");
+
+      clip.getData(trans, clip.kSelectionClipboard); 
+      var str = new Object(); 
+      var strLength = new Object(); 
+
+      trans.getTransferData("text/unicode",str,strLength);
+      
+      if (str) str = str.value.QueryInterface(Components.interfaces.nsISupportsString);
+      if (str) pastetext = str.data.substring(0, strLength.value / 2);
+      return pastetext;
+    } catch (e) {
+      return false;
+    }
+  },
+
   openInTab: function(unsafeContentWin, url) {
     var unsafeTop = new XPCNativeWrapper(unsafeContentWin, "top").top;
 

