emacsのshellモードが文字化け?する

(2009年11月17日)
emacsのshellモードでlsコマンドを実行するとそのコマンド結果に文字化けというか訳のわからない文字が羅列されました。
(環境・バージョンはデスクトップ版ubuntu8.10にデフォルトでインストールされているemacsです)
日本語はしっかり表示されているので文字化けって訳ではないと思うけど文字化けっぽい文字が・・・まぁ実例を見ていただくのが一番わかりやすいと思うのでlsコマンドの結果を下に示します。
$ ls
[0m[0m#%2Amail%2A#26326Tee#[0m  [01;34mback[0m     [01;34mデスクトップ[0m  [01;34m画像[0m  [01;34m雛形[0m  [01;34m文書[0m
[01;36mExamp[0m               [01;34mho[0m  [01;34m音楽[0m          [01;34m公開[0m  [01;34m動画[0m
これを見るとスペースやタブが原因かな?って最初は思ったけど、「ls -l」コマンドはスペースは問題なく表示されたし・・・
これについてネットで調べてみたらどうやら色が問題だということがわかりました。端末のシェルではファイルは種類によって色分けされていますが、emacsのshellモードはこの機能には対応していないからです。
というわけで端末のカラーモードを設定している.bashrcファイルを編集する必要があります。.bashrcファイルはホームディレクトリにあります。
編集箇所は以下の部分です。
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi
「alias ls='ls --color=auto'」をコメントアウトします。
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    #alias ls='ls --color=auto'
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi
これでshellモードの文字化けが直りました。
$ ls
#%2Amail%2A#26326Tee#  back     デスクトップ  画像  雛形	文書
Examp	       ho  音楽	    公開  動画
ただこれだとlsコマンドのカラーモードを無効にしているだけなので、今度は端末シェルのlsコマンドのファイル名の色分けが無効になってしまいます。
端末シェルはカラーモードを有効、emacsのshellモードはカラーモードを無効にするには以下のように編集する必要があります。
if [ -x /usr/bin/dircolors ]; then
    eval "`dircolors -b`"
    if [ ${TERM} = "dumb" ] ; then
        alias ls='ls -F'
    else 
        alias ls='ls --color=auto'
    fi
    #alias dir='dir --color=auto'
    #alias vdir='vdir --color=auto'

    #alias grep='grep --color=auto'
    #alias fgrep='fgrep --color=auto'
    #alias egrep='egrep --color=auto'
fi
if文の条件式「${TERM} = "dumb"」の"dumb"はshellモードで「$echo $TERM」を実行した時の結果に置き換えてください。
Webサービス by Yahoo! JAPAN