Playing with mlterm #3

背景をスケスケにする

mltermで何ができるかは、だいたいmanに書いてあるのでまずはそれを読むべし。それによると、まず –depth というコマンドラインスイッチ及び depth という ~/.mlterm/main に書ける設定項目があり、それによってスクリーンの色深度を指定する。

   --depth=value
          Specify visual depth. (8,16,24,32) If depth is 32, you can enable semi-transparency by specifying opacity as the value of --alpha option or "rgba:RR/GG/BB/AA" as the value of --bg option.

そして、これを32にするとalphaオプションや、背景色に対するアルファ値込みの色指定が有効になるそうだ。

また、これはとは別に–transbg / use_transbgというフラグがあり、これにより疑似透過が有効になるとのこと。疑似って?

ということで mainファイルにいろいろ書き込む方法でやってみると、depthを32にし、bg_colorをrgba:RR/GG/BB/AA 形式で指定すると確かにスケスケになるようだ。一方alpha の効果はなかった。また、use_transbgをいずれの値にしても特に変化はなかった。少しドキュメントとの乖離があるが、これがおま環なのか、あるいはwayland環境だとこういう動作なのかは分からない。

ウィンドウのサイズ、表示位置を指定する

–geometry / geometry というオプションがあり、WIDTHxHEIGHT+LEFT+TOPの形式で指定できる。また、inner_borderというCSSで言うところのpaddingみたいなオプションでウィンドウの端から実際に文字が描写される領域までの間隔をピクセル数を指定できる。なお単純な10進数値の他に\d+,\d+という形式も受け付けて、その場合はそれぞれの数値がいわゆるpaddingLeftとpaddingTopに相当する。

Playing with mlterm #2

ということでmltermで遊んでみる。

アイコンを変更する

mltermのアイコンはmlterm-commonパッケージに収められており、/usr/share/pixmaps に配置される。だいこん感。

惜しいのは解像度が最大でも48×48で、現在の環境だとぼけぼけに拡大して表示されてしまう。とりあえずmlterm_48x48.xpmを補完なしで2倍に拡大してそれを使うようにした。もともとピクセルアート的なアイコンなのでそこまで違和感はない。

mltermのアイコンは/usr/share/applications/mlterm.desktopファイル内で指定されている。ちなみにアイコンをフルパスで指定しなかった場合にどこが参照されるかは定義されている

Playing with mlterm

端末エミュレータの話。基本的にvimが起動しっぱなしのコード書き専用端末はBlack Box(のnightly版)。他方、割と雑用的に使う端末は以前の記事の通りWezTermを試している。

WezTermのprosのひとつは、とにかく設定の自由度が高い上にluaでなんでもできてしまう点だろう。Gnome TerminalだとAlt+1〜Alt+9で開いたタブを直接選択する機能があるが(Black Boxもそうである)、WezTermにはない。ないが、単にそういうキーバインディングを設定すれば対応できてしまう。よい。

一方でよくない点もいくつかある。WezTermの売りのひとつはGPUを活用した高速なレンダリングである。WezTermの他にもうちGPU使ってるんで超速いっすよ!という端末はいくつかあるのでホットなトピックなのだろう。しかし、個人的には端末の高速レンダリングがそんなに嬉しいか? という感じがしてあんまり刺さらないんですよね。それに、端末上でtmuxを介するとだいたいここで大きく律速されてしまうので実質的にはあまり効果が感じられないという観点もある。

それと、おそらくはGPUのハンドリングにまつわる話なのだと思うのだけど起動中の占有メモリがけっこう半端なくなる時があるのも気になる。

その他、IMのハンドリングに若干のバグが残っておりたまにIMをアクティブにできなくなる、その上デスクトップ全体で文字入力ができなくなってしまうことがある(なぜかGnomeデスクトップ自身とIMの状態を共有してるっぽく、Gnomeのアプリ検索とかで一旦IMをアクティブにしてからWebTermに戻ると復帰したりする)、クリップボードから貼り付けるとおかしな文字選択状態になる、画面の最終桁からワイドな文字の入力を始めると次行からの表示がしっちゃかめっちゃかになるなど日本語の表示と入力に関して改善の余地がある。

そんなこんなで新しいバージョンがリリースされるのを待ち侘びているのだけど、最終バージョンが2024年の2月ということで相当待たないといけない予感がしている。それならば、その間に別の端末を試してみるか。

というわけで本題のmltermである。実はmlterm自体はLinux環境をセットアップするたびたいてい入れてたのだけど、常用の端末にはなってなかった。viやvimは入力モードを抜けるとカーソルが1文字左に戻るのだがこの仕様を便利だと思ったことはない。そこで

inoremap <silent> <Esc> <Esc>`^

というように定義して入力モードを抜けたら入力モードに入る前のマークへ強制的にカーソルを置くようにしている。しかしこの定義がなぜかmltermでだけカーソルが戻らない上に勝手にundoが実行されるという奇妙な動作になってしまいmlterm上でvimが使い物にならないのである。

実は同じような誤動作はWezTermでも起こるのだが、こちらの場合はリポジトリに置いてあるWezTerm用のterminfoを与えると直る。じゃあmltermもそうじゃないのということになるが、どうもmlterm用のterminfoは何が正しいのかよく分からず、放置していた。こういう話もある。

ところが、最近上記の定義をなんとなくmltermで動かしてみたところ、あれ?なんか普通に動くではないか。そこで、ちゃんと使ってみようかということになったのだ。