Cygwin の mintty で Google の Go 言語で書かれた pt とか peco とかを使ってみた備忘録です.一応使えるようにはなりましたが,今のところ実用にはなっていません.
pt, peco って何?
何かの件で Web を徘徊していたときに,peco とか pt とかあったので何だろうと思って調べてみると,
- pt: The Platinum Searcher
- peco: Simplistic interactive filtering tool
ということで,まぁ要するに,pt は超高速な ack の代わり(grep の代わり),peco はインクリメンタルサーチ可能な less だと思う(なんか違う気もしますが).元サイトはそれぞれ
で,MacOS で homebrew を使っているのなら,
$ brew install pt peco
するだけでインストールできます.使ってみるとすごく便利なので,私の日常環境の Windows + Cygwin でも使いたい(私の場合,デスクトップは Windows,モバイルは MacOS なんです)と思ったのですが,これは簡単ではありませんでした.ということで,その作業記録です.
Google Go の設定
これは必須ではありません.予めコンパイルされているバイナリだけで pt も peco も使えますし,実際,元ページでバイナリが提供されています.
しかし,Google Go には,go get という外部ライブラリ,コマンドを導入するコマンドが用意されており,ソースコードから簡単に色々なコマンドをインストールできます.ということで,go get で pt と peco を導入することにしました.
まず,Google Go のインストールから.インストーラーは,
からダウンロードできます.私がダウンロードしたのは,go1.7.1.windows-amd64.msi で,標準的な Windows のインストール形式のものです.Google Go のインストールディレクトリを標準の C:\Go から,C:\Opt\go に変更し,その後 Windows の環境変数 PATH に,
- C:\Opt\go\bin
- C:\Opt\go\local\bin
を追加することでコマンドプロンプトから go.exe が使えるようにしました.また,go get で導入される外部パッケージの導入ディレクトリが C:\Opt\local 以下となるよう,Windows 環境変数 GOPATH を C:\Opt\Go\local と設定しました.
これで Google Go の設定はとりあえず完了です.
pt と peco の導入
pt と peco の導入は go get で行います.具体的には,元ページに書かれている通り,コマンドプロンプト(もしくは Cygwin のターミナル)から
$ go get -u github.com/monochromegane/the_platinum_searcher/... $ go get github.com/peco/peco/cmd/peco
とするだけで,C:\Opt\go\local\bin に pt.exe と peco.exe がインストールされます.
winpty の導入
ここまでの作業だけだと,mintty on Cygwin で pt と peco が使えません(コマンドプロンプトからは使える.なお,pt は不完全ながら使える).これは,mintty の制限(というか仕様)が原因で詳しくは,
あたりをご覧ください.peco の FAQ にも,
Does peco work on (msys2|cygwin)?
No. https://github.com/peco/peco/issues/336#issuecomment-243939696
と書かれており,参照先を見てみると,winpty.exe の利用が示唆されています.ということで,winpty.exe を入れないといけないのですが,残念ながら元ページ
にはバイナリの提供は無く,自分でコンパイルしないといけません.
Cygwin でコンパイルする場合は,
mingw64-i686-gcc-g++
ormingw64-x86_64-gcc-g++
gcc-g++
make
が必要なので,無ければ Cygwin の setup.exe から導入します.以後の手順は,
$ git clone https://github.com/rprichard/winpty $ cd winpty $ ./configure $ make $ make install
で OK です.ただし,GNU のソフトウェアなんかとは違い,./configure は一瞬で終わります.あまりに速いので私の場合エラーか何かで以上終了したのかと思いました../configure に何もオプションを与えなければ,/usr/local 以下に winpty.exe がインストールされます.
pt と peco の利用
pt と peco は,シェルを winpty.exe でラップしてやることで利用可能になります.要するに,以下の様に使えば良い.
$ winpty zsh $ ps ax | peco
もちろん毎回こうやるのは面倒なので,はじめから mintty を
$ C:\Opt\cygwin64\bin\mintty.exe winpty zsh -l
のように起動しても良いのですが表示が崩れることが多いです.しかしこれは解決が面倒そうなので(と言うか winpty の動作を見る限りこの方向での完全な解決は無理なんじゃないかと思う.Google Go が cygwin 上で動けば良いんですけどね)放置することにします.
なお,peco が winpty.exe で使えないというページをいくつか見かけたのですが,恐らくこれはシェルを winpty でラップしていないからなんじゃないかなと思います.もしかしたら bash だとダメなのかも知れませんが,これは試していないのでよくわかりません.
調べてみると ag と percol が同じような感じ(と言うか,pt と peco の由来なのかな?)なので,これらを使った方が良さそうですね.