aboutsummaryrefslogtreecommitdiffstats
path: root/migemo-find.js
diff options
context:
space:
mode:
authorsecondlife2009-03-02 13:25:20 +0000
committersecondlife2009-03-02 13:25:20 +0000
commit0096e7aec7234d215e59f18e89e7d3027b384631 (patch)
treecace25ed9160a216207b85c09b77bd2d9a8ce139 /migemo-find.js
parent823ed6313e876c044f47e72e63d3aa3cea421366 (diff)
downloadvimperator-plugins-0096e7aec7234d215e59f18e89e7d3027b384631.tar.bz2
XUL/Migemo 検索
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@30703 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'migemo-find.js')
-rw-r--r--migemo-find.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/migemo-find.js b/migemo-find.js
new file mode 100644
index 0000000..1aad6f9
--- /dev/null
+++ b/migemo-find.js
@@ -0,0 +1,89 @@
+var PLUGIN_INFO =
+<VimperatorPlugin>
+<name>{NAME}</name>
+<description>Replace default search to migemo.</description>
+<description lang="ja">ɸ½à¤Î¸¡º÷¤ò XUL/Migemo ¤ËÃÖ¤­´¹¤¨¤Þ¤¹</description>
+<minVersion>2.0pre</minVersion>
+<maxVersion>2.0</maxVersion>
+<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/migemo-find.js</updateURL>
+<author mail="hotchpotch@gmail.com" homepage="http://d.hatena.ne.jp/secondlife/">Yuichi Tateno</author>
+<license>MIT</license>
+<version>0.0.1</version>
+<detail lang="ja"><![CDATA[
+ɸ½à¤Î / ¤Ê¤É¤Î¸¡º÷¤ò XUL/Migemo ¸¡º÷¤ËÃÖ¤­´¹¤¨¤Þ¤¹¡£
+ƱÅù¤Îµ¡Ç½¤ò»ý¤Ä¥×¥é¥°¥¤¥ó¤È¤·¤Æ migemize_find ¤¬¤¢¤ê¤Þ¤¹¤¬¡¢
+migemo-find.js ¤Ï pIXMigemoFind ¤¬Ä󶡤·¤Æ¤¤¤ë XUL/Migemo ¤Î¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤òľÀÜÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
+
+== ToDo ==
+
+- migemo Àµµ¬É½¸½¤Ç¥Þ¥Ã¥Á¤·¤¿¥Ñ¥¿¡¼¥ó¤¹¤Ù¤Æ¤Ë¤­¤Á¤ó¤È¥Ï¥¤¥é¥¤¥È
+-- ¸½¾õ¤ÏºÇ½é¤Ë¥Þ¥Ã¥Á¤·¤¿Ê¸»úÎó¤Î¤ß¥Ï¥¤¥é¥¤¥È¤µ¤ì¤ë
+
+]]></detail>
+</VimperatorPlugin>;
+
+liberator.plugins.migemoFind = (function() {
+ let p = function(m) Application.console.log(m);
+
+ let evalWithContext = function(func, context) {
+ let str;
+ let fstr = func.toString();
+ if (fstr.indexOf('function () {') == 0) {
+ str = fstr.replace(/.*?{([\s\S]+)}.*?/m, "$1");
+ } else {
+ str = '(' + fstr + ')()';
+ }
+ return liberator.eval(str, context);
+ }
+
+ var XMigemoFind;
+ try {
+ XMigemoFind = Cc['@piro.sakura.ne.jp/xmigemo/find;1']
+ .getService(Ci.pIXMigemoFind);
+ } catch(ex if ex instanceof TypeError){}
+
+ if (!XMigemoFind) {
+ liberator.echoerr("XUL/Migemo not found. You should be install XUL/Migemo.");
+ return;
+ }
+
+ search.migemo = XMigemoFind.wrappedJSObject;
+ search.migemo.target = window.gBrowser;
+
+ if (!search._find)
+ search._find = search.find;
+ if (!search._findAgain)
+ search._findAgain = search.findAgain;
+
+ let setFound = function(f) {
+ liberator.eval('found = ' + f.toString(), search._find);
+ }
+
+ if (!search.migemoFindEvnetListener) {
+ search.migemoFindEvnetListener = search.migemo.document.addEventListener('XMigemoFindProgress', function(ev) {
+ if (!ev.foundTerm) {
+ liberator.echoerr("E486: Pattern not found: " + ev.findTerm, commandline.FORCE_SINGLELINE);
+ setFound(false);
+ } else {
+ setFound(true);
+ }
+ }, false);
+ }
+
+ evalWithContext(function () {
+ search.find = function (str) {
+ search.migemo.find(false, str, options["linksearch"]);
+ searchString = searchPattern = search.migemo.lastFoundWord;
+ }
+ }, search._find);
+
+ evalWithContext(function () {
+ search.findAgain = function (reverse) {
+ let migemo = search.migemo;
+ (!reverse) ? migemo.findNext(options["linksearch"]) : migemo.findPrevious(options["linksearch"]);
+ }
+ }, search._findAgain);
+ return this;
+})();
+
+