銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

Gitkの文字化けはAnacondaのせいだった

f:id:takamints:20191203150146p:plain

Gitのコミットログをグラフィカルに見せてくれるGitkですが、いつのころからか、Arch Linux の端末で実行すると、ウィンドウが開くまで数分かかり、さらに日本語が文字化けしてるという状態になっていました。

メインマシンではなかったので、見て見ぬふりを続けてきましたが、先月メモリを16Gバイトに4倍増して、機械学習のお勉強用などとしても使う機会が増えてくると「さすがにこれ以上は放置できない看過できないナントカセネバ!」とイライラしはじめ鼻息荒く調べてみると、割とあっさり「どうやらGitよりも先にインストールしていたAnacondaのせいだったのね」と判明しました。

まあAnacondaがすべて悪いかというと、そうも言いきれないのですが・・・とにかく以下の方法でGitkの文字化けは解消しました。

目次

Gitkの文字が化け化けだ

f:id:takamints:20191203124752p:plain

Gitリポジトリのコミットログじゃなくてウィンドウ自体の日本語が化けてるんですよね。

\u… なんて表示されているのはUnicode文字コードでしょう。 フォントが見つからないのかも。

2つのWishが混在するのが原因でした

GitkはWishを使います

Gitkは wish というコマンドを使っているそうです。

wishはtkパッケージに含まれるコマンドで /usr/bin/wish に配置されるTcl/Tkのインタプリタ。 対話的に画面を作れるツールですね。

ArchLinux公式のGitの説明では、GitkやGitGuiなどのGuiツールを使うにはこの tk パッケージが必要だと書いてあります。

AnacondaもWishを使います

Anacondaもwishを使っているそうです。 しかもAnacondaは、ユーザーのホームディレクトリ以下に独自?の wish をセットアップし、かつ /usr/bin のwish よりも独自のwishが優先的に実行されるように .bashrc を自動的に書き換えてしまいます(↓)。

# added by Anaconda3 Installer
export PATH="/home/<user>/anaconda3/bin:$PATH"

/usr/bin は $PATHに含まれているので、それより先にAnacondaのbinのwishが呼ばれてしまいます(<user>はユーザー名に読み替えてください)。

ワタシはそもそもtkをインストールしていませんでしたが、それでもGitkがなんとか起動していたのは、Anacondaがセットアップしたwishが呼ばれていたからなんですね。

対策は?

tkをインストールする

tkをインストールするには、以下のようにすればOKですが、

$ sudo pacman -S tk

.bashrcで/usr/bin/wishが優先されるように設定書き換え

というとで、.bashrcを以下のように書き換えて、 /usr/bin/wish が優先されるようにします。

# added by Anaconda3 Installer
export PATH="$PATH:/<user>/anaconda3/bin"

動作確認

ターミナルを立ち上げなおして、ちゃんと設定できたか確認しましょう。

まずは、 /usr/bin/ の wish が呼ばれるかどうか。

$ which wish
/usr/bin/wish

そしてGitk。

$ gitk --all&

↓即座に起動&文字化け解消!

f:id:takamints:20191203124220p:plain

まとめると

以下の対策で Gitkが即座に起動するようになり、文字化けも解消しました。

  • tkパッケージをインストール
  • Anacondaのwishではなく /usr/bin/wish が呼ばれるように .bashrc を設定

参考サイト

ja.stackoverflow.com