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);