web-dev-qa-db-ja.com

破損したgnu-screenセッションがUTF-8を正しく表示しない

(ディスプレイの問題におけるEmacsの役割を明確にするために編集されました。)

私の現在のgnu-screenセッションが何らかの理由で破損し、EmacsがUTF-8文字を正しく表示できません。

新たに開始されたgnu-screenプロセスでは、EmacsはUTF-8文字を適切に表示することを確認しましたが、現時点では、破損したgnu-screenセッションを新しいものに置き換えることは非常に混乱を招き、代わりに

この破損したgnu-screenセッションの問題をさらにトラブルシューティングし、うまくいけば修正する方法を探しています。


FWIW、問題を診断するためにこれまでに行ったことの説明を含め、以下に背景を詳しく説明します。

私はこのgnu-screenセッションを数日前に私のOS Xワークステーションで開始しました

% screen -U

...(いつものように)。それ以来、私はこのセッションをいくつかのマシンから(おそらく最初に職場のワークステーションにssh-した後)再接続しました。

% screen -U -dR

(繰り返しますが、これは私がいつもしていることです)。今朝正確に今朝、私のワークステーション(gnu-screenプロセスが実際に実行されているマシン)で作業しました。

今日、このgnu-screenセッションを作成してから初めて、ASCII以外のUTF-8文字を多く含むファイルを操作する必要がありました。そのとき、このgnu-screenセッションは、これらすべての文字を?として表示し、表示が使用できなくなったため、何らかの理由で破損したに違いないことを発見しました。

(すでに触れたように、これらのUTF-8が豊富なファイルは、新しく開始されたgnu-screenセッションによって正しく表示されるため、表示の問題はここにある特定のgnu-screenセッションにあると確信しています。 「破損」と呼んでいます。また、???セッションを接続したすべての端末に「gnu-screendisplay」が表示されることを確認したので、端末プログラムのホスティングに問題はありません。 gnu-screenセッション。最後に、私alsoは、問題が特定のEmacsセッションにあるのではないことを確認しました:破損したgnu-screenセッション、every新しいEmacsセッションは、UTF-8文字を?として表示します。これは、特定のEmacsセッションでの問題に反対します。)

実行してutf8onであることを確認しました

:utf8 on on

:infoの出力は次のとおりです。

(1,5)/(210,52)+10000 +(-)flow app log UTF-8 0(zsh)

そして、FWIW:

% /usr/local/bin/screen --version
Screen version 4.00.03 (FAU) 23-Oct-06

また、new

この問題をトラブルシューティングするために他に何ができますか?


PDATE: DravSloanとStephaneChazelasの両方が私のロケール設定について質問しました:

% locale
LANG=
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL=

現在、OS Xの場合、ロケール関連の変数は設定していません。

Linuxシステムでは、私の.zshenvは設定されます

export LANG=en_US.utf8
export LC_ALL=en_US.utf8

...しかし、Darwinの.zshenvに同じ行を配置すると、「ロケールの設定に失敗しました」というエラーメッセージが表示されます。 Darwin/Lionの正しいロケール設定を見つける問題について、私は数時間頭蓋骨を叩いたことを漠然と覚えています。 「何も設定しない」が問題の「最低のひどい」解決策として浮上し、結局のところ、明示的なロケールがない場合でも、少なくとも新しいgnu-screenセッションはUTF-8文字を正しく表示します設定。しかし、明らかにダーウィン/ライオンでロケールを適切に設定する方法を理解する必要があります...

PDATE2: OK、上記のエラーの理由を理解したと思います。ダーウィン/ライオンでは、文字列en_US.utf8が無効です。代わりにen_US.UTF-8にする必要があります。

6
kjo

実行時に同じ問題が発生しました:

git clone https://github.com/jwiegley/git-scripts.git
cd git-scripts
Perl git-forest 

これをテストとして使用しました。基本的に、utf8が適切に設定されていれば、Nice行が表示されます。そうでない場合は、醜いボックスや文字を取得します。

解決策は、LC_ALLen_US.UTF-8に設定する必要があることです[〜#〜] before [〜#〜]新しい画面セッションを開始します。スクリーンセッションを作成した後、私はそれをするのに疲れて、運がありませんでした。

これを実行するために私が実行した手順は次のとおりです。

1)localeを実行して、現在の設定を表示します。私はこれを手に入れました(これは私が問題を抱えていた理由を説明しています:

LANG=en_US.UTF-8
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

2)新しい画面セッションを作成する前に、LC_ALLen_US.UTF-8に再定義する必要があります

csh Shellを使用している場合

setenv LC_ALL en_US.UTF-8

bash Shellを使用している場合

export LC_ALL="en_US.UTF-8"

localeを再度実行して、LC_ALLが正しく設定されていることを確認します。

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

4)新しい画面セッションを実行してgit-forestテストを実行すると、Nice行が表示されます

4
robster_guy