Emacs の中で Shell が使えるようになる shell-mode ってのがあるのですが、僕の zsh はカスタムしすぎてプロンプトが正しく表示されなかったんです。Shell の設定がデフォルトだとちゃんと綺麗に表示出来るっぽいんですけど環境変数 LS_COLOR とかあると表示がグチャグチャになるんですよね。それで色々みてるウチに id:hiboma さんが解決策を見つけてくれたので試してみました。そうしたらid:hibomaさんとちょっと違う結果になったので書いておきます。
以下は解決策を試す前
っで id:hiboma さんに教えてもらったのが以下のコードで、これを .emacs に書き足す。elisp みた限りだとエスケープの処理と ansi-color の処理をしてるっぽい。っで Emacs を起動して M-shell ってすると以下の写真みたいに綺麗に表示してくれる。
;;; shell-mode でエスケープを綺麗に表示
(autoload 'ansi-color-for-comint-mode-on "ansi-color"
"Set `ansi-color-for-comint-mode' to t." t)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
でもなんでか RPROMPT の処理だけはしてくれない。ちょっとした確認用には問題なさげなんだけど気に入らないなぁ。それと Emacs Shell は 環境変数 TERM が emacs だったからカッコには $TERM を入れてみた。screen 使う時はウィンドウ数なんですけどね。さらにおまけなんですが、以下のコードを .emacs に入れておくと Terminal で使う Shell みたいにヒストリ補完出来るようになる。
;;; shell-modeで上下でヒストリ補完
(add-hook 'shell-mode-hook
(function (lambda ()
(define-key shell-mode-map [up] 'comint-previous-input)
(define-key shell-mode-map [down] 'comint-next-input))))
それで、どこが id:hiboma さんと違うのかと言うと、僕の場合は shell-mode の中で日本語使おうが、何しようが挙動がおかしくなることがないんですよ。僕は zsh で日本語使うためにバージョン上げたりとかしているのでその辺の違いなのかなぁと思ってみたり。デフォルトの zsh を読みにいってるとか。
今後の使い道ですけど、写真のように Terminal 上の screen の中で使うとかはあまり嬉しくない気がします。なにせ普通に shell のプロセス立ち上げればいいだけですし。嬉しい使い方としては、小さなものを Carbon Emacs で作った時にすぐに確認とかですね。Terminal 立ち上げるほどでもないけど、確認したいぜって時はたまにあるので。そんなヘビーに使いまわす設定ではないのかもしれないですね。Emacs 上で全部完結させたいって人にとっては便利だとおもいます。
