aboutsummaryrefslogtreecommitdiffhomepage
path: root/examples
diff options
context:
space:
mode:
authorGravatar Rob <rob.manea@gmail.com>2009-11-30 14:11:30 +0100
committerGravatar Rob <rob.manea@gmail.com>2009-11-30 14:11:30 +0100
commite2f5db0f3ce07808f7e59e70639ec52eedf65e0c (patch)
tree029873532cdbc27d0d9f9527b0a612a76f0a1e90 /examples
parent78fd079c9f69708c9809629dcb83565064aba7af (diff)
added extedit.js and config examples for it
Diffstat (limited to 'examples')
-rw-r--r--examples/config/uzbl/config5
-rw-r--r--examples/data/uzbl/scripts/extedit.js103
2 files changed, 108 insertions, 0 deletions
diff --git a/examples/config/uzbl/config b/examples/config/uzbl/config
index f06bbc5..24806db 100644
--- a/examples/config/uzbl/config
+++ b/examples/config/uzbl/config
@@ -137,6 +137,11 @@ set load_from_xclip = sh 'echo "uri $(xclip -o)" > $4'
set open_new_window = sh 'uzbl-browser -u \@SELECTED_URI'
@bind <Button2> = js if("\@SELECTED_URI") { Uzbl.run("\@open_new_window"); } else { Uzbl.run("\\\@load_from_xclip"); }
+# Edit HTML forms in external editor
+set editor = gvim
+@bind E = script @scripts_dir/extedit.js
+menu_editable_add Open in @editor = script @scripts_dir/extedit.js
+
@bind j = scroll vertical 20
@bind <Page_Down> = scroll vertical 100%
@bind k = scroll vertical -20
diff --git a/examples/data/uzbl/scripts/extedit.js b/examples/data/uzbl/scripts/extedit.js
new file mode 100644
index 0000000..9d409c3
--- /dev/null
+++ b/examples/data/uzbl/scripts/extedit.js
@@ -0,0 +1,103 @@
+/*
+ * Edit forms in external editor
+ *
+ * (c) 2009, Robert Manea
+ * utf8 functions are (c) by Webtoolkit.info (http://www.webtoolkit.info/)
+ *
+ *
+ * Installation:
+ * - Copy this script to $HOME/.local/share/uzbl/scripts
+ * - Add the following to $HOME/.config/uzbl/config:
+ * @bind E = script @scripts_dir/extedit.js
+ * - Set your preferred editor
+ * set editor = gvim
+ * - non-GUI editors
+ * set editor = xterm -e vim
+ *
+ * Usage:
+ * Select (click) an editable form, go to command mode and hit E
+ *
+*/
+
+
+function utf8_decode ( str_data ) {
+    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
+   
+    str_data += '';
+   
+    while ( i < str_data.length ) {
+        c1 = str_data.charCodeAt(i);
+        if (c1 < 128) {
+            tmp_arr[ac++] = String.fromCharCode(c1);
+            i++;
+        } else if ((c1 > 191) && (c1 < 224)) {
+            c2 = str_data.charCodeAt(i+1);
+            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
+            i += 2;
+        } else {
+            c2 = str_data.charCodeAt(i+1);
+            c3 = str_data.charCodeAt(i+2);
+            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+            i += 3;
+        }
+    }
+    return tmp_arr.join('');
+}
+
+
+function utf8_encode ( argString ) {
+    var string = (argString+''); // .replace(/\r\n/g, "\n").replace(/\r/g, "\n");
+    var utftext = "";
+    var start, end;
+    var stringl = 0;
+    start = end = 0;
+    stringl = string.length;
+    for (var n = 0; n < stringl; n++) {
+        var c1 = string.charCodeAt(n);
+        var enc = null;
+        if (c1 < 128) {
+            end++;
+        } else if (c1 > 127 && c1 < 2048) {
+            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
+        } else {
+            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
+        }
+        if (enc !== null) {
+            if (end > start) {
+                utftext += string.substring(start, end);
+            }
+            utftext += enc;
+            start = end = n+1;
+        }
+    }
+    if (end > start) {
+        utftext += string.substring(start, string.length);
+    }
+    return utftext;
+}
+
+
+(function() {
+ var actelem = document.activeElement;
+
+ if(actelem.type == 'text' || actelem.type == 'textarea') {
+ var editor = Uzbl.run("print @editor") || "gvim";
+ var filename = Uzbl.run("print @(mktemp /tmp/uzbl_edit_@NAME.XXXXXX)@");
+
+ if(actelem.value)
+ Uzbl.run("sh 'echo " + window.btoa(utf8_encode(actelem.value)) + " | base64 -d > " + filename + "'");
+
+ Uzbl.run("sync_sh '" + editor + " " + filename + "'");
+ actelem.value = utf8_decode(window.atob(Uzbl.run("print @(base64 -w 0 " + filename + ")@")));
+
+ Uzbl.run("sh 'rm -f " + filename + "'");
+ }
+
+ })();
+