sites

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit b0d438d09661e53f5bcc5f92ea67f7e77aa14c76
parent 34e86162a4a04b1be54e24bc1da8bede3c90f317
Author: Thuban <thuban@singularity.fr>
Date:   Thu,  8 Nov 2012 07:24:51 +0100

Adding script for navigation asked on the list
Diffstat:
Asurf.suckless.org/files/easier_key.md | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 135 insertions(+), 0 deletions(-)

diff --git a/surf.suckless.org/files/easier_key.md b/surf.suckless.org/files/easier_key.md @@ -0,0 +1,135 @@ +Easier keyboard shortcuts +========= + +Just a javascript to put in `~/.surf/script.js`, coming from userscript. +It just reproduce the vim behavious, to navigate in pages without using +the Ctrl key everytime : + +- h : scroll left +- j : scroll down +- k : scroll up +- l : scroll right +- g : Top of page +- G : bottom of page + + +<pre> +// ==UserScript== +// @name vimkeybindings +// @namespace renevier.fdn.fr +// @author arno <arenevier@fdn.fr> +// @licence GPL/LGPL/MPL +// @description use vim keybingings (i, j, k, l, …) to navigate a web page. +// ==/UserScript== + +/* + * If you're a vim addict, and you always find yourself typing j or k in a web + * page, then wondering why it just does not go up and down like any good + * software, that user script is what you have been looking for. + */ + + +function up() { + if (window.scrollByLines) + window.scrollByLines(-1); // gecko + else + window.scrollBy(0, -12); // webkit +} + +function down() { + if (window.scrollByLines) + window.scrollByLines(1); // gecko + else + window.scrollBy(0, 12); // webkit +} + +function pageup() { + if (window.scrollByPages) + window.scrollByPages(-1); // gecko + else + window.scrollBy(0, 0 - _pageScroll()); // webkit +} + +function pagedown() { + if (window.scrollByPages) + window.scrollByPages(1); // gecko + else + window.scrollBy(0, _pageScroll()); // webkit +} + +function right() { + window.scrollBy(15, 0); +} + +function left() { + window.scrollBy(-15, 0); +} + +function home() { + window.scroll(0, 0); +} + +function bottom() { + window.scroll(document.width, document.height); +} + +// If you don't like default key bindings, customize here. +// if you want to use the combination 'Ctrl + b' (for example), use '^b' +var bindings = { + 'h' : left, + 'l' : right, + 'k' : up, + 'j' : down, + 'g' : home, + 'G' : bottom, + //'^b': pageup, + //'^f': pagedown, +} + +function isEditable(element) { + + if (element.nodeName.toLowerCase() == "textarea") + return true; + + // we don't get keypress events for text input, but I don't known + // if it's a bug, so let's test that + if (element.nodeName.toLowerCase() == "input" && element.type == "text") + return true; + + // element is editable + if (document.designMode == "on" || element.contentEditable == "true") { + return true; + } + + return false; +} + +function keypress(evt) { + var target = evt.target; + + // if we're on a editable element, we probably don't want to catch + // keypress, we just want to write the typed character. + if (isEditable(target)) + return; + + var key = String.fromCharCode(evt.charCode); + if (evt.ctrlKey) { + key = '^' + key; + } + + var fun = bindings[key]; + if (fun) + fun(); + +} + +function _pageScroll() { + // Gecko algorithm + // ---------------- + // The page increment is the size of the page, minus the smaller of + // 10% of the size or 2 lines. + return window.innerHeight - Math.min(window.innerHeight / 10, 24); +} + +window.addEventListener("keypress", keypress, false); +</pre>