completer の返り血で補完リストが決定されるのではなくなりました。多分。
completer への第一引数のオブジェクト context の操作で補完リストを構築します。
completer: function (context, arg) { // 補完リストのカラムタイトル context.tile = ["name", "description"]; // 補完リストにアイテムを追加 context.completions = [['item1', '一個目だよ!'], ['item2', '二個目だよ!'], ['item3', '三個目だよ!']]; // cotext.completions.push([..]) はうまくいかなかった。 // 返り血は要らない! }
こうすると generate に突っ込んだ関数が別スレッドで動いてその値を補完リストに追加する?
どちらでも、特に代わりはなかった。
遅い処理なら違うかも。
completer: function (context, arg) { // 補完リストのカラムタイトル context.tile = ["name", "description"]; // 補完リストジェネレータを設定しているような気分 context.generate = function () { return [['item1', '一個目だよ!'], ['item2', '二個目だよ!'], ['item3', '三個目だよ!']]; }; // 返り血は要らない! }
bang
bang などは、
http://d.hatena.ne.jp/nokturnalmortum/20081127#1227757063
で書いた変更と共に、引数からはなくなりました。
しかし、第二引数の arg のプロパティとしてとれます。
completer: funciton (context, arg) { if (arg.bang) ...
自前補完編
list = 保管用の何かのリスト completer: function (args, bang) { let result = []; list.forEach (function (it) { if (it.indexOf(args) != -1) result.push([it, "説明"]); }); return [0, result];
といった補完であれば、下のように変更すればOK
completer: funciton (context, arg) { context.title = ["name", "description"]; let result = []; list.forEach (function (it) { if (it.indexOf(context.filter) != -1) result.push([it, "説明"]); }); context.completions = result;
completion オブジェクト利用編
大体、今まで文字列を渡してきたところに context を渡すようになる模様。
今まで通り、文字列を渡す物もある。
return completion.file(filter)
これが、
completion.file(context);
こうなる。
まだできたばっかなので
やっぱりやめ!とかあったら無駄になるかもね!
便利になるだけなので、それは無いと思うけど。
試しに
auto_source.js を対応してみた。
http://coderepos.org/share/changeset/24876/lang/javascript/vimperator-plugins/trunk