From e2f5db0f3ce07808f7e59e70639ec52eedf65e0c Mon Sep 17 00:00:00 2001 From: Rob Date: Mon, 30 Nov 2009 14:11:30 +0100 Subject: added extedit.js and config examples for it --- examples/config/uzbl/config | 5 ++ examples/data/uzbl/scripts/extedit.js | 103 ++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 examples/data/uzbl/scripts/extedit.js (limited to 'examples') 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 = 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 = 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 + "'"); + } + + })(); + -- cgit v1.2.3