JAWS + WSL + WSLtty

タイトルのような環境でWSLを快適に使うためのメモ。なお、Mintty系のものならおなじなので、Git for WindowsとかMSYS2とかもみんなこの設定でいけるはずだ。

問題点

なにも設定しないでWSLを使うと、おそらくカーソル位置を取れなくて困る。あるいは、点字ディスプレイを使ってカーソルがない行を読もうとしたときに、強制的にカーソルがある行に戻されてしまうという現象が発生する。これをなんとか回避したい。また、Emacsを端末で使ったときに、点字ディスプレイの表示が乱れることがある。

では、なにが問題かと言うと、どうやらブリンクにある。ということで、紆余曲折あって(実際この記事も紆余曲折してるんだけど)おそらく下記の設定がベストなんじゃないかな?と思う。

WSLttyの設定<

  • 透明度はオフ
  • カーソルは「線」を選択(重要)
  • 点滅はオフ
  • ロケールはja_JP
  • フォントの文字セットはUTF-8

なお、Emacsはこれでもカーソルが点滅する。init.elに以下を書いて点滅を抑制。

(setq visible-cursor nil)
(blink-cursor-mode 0)

フォントに関しては設定する必要はないはずなのだが、実際に変更してみるとちょっとずつ動作が変化する。MSゴシックの10PT設定というのが王道なのだが、不具合があれば他のフォントにしてみると状況が変化するかもしれない。

でもって、Rictyというフォントを入れてみた。これはこれで正常である。見た目にもプログラマっぽくなったかな。

JAWS

  • フォントサイズから1文字が専有するピクセル数を求めて、これを「スペースのピクセル数」に設定
  • 上記に2.5位を掛けたものを「タブのピクセル数」に設定
  • 「左マージンのピクセル数」に、端末の最も左の文字が表示されているカーソル位置を設定(私は2だった)。

では、どうやって1文字の専有ピクセル数なんて調べるんだよお!という疑問にお答えしよう。

  1. 端末を起動する。プロンプトが出るよね。
  2. ここで、Alt+Deleteを押す。「PC カーソルアクティブ 193, 1354」のような読み上げがあるはずだ。数値はx,yなので、水平位置は193である。
  3. 半角スペースを1文字入力する。
  4. もう一度Alt+Deleteを押す。今度は「203, 1354」になった。
  5. 203-193=10 ってことで、半角スペースは10ピクセル。

同じ要領で、左マージンも求めてみよう。

  1. ターミナルを開く。
  2. 全画面にする。
  3. プロンプトが現れたら、Insert+テンキー-を押してJAWSカーソルをPCカーソルに合わせる。
  4. Homeキーを押す。これで、プロンプトの先頭文字にJAWSカーソルは動いたはずだ。念の為に左右矢印キーを使って確認しておく。
  5. Alt+Deleteを押す。「JAWS カーソルアクティブ 2, 181」などと言われる。水平地は2である。
  6. この値を「左マージンのピクセル数」として設定する。

だいたいこんな感じである。環境によってちょっとずつ違うかもしれないので、トライ&エラーで最適な値を見つけてほしい。