index.md - 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 <[email protected]> | |
19 // @licence GPL/LGPL/MPL | |
20 // @description use vim keybingings (i, j, k, l, …) to navigat… | |
21 // ==/UserScript== | |
22 | |
23 /* | |
24 * If you're a vim addict, and you always find yourself typing j … | |
25 * page, then wondering why it just does not go up and down like … | |
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), … | |
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 … | |
93 // if it's a bug, so let's test that | |
94 if (element.nodeName.toLowerCase() == "input" && element.typ… | |
95 return true; | |
96 | |
97 // element is editable | |
98 if (document.designMode == "on" || element.contentEditable =… | |
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… | |
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 sma… | |
128 // 10% of the size or 2 lines. | |
129 return window.innerHeight - Math.min(window.innerHeight / 10… | |
130 } | |
131 | |
132 window.addEventListener("keypress", keypress, false); |