sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

index.md (3094B)


      1 Easier keyboard shortcuts
      2 =========================
      3 
      4 Just a javascript to put in `~/.surf/script.js`, coming from userscript.
      5 It just reproduce the vim behavious, to navigate in pages without using
      6 the Ctrl key everytime : 
      7 
      8 * h: scroll left
      9 * j: scroll down
     10 * k: scroll up
     11 * l: scroll right
     12 * g: Top of page
     13 * G: bottom of page
     14 
     15 	// ==UserScript==
     16 	// @name vimkeybindings
     17 	// @namespace renevier.fdn.fr
     18 	// @author arno <arenevier@fdn.fr>
     19 	// @licence GPL/LGPL/MPL
     20 	// @description use vim keybingings (i, j, k, l, …) to navigate a web page.
     21 	// ==/UserScript==
     22 
     23 	/*
     24 	* If you're a vim addict, and you always find yourself typing j or k in a web
     25 	* page, then wondering why it just does not go up and down like any good
     26 	* software, that user script is what you have been looking for.
     27 	*/
     28 
     29 
     30 	function up() {
     31 	    if (window.scrollByLines)
     32 		window.scrollByLines(-1); // gecko
     33 	    else
     34 		window.scrollBy(0, -12); // webkit
     35 	}
     36 
     37 	function down() {
     38 	    if (window.scrollByLines)
     39 		window.scrollByLines(1); // gecko
     40 	    else
     41 		window.scrollBy(0, 12); // webkit
     42 	}
     43 
     44 	function pageup() {
     45 	    if (window.scrollByPages)
     46 		window.scrollByPages(-1); // gecko
     47 	    else
     48 		window.scrollBy(0, 0 - _pageScroll()); // webkit
     49 	}
     50 
     51 	function pagedown() {
     52 	    if (window.scrollByPages)
     53 		window.scrollByPages(1); // gecko
     54 	    else
     55 		window.scrollBy(0, _pageScroll()); // webkit
     56 	}
     57 
     58 	function right() {
     59 	    window.scrollBy(15, 0);
     60 	}
     61 
     62 	function left() {
     63 	    window.scrollBy(-15, 0);
     64 	}
     65 
     66 	function home() {
     67 	    window.scroll(0, 0);
     68 	}
     69 
     70 	function bottom() {
     71 	    window.scroll(document.width, document.height);
     72 	}
     73 
     74 	// If you don't like default key bindings, customize here. 
     75 	// if you want to use the combination 'Ctrl + b' (for example), use '^b'
     76 	var bindings = {
     77 	    'h' : left, 
     78 	    'l' : right,
     79 	    'k' : up,
     80 	    'j' : down,
     81 	    'g' : home,
     82 	    'G' : bottom,
     83 	    //'^b': pageup,
     84 	    //'^f': pagedown,
     85 	}
     86 
     87 	function isEditable(element) {
     88 	    
     89 	    if (element.nodeName.toLowerCase() == "textarea")
     90 		return true;
     91 
     92 	    // we don't get keypress events for text input, but I don't known
     93 	    // if it's a bug, so let's test that
     94 	    if (element.nodeName.toLowerCase() == "input" && element.type == "text")
     95 		return true;
     96 
     97 	    // element is editable
     98 	    if (document.designMode == "on" || element.contentEditable == "true") {
     99 		return true;
    100 	    }
    101 	    
    102 	    return false;
    103 	}
    104 
    105 	function keypress(evt) {
    106 	    var target = evt.target;
    107 		    
    108 	    // if we're on a editable element, we probably don't want to catch
    109 	    // keypress, we just want to write the typed character.
    110 	    if (isEditable(target))
    111 		return;
    112 
    113 	    var key = String.fromCharCode(evt.charCode);
    114 	    if (evt.ctrlKey) {
    115 		key = '^' + key;
    116 	    }
    117 
    118 	    var fun = bindings[key];
    119 	    if (fun)
    120 		fun();
    121 
    122 	}
    123 
    124 	function _pageScroll() {
    125 	    // Gecko algorithm
    126 	    // ----------------
    127 	    // The page increment is the size of the page, minus the smaller of
    128 	    // 10% of the size or 2 lines.  
    129 	    return window.innerHeight - Math.min(window.innerHeight / 10, 24);
    130 	}
    131 
    132 	window.addEventListener("keypress", keypress, false);