aboutsummaryrefslogtreecommitdiffstats
path: root/auto_source.js
AgeCommit message (Expand)Author
2010-05-17API追加anekos
2010-05-14edit-vimperator-files.js による補完強化anekos
2010-04-29expandPath 時に ../ のようなものを正規化anekos
2010-04-26remove debug codeanekos
2010-04-23プラグイン名まつがいanekos
2010-04-23*.js 以外は context を考慮しないようにしたanekos
2010-04-12エラーを echo するようにanekos
2010-04-12source 時に context を考慮するようにしたanekos
2010-04-12expandPath 時に ../ のようなものを正規化anekos
2010-02-01新ヘルプ追加anekos
2010-02-01ヘルプのリロードを行う、-help オプションを追加anekos
2009-08-27Follow HEADanekos
2009-08-27Follow HEADanekos
2009-03-20エラーが起きたときに監視対象登録失敗するのを修正anekos
2009-02-24add force optionssecondlife
2009-02-24-command で、source 後に自動実行してもらいたいコマンドを...secondlife
2009-02-04PLUGIN_INFO 修正anekos
2008-12-24add updateURL for pluginManager.jssuVene
2008-12-21Meow meow fix.anekos
2008-12-13カレントディレクトリを考慮するようにした。anekos
2008-12-09Follow Headanekos
2008-11-25follow CVS Headanekos
2008-11-22新しい completer に対応してみた。anekos
2008-11-21仕様変更に対応。anekos
2008-11-15デバッグ用コードの除去anekos
2008-11-14Initial release: ファイル変更を監視して、自動で :so するプ...anekos
タされたリンクを開く // // :lo[pen][!] URI [-w <WHERE>] // URI を開く // // ちなみに Migemo はなくても動きます。 // 無い場合は、 "/" 要らずで正規表現オンリーになります。 // // Variables: // let g:fopen_default_interval="<INTERVAL_SEC>" // // License: // http://creativecommons.org/licenses/by-sa/3.0/ (function () { let migemo = window.XMigemoCore; function isHttpLink (link) { return link.href && link.href.indexOf('http') == 0; } function lmatch (re, link) { return isHttpLink(link) && (link.href.match(re) || link.textContent.toString().match(re)); } function makeRegExp (str) { return migemo ? (str.indexOf('/') == 0) ? new RegExp(str.slice(1), 'i') : migemo.getRegExp(str) : new RegExp(str, 'i'); } function filteredLinks (word) { if (word.match(/^\s*$/)) return []; let re = makeRegExp(word); return [it for each (it in content.document.links) if (lmatch(re, it))]; } function charToWhere (str, fail) { const table = { f: liberator.NEW_TAB, t: liberator.NEW_TAB, n: liberator.NEW_TAB, b: liberator.NEW_BACKGROUND_TAB, c: liberator.CURRENT_TAB, w: liberator.NEW_WINDOW, }; return (str && table[str.charAt(0).toLowerCase()]) || fail; } const WHERE_COMPLETIONS = ['f', 't', 'n', 'b', 'c', 'w']; let (foihandle) { commands.addUserCommand( ['fo[pen]', 'filteropen'], 'Filtered open', function (args, bang) { let where = charToWhere(args['-where'], bang ? liberator.NEW_TAB : liberator.NEW_BACKGROUND_TAB); let [i, links] = [1, filteredLinks(args.join(''))]; if (!links.length) return; liberator.open(links[0].href, where); if (links.length <= 1) return; let interval = (args['-interval'] || liberator.globalVariables.fopen_default_interval || 1) * 1000; foihandle = setInterval(function () { try { liberator.open(links[i].href, where); if ((++i) >= links.length) clearInterval(foihandle); } catch (e) { clearInterval(foihandle); } }, interval); }, { bang: true, argCount: '1', options: [ [['-interval', '-i'], commands.OPTION_INT], [['-where', '-w'], commands.OPTION_STRING], ], completer: function (context, arg, bang) { context.title = ['URL', 'Text Content']; context.completions = filteredLinks(context.filter).map(function (it) ([it.href, it.textContent])); }, }, true ); commands.addUserCommand( ['stopfilteropen', 'stopfo[pen]'], 'Stop filtered open', function () { clearInterval(foihandle); } ); } let ( lolinks = [], looptions = [ [['-where', '-w'], commands.OPTION_STRING, null, WHERE_COMPLETIONS] ] ) { commands.addUserCommand( ['lo[pen]', 'linkopen'], 'Filtered open', function (args, bang) { let where = charToWhere(args['-where'], bang ? liberator.NEW_TAB : liberator.CURRENT_TAB); let numUrl = args[0]; let m = numUrl.match(/^(\d+),(.+)$/); if (m) { let link = lolinks[parseInt(m[1], 10)]; if (link) buffer.followLink(link, where); else liberator.open(m[2], where); } else { liberator.open(numUrl, where); } }, { argCount: '1', options: looptions, bang: true, completer: function (context) { let last = context.contextList.slice(-1)[0]; lolinks = filteredLinks(last.filter); context.title = ['URL', 'Text Content']; context.advance(last.offset - last.caret); context.completions = lolinks.map(function (it, i) ([i + ',' + it.href, it.textContent])); } }, true ); } })(); // vim:sw=2 ts=2 et si fdm=marker: