// PLUGIN_INFO {{{ let PLUGIN_INFO = xml` opener opener --- URL 移動時にそのURLが既に開かれていたら、そのタブに移動する 1.0.0 voidy21 anekos https://github.com/vimpr/vimperator-plugins/raw/master/opener.js 2.3 2.3 `; // }}} // INFO {{{ let INFO = xml` voidy21 anekos

URL 移動時にそのURLが既に開かれていたら、そのタブに移動する

`; // }}} /* * Original version by voidy21: * http://vimperator.g.hatena.ne.jp/voidy21/20100119/1263907211 * http://vimperator.g.hatena.ne.jp/voidy21/20100127/1264542669 */ (function () { let U = liberator.plugins.libly.$U; function jump (_url) { let index = 0; let url = util.stringToURLArray(_url).toString(); if (url == buffer.URL){ return false; } for each ( [,tab] in tabs.browsers ) { if (url == tab.currentURI.spec){ tabs.select(index, false, true); return true; } ++index; } return false; } "open tabopen edit".split(/\s/).forEach( function (name) { let command = commands.get(name); if (!command) return; U.around( command, "action", function (next, args) { let url = args[0].string; if (!(url && jump(url))) return next(); } ); } ); //buffer.followLink()を変更 //hint-a-hint時[f,F]に対象のタブが既に開いてあったらjump let (ignore = false) { let ignoreBlock = function (block) { ignore = true; let result = block(); ignore = false; return result; }; U.around( buffer, "followLink", function (next, args) { return ignoreBlock(function () { let [elem,] = args; let url = elem.href; if (!(url && jump(url))){ liberator.echo("Now Loading... " + url); return next(); } }); } ); document.addEventListener( 'click', function (event) { if (ignore) return; let e = event.target; if (e && e.tagName.match(/^a$/i) && e.href && jump(e.href)) { event.preventDefault(); event.stopPropagation(); } }, true ); } U.around( quickmarks, 'jumpTo', function (next, args) { let qmark = args[0]; let url = quickmarks._qmarks.get(qmark); if (!(url && jump(url))) { return next(); } } ); })();