/* use strict */ XML.ignoreWhitespace = false; XML.prettyPrinting = false; var INFO = ; (function(){ var gLastCommand; // EventListener内のエラー表示用。 // event.findTermが空っぽなのでこれで代用 // XUL/Migemoの取得 var XMigemoFind; try { XMigemoFind = Cc['@piro.sakura.ne.jp/xmigemo/find;1'] .getService(Ci.pIXMigemoFind); } catch(ex if ex instanceof TypeError){} if (!XMigemoFind){ dactyl.echoerr("XUL/Migemo not found. You should be install XUL/Migemo."); return; } var migemo = XMigemoFind.wrappedJSObject; migemo.target = window.gBrowser; // インクリメンタル検索中にマッチしない場合のエラーを表示するためのEventListener migemo.document.addEventListener('XMigemoFindProgress', function(){ if (!migemo.foundRange){ dactyl.echoerr("E486: Pattern not found: " + gLastCommand, commandline.FORCE_SINGLELINE); } else { commandline.clear(); } }, false ); // 検索語の先頭が'\'の場合には通常の検索 // それ以外はMigemo検索 function migemoFind(command, backward){ if (command.indexOf('\\') == 0){ migemo.disable = true; rangefinder.find(command.substr(1), backward); } else { migemo.disable = false; // ?で逆方向に検索できないのは仕様です migemo.find(false, command, options["linksearch"]); } return; } // 上書きしたfindAgainからもとのrangefinder.findAgainを呼びたいのでコピー var rangefinderOrig = Object.create(rangefinder); rangefinderOrig.findAgain = rangefinder.findAgain; // rangefinderオブジェクトを上書き overlay.overlayObject(rangefinder, { onChange: function onChange(command){ if (rangefinder.options["incfind"]){ migemoFind(gLastCommand = command); } }, onSubmit: function onSubmit(command){ if (!(gLastCommand = command) && rangefinder.lastFindPattern){ migemoFind(rangefinder.lastFindPattern, rangefinder.backward); rangefinder.findAgain(); return; } if (!rangefinder.options["incfind"] || !rangefinder.rangeFind || !rangefinder.rangeFind.found){ rangefinder.clear(); migemoFind((gLastCommand = command) || rangefinder.lastFindPattern, rangefinder.backward); } if (rangefinder.options["hlfind"]){ if (migemo.disable) rangefinder.highlight(); else rangefinder.clear(); } rangefinder.rangeFind.focus(); }, findAgain: function findAgain(reverse){ if (migemo.disable){ rangefinderOrig.findAgain(reverse); } else { if (migemo.lastFoundWord) (!reverse) ? migemo.findNext(options["linksearch"]) : migemo.findPrevious(options["linksearch"]); } } }); })();