Changeset 31877
- Timestamp:
- 04/04/09 06:57:30 (4 years ago)
- Location:
- lang/javascript/vimperator-plugins/trunk
- Files:
-
- 2 modified
-
caret-hint.js (modified) (2 diffs)
-
moreqmarks.js (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lang/javascript/vimperator-plugins/trunk/caret-hint.js
r31876 r31877 37 37 <VimperatorPlugin> 38 38 <name>Caret Hint</name> 39 <description>Move caret position by hint</description>39 <description>Move the caret position by hint</description> 40 40 <description lang="ja">Hint を使ってキャレット位置を移動</description> 41 <version>1. 2.1</version>41 <version>1.0.0</version> 42 42 <author mail="anekos@snca.net" homepage="http://d.hatena.ne.jp/nokturnalmortum/">anekos</author> 43 43 <license>new BSD License (Please read the source code comments of this plugin)</license> … … 47 47 <maxVersion>2.0pre</maxVersion> 48 48 <detail><![CDATA[ 49 Move caret position by hint.50 49 == Global Variables == 51 let g:caret_hint_key = 'c': 52 Hint mode key. 53 Move caret position to the head of selected element. 54 let g:caret_hint_tail_key = 'C': 55 Hint mode key. 56 Move caret position to the tail of selected element. 57 let g:caret_hint_select_key = '' (default: disabled): 58 Hint mode key. 59 Move caret position to the head of selected element, and select. 60 let g:caret_hint_select_tail_key = 'S': 61 Hint mode key. 62 Move caret position to the tail of selected element, and select. 63 let g:caret_hint_swap_key = 's': 64 The key mapping for Visual-mode. 65 Swap caret position head to tail. 66 If apply empty string ('') to these variables, these mapping or mode are not enabled. 67 == Global Variables 2 == 68 let g:caret_hint_xpath = '//*': 69 The XPath for hint-mode selection. 50 let g:caret_hint_key: 51 Hint mode key 70 52 ]]></detail> 71 53 <detail lang="ja"><![CDATA[ 72 Hint を使ってキャレット位置を移動 73 == Global Variables 1 == 74 let g:caret_hint_key = 'c': 54 == Global Variables == 55 let g:caret_hint_key: 75 56 Hint モードのキー 76 選択した要素の先頭にキャレットを移動する77 let g:caret_hint_tail_key = 'C':78 Hint モードのキー79 選択した要素の後尾にキャレットを移動する80 let g:caret_hint_select_key = '' (デフォルト: 無効):81 Hint モードのキー82 選択した要素の先頭にキャレットを移動し、要素を選択する83 let g:caret_hint_select_tail_key = 'S':84 Hint モードのキー85 選択した要素の後尾にキャレットを移動し、要素を選択する86 let g:caret_hint_swap_key = 's':87 VISUAL モード用のキーマッピング88 キャレットの位置を交換する(先頭 <=> 後尾)89 これらの値に空文字列を与えれば、マッピングやモードは有効にされません。90 == Global Variables 2 ==91 let g:caret_hint_xpath = '//*':92 ヒント対象要素を選択するための XPath93 57 ]]></detail> 94 58 </VimperatorPlugin>; 95 59 // }}} 96 60 97 /* _\|/_98 (o o)99 +----oOO-{_}-OOo------------+100 |TODO count@action の使い道 |101 | 要素 A-B 間を選択 |102 +---------------------------*/103 104 105 61 (function () { 106 62 107 // XXX 空白も有効 108 let headMode = gval('caret_hint_key', 'c'); 109 let tailMode = gval('caret_hint_tail_key', 'C'); 110 let selectHeadMode = gval('caret_hint_select_key', ''); 111 let selectTailMode = gval('caret_hint_select_tail_key', 'S'); 112 let swapKey = gval('caret_hint_swap_key', 's'); 113 let hintXPath = liberator.globalVariables.caret_hint_xpath || '//*'; 63 let mode = liberator.globalVariables.caret_hint_key || 'c'; 114 64 115 [ 116 [[true, false], headMode], 117 [[false, false], tailMode], 118 [[true, true ], selectHeadMode], 119 [[false, true ], selectTailMode], 120 ].forEach(function ([[h, s], m, d]) { 121 if (!m) 122 return; 123 hints.addMode( 124 m, 125 'Move caret position to ' + (h ? 'head' : 'tail') + (s ? ' and Select' : ''), 126 function (elem, loc, count) moveCaret(elem, h, s), 127 function () hintXPath 128 ); 129 }); 65 function moveCaret (elem) { 66 let doc = elem.ownerDocument; 130 67 131 if (swapKey) { 132 mappings.addUserMap( 133 [modes.VISUAL], 134 [swapKey], 135 'Swap caret position head to tail', 136 swapCaret, 137 {} 138 ); 68 let win = new XPCNativeWrapper(window.content.window); 69 let sel = win.getSelection(); 70 sel.removeAllRanges(); 71 72 let r = doc.createRange(); 73 r.selectNodeContents(elem); 74 r.setEnd(r.startContainer, r.startOffset); 75 76 sel.addRange(r); 139 77 } 140 78 79 hints.addMode( 80 'c', 81 'Move the caret position', 82 function (elem, _, count) { 83 moveCaret(elem); 84 mappings.getDefault(modes.NORMAL, 'i').action(); 85 }, 86 function () '//*' 87 ); 141 88 142 function gval (name, def) {143 let v = liberator.globalVariables[name];144 return (v === undefined) ? def : v;145 }146 147 function swapCaret () {148 let win = new XPCNativeWrapper(window.content.window);149 let s = win.getSelection();150 151 if (s.rangeCount <= 0)152 return false;153 154 // 位置交換時に元の情報が失われるので保存しておく155 let [a, f] = [[s.anchorNode, s.anchorOffset], [s.focusNode, s.focusOffset]];156 s.collapse.apply(s, f);157 s.extend.apply(s, a);158 }159 160 function moveCaret (elem, head, select) {161 let doc = elem.ownerDocument;162 let win = new XPCNativeWrapper(window.content.window);163 let sel = win.getSelection();164 let r = doc.createRange();165 166 sel.removeAllRanges();167 r.selectNodeContents(elem);168 169 if (select) {170 liberator.log('select')171 mappings.getDefault(modes.NORMAL, 'i').action();172 mappings.getDefault(modes.CARET, 'v').action();173 } else {174 liberator.log('not select')175 if (head) {176 r.setEnd(r.startContainer, r.startOffset);177 } else {178 r.setStart(r.endContainer, r.endOffset);179 }180 mappings.getDefault(modes.NORMAL, 'i').action();181 }182 183 sel.addRange(r);184 185 if (select && head)186 swapCaret();187 }188 89 })(); 189 90 -
lang/javascript/vimperator-plugins/trunk/moreqmarks.js
r31876 r31877 34 34 35 35 // TODO: move to a storage module 36 var savedMarks = options.getPref("extensions.vimperator.moreqmarks", "").split("\n");37 var savedMarkStack = options.getPref("extensions.vimperator.moreqmarkstack", "").split("\n");38 var savedMarkQueue = options.getPref("extensions.vimperator.moreqmarkqueue", "").split("\n");36 var savedMarks = liberator.modules.options.getPref("extensions.vimperator.moreqmarks", "").split("\n"); 37 var savedMarkStack = liberator.modules.options.getPref("extensions.vimperator.moreqmarkstack", "").split("\n"); 38 var savedMarkQueue = liberator.modules.options.getPref("extensions.vimperator.moreqmarkqueue", "").split("\n"); 39 39 40 40 // load the saved quickmarks -- TODO: change to sqlite 41 41 if(use_default_data) { 42 var defaultMarks = options.getPref("extensions.vimperator.quickmarks", "").split("\n");42 var defaultMarks = liberator.modules.options.getPref("extensions.vimperator.quickmarks", "").split("\n"); 43 43 for (var i = 0; i < defaultMarks.length - 1; i += 2) { 44 44 var url = defaultMarks[i+1]; … … 118 118 function list_qmarks(marks) { 119 119 if(use_position) { 120 var list = ":" + util.escapeHTML(commandline.command) + "<br/>" +120 var list = ":" + liberator.modules.util.escapeHTML(liberator.modules.commandline.command) + "<br/>" + 121 121 "<table><tr align=\"left\" class=\"hl-Title\"><th>mark</th><th>line</th><th>col</th><th>file</th></tr>"; 122 122 for (var i = 0; i < marks.length; i++) … … 126 126 "<td align=\"right\">" + Math.round(marks[i][2] * 100) + "%</td>" + 127 127 "<td align=\"right\">" + Math.round(marks[i][3] * 100) + "%</td>" + 128 "<td style=\"color: green;\">" + util.escapeHTML(marks[i][1]) + "</td>" +128 "<td style=\"color: green;\">" + liberator.modules.util.escapeHTML(marks[i][1]) + "</td>" + 129 129 "</tr>"; 130 130 } … … 132 132 return list; 133 133 } else { 134 var list = ":" + util.escapeHTML(commandline.command) + "<br/>" +134 var list = ":" + liberator.modules.util.escapeHTML(liberator.modules.commandline.command) + "<br/>" + 135 135 "<table><tr align=\"left\" class=\"hl-Title\"><th>QuickMark</th><th>URL</th></tr>"; 136 136 for (var i = 0; i < marks.length; i++) 137 137 { 138 138 list += "<tr><td> " + marks[i][0] + 139 "</td><td style=\"color: green;\">" + util.escapeHTML(marks[i][1]) + "</td></tr>";139 "</td><td style=\"color: green;\">" + liberator.modules.util.escapeHTML(marks[i][1]) + "</td></tr>"; 140 140 } 141 141 list += "</table>"; … … 149 149 if (url) { 150 150 if(find) { 151 for (let [number, browser] in Iterator( tabs.browsers)) {151 for (let [number, browser] in Iterator(liberator.modules.tabs.browsers)) { 152 152 var marked_url = browser.contentDocument.location.href; 153 153 if(marked_url == url) { 154 tabs.select(number, false);154 liberator.modules.tabs.select(number, false); 155 155 var win = getBrowser().selectedTab.linkedBrowser.contentWindow; 156 156 if(use_position) { … … 195 195 savedQuickMarkStack += qmark_stack[mark].y + "\n"; 196 196 } 197 options.setPref("extensions.vimperator.moreqmarkstack", savedQuickMarkStack);197 liberator.modules.options.setPref("extensions.vimperator.moreqmarkstack", savedQuickMarkStack); 198 198 break; 199 199 case "queue": … … 204 204 savedQuickMarkQueue += qmark_queue[mark].y + "\n"; 205 205 } 206 options.setPref("extensions.vimperator.moreqmarkqueue", savedQuickMarkQueue);206 liberator.modules.options.setPref("extensions.vimperator.moreqmarkqueue", savedQuickMarkQueue); 207 207 break; 208 208 case "mark": … … 215 215 savedQuickMarks += qmarks[mark].y + "\n"; 216 216 } 217 options.setPref("extensions.vimperator.moreqmarks", savedQuickMarks);217 liberator.modules.options.setPref("extensions.vimperator.moreqmarks", savedQuickMarks); 218 218 if(use_default_data) { 219 219 var savedQuickMarks = ""; … … 222 222 savedQuickMarks += qmarks[mark].url + "\n"; 223 223 } 224 options.setPref("extensions.vimperator.quickmarks", savedQuickMarks);224 liberator.modules.options.setPref("extensions.vimperator.quickmarks", savedQuickMarks); 225 225 } 226 226 break; … … 265 265 //// MAPPINGS 266 266 267 var modes = [ modes.NORMAL];268 269 mappings.addUserMap(modes,267 var modes = [liberator.modules.modes.NORMAL]; 268 269 liberator.modules.mappings.addUserMap(modes, 270 270 ["gj"], "Jump to QuickMark for current URL", 271 271 function (arg) 272 272 { 273 var where = /\bquickmark\b/.test( options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;274 quickmarks.jumpTo(arg, where, true);273 var where = /\bquickmark\b/.test(liberator.modules.options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB; 274 liberator.modules.quickmarks.jumpTo(arg, where, true); 275 275 }, 276 { flags: mappings.flags.ARGUMENT });277 278 mappings.addUserMap(modes,276 { flags: liberator.modules.Mappings.flags.ARGUMENT }); 277 278 liberator.modules.mappings.addUserMap(modes, 279 279 ["gd"], "Delete QuickMark for current URL", 280 280 function () 281 281 { 282 plugins.moreqmarks.remove('',buffer.URL);283 }); 284 mappings.addUserMap(modes,282 liberator.plugins.moreqmarks.remove('', liberator.modules.buffer.URL); 283 }); 284 liberator.modules.mappings.addUserMap(modes, 285 285 ["gs"], "Push QuickMarkStack for current URL", 286 286 function () 287 287 { 288 plugins.moreqmarks.add("",buffer.URL, "stack");289 }); 290 mappings.addUserMap(modes,288 liberator.plugins.moreqmarks.add("", liberator.modules.buffer.URL, "stack"); 289 }); 290 liberator.modules.mappings.addUserMap(modes, 291 291 ["gS"], "Pop QuickMarkStack and Jump", 292 292 function () 293 293 { 294 var where = /\bquickmark\b/.test( options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;295 if( quickmarks.jumpTo("", where, true, "stack")) {296 quickmarks.remove("", "", "stack");297 } 298 }); 299 300 mappings.addUserMap(modes,294 var where = /\bquickmark\b/.test(liberator.modules.options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB; 295 if(liberator.modules.quickmarks.jumpTo("", where, true, "stack")) { 296 liberator.modules.quickmarks.remove("", "", "stack"); 297 } 298 }); 299 300 liberator.modules.mappings.addUserMap(modes, 301 301 ["gq"], "Queue QuickMarkQueue for current URL", 302 302 function () 303 303 { 304 liberator.plugins.moreqmarks.add("", buffer.URL, "queue");305 }); 306 mappings.addUserMap(modes,304 liberator.plugins.moreqmarks.add("", liberator.modules.buffer.URL, "queue"); 305 }); 306 liberator.modules.mappings.addUserMap(modes, 307 307 ["gQ"], "Dequeue QuickMarkStack and Jump", 308 308 function () 309 309 { 310 var where = /\bquickmark\b/.test( options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;311 if( quickmarks.jumpTo("", where, true, "queue")) {312 quickmarks.remove("", "", "queue");310 var where = /\bquickmark\b/.test(liberator.modules.options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB; 311 if(liberator.modules.quickmarks.jumpTo("", where, true, "queue")) { 312 liberator.modules.quickmarks.remove("", "", "queue"); 313 313 } 314 314 }); … … 316 316 //// COMMANDS 317 317 318 commands.add(["qmarkpu[sh]", "qmpu[sh]"], "Push QuickMarkStack for current URL",319 function () 320 { 321 liberator.plugins.moreqmarks.add("", buffer.URL, "stack");322 }); 323 commands.add(["qmarkpo[p]", "qmpo[p]"], "Pop QuickMarkStack and Jump",324 function () 325 { 326 var where = /\bquickmark\b/.test( options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;327 quickmarks.jumpTo("", where, true, "stack");328 }); 329 commands.add(["stackli[st]", "stls"], "List QuickMarkStack",318 liberator.modules.commands.add(["qmarkpu[sh]", "qmpu[sh]"], "Push QuickMarkStack for current URL", 319 function () 320 { 321 liberator.plugins.moreqmarks.add("", liberator.modules.buffer.URL, "stack"); 322 }); 323 liberator.modules.commands.add(["qmarkpo[p]", "qmpo[p]"], "Pop QuickMarkStack and Jump", 324 function () 325 { 326 var where = /\bquickmark\b/.test(liberator.modules.options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB; 327 liberator.modules.quickmarks.jumpTo("", where, true, "stack"); 328 }); 329 liberator.modules.commands.add(["stackli[st]", "stls"], "List QuickMarkStack", 330 330 function () 331 331 { 332 332 liberator.plugins.moreqmarks.list("", "stack"); 333 333 }); 334 commands.add(["qmarkqu[eue]", "qmqu[eue]"], "Queue QuickMarkQueue for current URL",335 function () 336 { 337 liberator.plugins.moreqmarks.add("", buffer.URL, "queue");338 }); 339 commands.add(["qmarkde[que]", "qmde[que]"], "Dequeue QuickMarkStack and Jump",340 function () 341 { 342 var where = /\bquickmark\b/.test( options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB;343 quickmarks.jumpTo("", where, true, "queue");344 }); 345 commands.add(["queueli[st]", "quli[st]"], "List QuickMarkQueue",334 liberator.modules.commands.add(["qmarkqu[eue]", "qmqu[eue]"], "Queue QuickMarkQueue for current URL", 335 function () 336 { 337 liberator.plugins.moreqmarks.add("", liberator.modules.buffer.URL, "queue"); 338 }); 339 liberator.modules.commands.add(["qmarkde[que]", "qmde[que]"], "Dequeue QuickMarkStack and Jump", 340 function () 341 { 342 var where = /\bquickmark\b/.test(liberator.modules.options["activate"]) ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB; 343 liberator.modules.quickmarks.jumpTo("", where, true, "queue"); 344 }); 345 liberator.modules.commands.add(["queueli[st]", "quli[st]"], "List QuickMarkQueue", 346 346 function () 347 347 { … … 367 367 add_qmark(qmark, {url: url, x: x, y: y}, target); 368 368 var message = (target?target+" : ":"add : "+qmark+" | ")+"("+x*100+"%, "+y*100+"%) | "+url; 369 commandline.echo(message,commandline.HL_INFOMSG)369 liberator.modules.commandline.echo(message, liberator.modules.commandline.HL_INFOMSG) 370 370 } else { 371 371 add_qmark(qmark, {url: url, x: 0, y: 0}, target); 372 372 var message = (target?target+" : ":"add : "+qmark+" | ")+url; 373 commandline.echo(message,commandline.HL_INFOMSG);373 liberator.modules.commandline.echo(message, liberator.modules.commandline.HL_INFOMSG); 374 374 } 375 375 save_qmarks(target); … … 382 382 case "stack": 383 383 if(item = qmark_stack.pop()) { 384 commandline.echo("pop "+item.url,commandline.HL_INFOMSG);384 liberator.modules.commandline.echo("pop "+item.url, liberator.modules.commandline.HL_INFOMSG); 385 385 save_qmarks("stack"); 386 386 } else { … … 391 391 var item; 392 392 if(item = qmark_queue.pop()) { 393 commandline.echo("dequeue "+item.url,commandline.HL_INFOMSG);393 liberator.modules.commandline.echo("dequeue "+item.url, liberator.modules.commandline.HL_INFOMSG); 394 394 save_qmarks("queue"); 395 395 } else { … … 403 403 if(url == qmarks[mark].url) { 404 404 delete qmarks[mark]; 405 commandline.echo("delete qmark "+mark,commandline.HL_INFOMSG);405 liberator.modules.commandline.echo("delete qmark "+mark, liberator.modules.commandline.HL_INFOMSG); 406 406 save_qmarks("mark"); 407 407 return; … … 415 415 if (pattern.test(qmark)) { 416 416 delete qmarks[qmark]; 417 commandline.echo("delete qmark "+qmark,commandline.HL_INFOMSG);417 liberator.modules.commandline.echo("delete qmark "+qmark, liberator.modules.commandline.HL_INFOMSG); 418 418 save_qmarks("mark"); 419 419 return; … … 483 483 484 484 var list = list_qmarks(marks); 485 commandline.echo(list, commandline.HL_NORMAL,commandline.FORCE_MULTILINE);485 liberator.modules.commandline.echo(list, liberator.modules.commandline.HL_NORMAL, liberator.modules.commandline.FORCE_MULTILINE); 486 486 }, 487 487 … … 495 495 }; 496 496 for(var name in liberator.plugins.moreqmarks) { 497 quickmarks[name] = liberator.plugins.moreqmarks[name];497 liberator.modules.quickmarks[name] = liberator.plugins.moreqmarks[name]; 498 498 } 499 499 })();
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)