diff options
Diffstat (limited to 'migemo_completion.js')
-rw-r--r-- | migemo_completion.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/migemo_completion.js b/migemo_completion.js new file mode 100644 index 0000000..b3ede9f --- /dev/null +++ b/migemo_completion.js @@ -0,0 +1,51 @@ +/**
+ * ==VimperatorPlugin==
+ * @name migemo_completion.js
+ * @description replace completion function with using Migemo
+ * @description-ja 補完関数をMigemoを使用したものに取り替える
+ * @author Trapezoid
+ * @version 0.2
+ * ==/VimperatorPlugin==
+ *
+ * Support commands:
+ * - :buffer
+ * - :sidebar
+ * - :emenu
+ * - :dialog
+ * - :help
+ * - :macros
+ * - :play
+ * and more
+ **/
+var XMigemoCore;
+try{
+ XMigemoCore = Components.classes['@piro.sakura.ne.jp/xmigemo/factory;1']
+ .getService(Components.interfaces.pIXMigemoFactory)
+ .getService("ja");
+}
+catch(ex if ex instanceof TypeError){}
+
+function replaceFunction(target,symbol,f,originalArguments){
+ var oldFunction = target[symbol];
+ target[symbol] = function() f.apply(target,[oldFunction.apply(target,originalArguments || arguments), arguments]);
+}
+
+replaceFunction(liberator.completion,"buffer",function(oldResult,args){
+ var filter = args[0];
+ var migemoPattern = new RegExp(XMigemoCore.getRegExp(filter));
+ return [0, oldResult[1].filter(function([value,label]){
+ return migemoPattern.test(value) || migemoPattern.test(label)
+ })];
+},[""]);
+liberator.completion.filter = function(array,filter,matchFromBeginning){
+ if(!filter) return array;
+
+ var migemoString = XMigemoCore.getRegExp(filter);
+ if(matchFromBeginning)
+ migemoString ="^(" + migemoString + ")";
+ var migemoPattern = new RegExp(migemoString);
+
+ return array.filter(function([value,label]){
+ return migemoPattern.test(value) || migemoPattern.test(label)
+ });
+}
|