mintty で pt, peco が使えない備忘録

Environment
Photo by hyt.

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 だと思う(なんか違う気もしますが).元サイトはそれぞれ

GitHub - monochromegane/the_platinum_searcher: A code search tool similar to ack and the_silver_searcher(ag). It supports multi platforms and multi encodings.
A code search tool similar to ack and the_silver_searcher(ag). It supports multi platforms and multi encodings. - monoch...
GitHub - peco/peco: Simplistic interactive filtering tool
Simplistic interactive filtering tool. Contribute to peco/peco development by creating an account on GitHub.

で,MacOS で homebrew を使っているのなら,

$ brew install pt peco

するだけでインストールできます.使ってみるとすごく便利なので,私の日常環境の Windows + Cygwin でも使いたい(私の場合,デスクトップは Windows,モバイルは MacOS なんです)と思ったのですが,これは簡単ではありませんでした.ということで,その作業記録です.

Google Go の設定

これは必須ではありません.予めコンパイルされているバイナリだけで pt も peco も使えますし,実際,元ページでバイナリが提供されています.

しかし,Google Go には,go get という外部ライブラリ,コマンドを導入するコマンドが用意されており,ソースコードから簡単に色々なコマンドをインストールできます.ということで,go get で pt と peco を導入することにしました.

まず,Google Go のインストールから.インストーラーは,

The Go Programming Language
Go is an open source programming language that makes it simple to build secure, scalable systems.

からダウンロードできます.私がダウンロードしたのは,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 の制限(というか仕様)が原因で詳しくは,

スタッドレス交換を激安特価で!ブランド志向から価格重視の30代サラリーマン必見のタイヤショップはズバリこれだ!
車業界のプロも選択。圧倒的な商品数と販売実績のスタッドレスタイヤをお探しの方へ

あたりをご覧ください.peco の FAQ にも,

Does peco work on (msys2|cygwin)?

No. https://github.com/peco/peco/issues/336#issuecomment-243939696

と書かれており,参照先を見てみると,winpty.exe の利用が示唆されています.ということで,winpty.exe を入れないといけないのですが,残念ながら元ページ

GitHub - rprichard/winpty: A Windows software package providing an interface similar to a Unix pty-master for communicating with Windows console programs.
A Windows software package providing an interface similar to a Unix pty-master for communicating with Windows console pr...

にはバイナリの提供は無く,自分でコンパイルしないといけません.

Cygwin でコンパイルする場合は,

  • mingw64-i686-gcc-g++ or mingw64-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 の由来なのかな?)なので,これらを使った方が良さそうですね.

EnvironmentGoogle
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました