Paper Plane xUI(PPx)に一発でソースコード検索&表示できる「peco」改を移植した - Qiita に触発されて考えていたら昔やりたかったことができるようになった話。
やりたかったのは、howm のファイルをインクリメンタルサーチしたいというもの。
以下のスクリプトを *script ppxpero.js9,C:\User\hokorobi\howm,^^=\s
と実行してやると、howm のタイトルが peco に列挙されるので migemogrep で migemo も使える。(コマンドプロンプトでは ^ がエスケープ文字なので二個続ける)
*script ppxpero.js9
で 「peco」改のようにも動く。
ppxpero.js9
//!*script
// ディレクトリ配下のファイルを peco で選択してエディタで開く
// PPx 1.53+3 x64 + Script Module R16
var args = PPx.Arguments;
// 第一引数があればそのディレクトリへ移動して検索
// 移動せずにディレクトリを指定すると
// - peco のファイルパス表示が長くなりすぎる。
// - ファイルパスと行数を分離する際に : を分割文字に使っているので C:\ などの処理が面倒。
if (args.length > 0) {
var dir = args(0);
PPx.Execute('*jumppath ' + dir);
}
// 第二引数があれば peco の表示対象を絞り込み
var ptquery = '.';
if (args.length > 1) {
ptquery = args(1);
}
// 第三引数があれば peco の初期クエリとする
var pecoquery = '';
if (args.length > 2) {
pecoquery = ' --query ' + args(2);
}
// peco 実行
// peco の出力は UTF-8 なので CP932 へ変換してクリップボードへ渡す
// FIXME: 文字コード変換に iconv より軽い方法を使いたい
// FIXME: クリップボードを汚したくない
PPx.Execute('%Obsq pt /nogroup /nocolor /S /e ' + ptquery + ' .\ | peco' + pecoquery + ' | iconv -f UTF-8 -t CP932 | clip');
// クリップボードからファイルパスと行数を取り出してエディタへ渡す
var path_line = PPx.Clipboard;
if (path_line == '') {
PPx.Quit(-1);
}
var list = path_line.split(':');
PPx.Execute("%'editor' %'editorL'" + list[1] + ' "' + list[0] + '"');