Tera Term経由でemacsを使う場合に行がずれる問題


Tera Term経由でemacsを使っていると、ミニバッファのリサイズが起きて行方向の表示が崩れることがある。
たとえば、通常はこのように見えているのだけど…

何かの拍子にこんな感じになってしまう。

ちなみに上記は、4行めでFlycheckの警告が出ている import にカーソルを移動した結果、「Data.Textimportしているけどコード中では使われてないよ」というメッセージがミニバッファに表示されて、emacsがとち狂った様子。カーソル位置にはmainという文字列があるように見えるし、左端の行数表示も6を指しているが、実際にはここは1枚目のキャプチャにおける4行めの先頭であり、importがある。

考えられる原因は以下のような感じだろう。

  • Tera TermのTermTypeと、サーバ側の環境変数TERMは一致しているか?
  • Tera TermのTerminalSizeと、サーバ側のttyが認識している画面の高さ(stty -aの結果)と、emacsが認識している画面の高さ((display-pixel-height)の評価結果)はすべて一致しているか?

しかし、それぞれ調べてみても何も問題がないので、仕方なく「emacsのミニバッファの高さが変わらない」ように設定した(つまり、高さの最大値を1にした)。

(setq max-mini-window-height 1)

これにより、ミニバッファのリサイズが原因で行がずれ、それにより表示が崩れることは回避できた。ちなみに、Flycheckはデフォルトではミニバッファに表示しきれない情報がある場合に新しいバッファを作るようだが、これだと行が崩れることはないので、やはり何らかの理由でミニバッファの高さ情報をうまく処理できていないらしい。

この回避方法だと、当然、ミニバッファのリサイズ以外の原因で起こる行ズレには耐えられない。Tera Termとemacsの間で根本的に何が起きているのか知っている方がいたら教えてください。