先日、
qterminalを使いこなす。という記事を書いて、そこで、qtermwidgetのソースコードに変更を加えることによって、qterminal で「※」「☆」といった全角記号を表示させる方法を書きました。この方法を使えば、vimでambiwidthを設定することができます。しかし、前回書いた方法は、ちょっと泥縄的だったと思います。今回、もう少し筋の通ったやり方にします。
qtermwidget のソースコードは
github上にあるのですが、実際に文字の種類による文字幅を定義しているのは
lib/konsole_wcwidth.cppというファイルです。前回の記事では、このファイルの130〜138行目のところに色々な文字を追加していました。今回はこの場所はそのままにしておきます。
実は、このファイルの142行目から216行目にかけて、「#if 0」でコメントアウトされた部分があります。この部分が上述の「※」「☆」等を含むいわゆるEast Asian Ambiguous カテゴリー(
wikipediaの記述)に属する文字の幅を全角として処理するコードになります。わざわざコードを書いたうえで、「#if 0」で封印している事情は、詳細は分からないのですが、東アジア以外ではこれらの文字は半角扱いされるので敢えて適用しない、という事なのだと思います。
「#if 0」を外して、他のファイルも一部修正してビルドすると、きちんと全角文字が表示され、vimのambiwidthを設定することができるようになりました。修正箇所は
この通り。
それはさておき、わざわざ手動でビルドするのは大変です。上記の経緯を考えると、「#if 0」を外す形でPull request を出すのも、通らなさそうです。
やり方としては、今回の変更を含むソースコードを「
qtermwidget-cjk-patched-git」みたいな適当な名前でパッケージ化して、AURに掲載して配布するのが、多分一番手っ取り早いと思います。(AURへの掲載については、私がこれから勉強しなければならないので、ちょっと時間がかかると思いますが。。)
PR