1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/**
* ==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
**/
(function(){
var XMigemoCore = Components.classes["@piro.sakura.ne.jp/xmigemo/factory;1"]
.getService(Components.interfaces.pIXMigemoFactory)
.getService("ja");
var XMigemoTextUtils = Components.classes["@piro.sakura.ne.jp/xmigemo/text-utility;1"]
.getService(Components.interfaces.pIXMigemoTextUtils);
function replaceFunction(target,symbol,f,originalArguments){
var oldFunction = target[symbol];
target[symbol] = function() f.apply(target,[oldFunction.apply(target,originalArguments || arguments),arguments]);
}
replaceFunction(liberator.modules.completion,"buffer",function(oldResult,args){
var filter = args[0];
var migemoPattern = new RegExp(XMigemoCore.getRegExp(filter));
return [0,oldResult[1].filter(function([value,label]) migemoPattern.test(value) || migemoPattern.test(label))];
},[""]);
let orignalFilter = liberator.modules.completion.filter;
liberator.modules.completion.filter = function(array,filter,matchFromBeginning,favicon){
if (!filter)
return orignalFilter.apply(this, arguments);
let original = XMigemoTextUtils.sanitize(filter);
let migemoString = XMigemoCore.getRegExp(filter);
migemoString = original + "|" + migemoString;
if(matchFromBeginning)
migemoString ="^(" + migemoString + ")";
var migemoPattern = new RegExp(migemoString,"i");
let result = [];
for (let [,item] in Iterator(array)){
let text = completion.getKey(item, 'text');
let complist = text instanceof Array ? text : [text];
for (let [,compitem] in Iterator(complist)){
if (migemoPattern.test(compitem) || migemoPattern.test(item[1])){
item.text = compitem;
result.push(item);
break;
}
}
}
return result;
};
})();
|