emacsのshellモードが文字化け?する
(2009年11月17日)
emacsのshellモードでlsコマンドを実行するとそのコマンド結果に文字化けというか訳のわからない文字が羅列されました。
(環境・バージョンはデスクトップ版ubuntu8.10にデフォルトでインストールされているemacsです)
日本語はしっかり表示されているので文字化けって訳ではないと思うけど文字化けっぽい文字が・・・まぁ実例を見ていただくのが一番わかりやすいと思うので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ファイルはホームディレクトリにあります。
編集箇所は以下の部分です。
これについてネットで調べてみたらどうやら色が問題だということがわかりました。端末のシェルではファイルは種類によって色分けされていますが、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モードはカラーモードを無効にするには以下のように編集する必要があります。
端末シェルはカラーモードを有効、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」を実行した時の結果に置き換えてください。
