今年初めての投稿で縁起がよくない記事だが、どうしても解決しないので投稿しようと思う。
先日windows10のPCを購入し、開発環境を整えようとしたのだが、今まで使ってきたEmacsがうまく動く方法を見つけることができなかった。その顛末をまとめようと思う。
1.bash on windows
windows10の最大の目玉といっていい機能が、bash on windowsだ。これはwindowsでネイティブなbashやapt-getが使える機能で、当然Emacsも使用することができる。
bash on windowsでEmacsやその他gccなどソフトを使うことができた。しかしひとつ決定的に困ったものがある。それは、cygwinでの「cygstart」に相当するものがないということだ。
cygwinでは、たとえば
cygstart ./
でカレントディレクトリをエクスプローラで開くことができる。またパスを指定すればそこを開くこともできるし、ファイルを指定すれば対応するソフトで開くことができる。bashでもexplorerを直接うちこめばエクスプローラを開くことができる。しかしbash on windowsはdosのシステムとパスの指定の仕方がことなるので、パスを指定しても読み込めず開けないのである。
また、表記が欠けたりとbash on windows自体まだ発展途上な部分がある。
追記(2017.09.17):Powershellでは次のコマンドでカレントディレクトリをエクスプローラで開くことができる。
explorer .
2.MSYS2
結局bash on windows以外の環境をいれることになったのだが、MSYS2がいいと聞いたので使ってみることにした。
MSYS2はMinGW系のパッケージで、minttyというcygwinと同じターミナルソフトからLinuxライクなターミナル環境を構築するパッケージだ。
これでpacmanを使ってEmacsを入れてみた。すると別ウィンドウで開くGUIでは使うことができた。
Emacsをインラインで使う場合は-nwというオプションをつければよい。しかしそれではエラーメッセージが出て起動できなかった。
調べたところ、win8からminttyの入出力の問題で対話型ソフトがほとんど使えないらしい。しかしそれを修正するwinptyというラッパーができているとのことだったのでインストールして使ってみた。すると起動できずにプロンプトに戻ってしまい、その上入出力がめちゃくちゃになってしまった。pythonなどに対しても同じことになったのでwinptyの問題らしく、winptyをpacmanではなくソースからビルドしたりもしてみたが、直らなかった。それにそもそもMSYS2もcygstartは使えない(ただし調べていないだけで調べればそれっぽい機能はあるかもしれない)。
2017.02.08 追記:windows7でも同様の問題を確認した。さらにMSYS2ではリンクを張るのが少々面倒なようだ。
3.cygwin
というわけで、結局cygwinを入れてみた。インストールの仕方はwin7と変わらない。インストールはうまくいった。しかし動作はもっさりする。
まずはapt-cygからEmacsを入れてみたが、起動せずにそのままプロンプトに戻るという状態だった。しかしpythonは使うことができた。
cygwinにもwinptyをビルドしてみたが、MSYS2の場合と同じことになった。またソースからビルドもしてみたがうまくいかなかった。
4.AtomとEmacs
というわけでEmacsをCUIで使うのは断念して、Atomに乗り換えてみることにした。
Atomもインラインで使うことはできないが、コマンドラインから起動することができる。なので現在はcygwinからatomを起動して使っている。
AtomにはEmacsに近いキーバインドを使うパッケージatomic-emacsが用意されている。コメントアウトするときのM-;などが異なるが、大まかには同じようなショートカットが使える。
というわけなので、もしwindows10のLinuxライクなシステムでいい感じにEmacsをCUIで使える方法を知っている人がいたら教えてください。
2017.10.14 追記
BoWのアップデートで解決しました。
bluepost69-tech.hatenablog.com