windows で emacs shellを使う

先日からpython勉強し始めたのだが、なんとなくcygwin環境で開発していました。
実は今までcygwinはxで接続する用とrsyncするためぐらいにしか使っていませんでした。
開発環境として使うのは今回が初めて。
で、cygwinというかDOSプロンプトの都合上、横幅を大きくするのすら一苦労…さすがにこの環境は辛い。
cygwin上でのXも試してみたのですが今一使いづらい。
そもそも、windows用のemacs入れてるんだから、そのshell使うのが一番だよね、というのが今回の出発点。

ところが、emacs起動してM-x shellとやっても起動しない。child processがどうたらとか言われてしまいました。
そこでhttp://sakito.jp/emacs/emacsshell.htmlを参考に、windowsemacsでshellモードを設定してみました。

最初にやったのは、fakecygpty(http://www.meadowy.org/meadow/browser/trunk/nt/fakecygpty.c)をコンパイルする+パスの通った場所に置く+名前変えたのを作るです。

gcc -o fakecygpty.exe fakecygpty.c
cp fakecygpty.exe f_zsh.exe
cp fakecygpty.exe f_bash.exe
cp fakecygpty.exe f_ssh.exe

ですね。これらを適当なパスの位置に置きます。これがwindowsのなのかcygwinのなのか分からなかったので、チキンにもどっちもパスが通ってる位置に置きました。
あとは以下を、.emacsに書いて終了。

(defun skt:shell ()
(or (executable-find "f_zsh") ;; Emacs + Cygwin を利用する人は Zsh の代りにこれにしてください
(executable-find "f_bash") ;; Emacs + Cygwin を利用する人は Bash の代りにこれにしてください
(executable-find "cmdproxy")
(error "can't find 'shell' command in PATH!!")))

;; Shell 名の設定
(setq shell-file-name (skt:shell))
(setenv "SHELL" shell-file-name)
(setq explicit-shell-file-name shell-file-name)

(set-language-environment 'utf-8)
(prefer-coding-system 'utf-8)

M-x shellで無事起動できました。
本当は他にも設定しなければいけないこととかあるみたいなんですが、とりあえず動くので気にしないことにします。
コーディングとテストぐらいならshellの機能をバリバリに使ってということもないですしね。