有馬総一郎のブログ

(彼氏の事情)

2021年01月16日 21:58:47 JST - 5 minute read - Linux

alacrittyでは東アジアの曖昧な文字幅について制御はできなそう

mltermを導入してみたところ、たまにmltermが起動しまくってとまらない?状態になってしまう。あと、絵文字を入力したときにめっちゃデカい。

mlterm
IE黎明記の多重起動を思い出させる
mlterm
116個起動
mlterm
絵文字デカい

なので、流行のalacrittyを入れてみることにした。

snapを使ってインストール

まずはsnapを使ってためすも、--classを付けろといってくる。

$ sudo snap install alacritty
error: This revision of snap "alacritty" was published using classic confinement and thus may
       perform arbitrary system changes outside of the security sandbox that snaps are usually
       confined to, which may put your system at risk.

       If you understand and want to proceed repeat the command including --classic.

Snap(Snappy) コマンドの使い方 | Linux Magazine

Snapには、ソフトウェアを隔離してセキュリティを高めるサンドボックス機能があります。 しかしこの制限をかけると使い勝手が悪くなるパッケージがあるので、 そのリスクを承知してインストールをするために –classic オプションを追加します。 インストール時に、classic オプションが必要なパッケージの Notes には、classic と表示されます。

とな。

$ sudo snap install --classic alacritty
alacritty 0.2.0 from Chris MacNaughton (icey) installed

ところが、ギッチョンチョン、起動するとエラーを吐く。

Ubuntu snap package crashes on start · Issue #3066 · alacritty/alacritty · GitHub

パッケージ管理されてなく、古いですよー1、と。

ビルドしてインストール

しょうがないから、ビルドしてインストールすることに。

Rust製の爆速端末Alacrittyのインストールと設定方法 | TomboMemo

この方のおっしゃるとおりにすればインストールできる。

依存関係のあるライブラリをインストール

$ sudo apt install cmake pkg-config libfreetype6-dev libfontconfig1-dev libxcb-xfixes0-dev python3

rustupインストール

rustup.rs - The Rust toolchain installer

$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
>1

1 を選択。

rustupインストール後セットアップ

$ source $HOME/.cargo/env

適切なRustコンパイラがインストールされていることを確認

$ rustup override set stable
$ rustup update stable

ソースを落してきて、ビルド

$ git clone https://github.com/alacritty/alacritty.git
$ cd alacritty
$ cargo build --release

バイナリファイル、アイコンの移動、デスクトップショートカット作成。

$ sudo cp target/release/alacritty /usr/local/bin
$ sudo cp extra/logo/alacritty-term.svg /usr/share/pixmaps/Alacritty.svg
$ sudo desktop-file-install extra/linux/Alacritty.desktop
$ sudo update-desktop-database

導入後、東アジアの曖昧な文字などを試す

で、インストールできたので、起動してecho ♂○などを試す。

うむ。駄目だ。

alacritty

とあるので、

east_asian_fullwidth: true

alacritty.ymlに設定してみたけど、駄目だった。

Support config to control width of ambiguous width characters by lo48576 · Pull Request #1049 · alacritty/alacritty · GitHub

このプルリクエストについて熱い議論が重ねれれているが結局、導入されなかったようで…その後は Use system unicode width function · Issue #1295 · alacritty/alacritty · GitHubに移ったみたいなんだけど?

So, after a year this issue still open, is there any blockers?

I’m suffering from the problem on this issue for a long time using Alacritty.

未解決のまま?

However, this is not a problem on a lot of systems so the priority is pretty low as far as I’m concerned. It’s also not a good solution and it will not solve the problem in every case.

優先度低め?

I know this problem is hard to solve by using wcwidth

Why would it be? That’s actually the easiest solution there is. Since that’s what most applications use anyways.

wcwidthを使用して解決するのが簡単だと…良く分からない。ビルドのときに設定をイジれということなのか?

wcwidth-cjkをインストール

それとも

Arch LinuxでEast Asian Ambiguous charが幅1で表示されることについて - galaxy-sixth-sensey

fumiyas/wcwidth-cjk をインストールして、指示通り.zshenvあたりに

eval /usr/local/bin/wcwidth-cjk --sh-init

と書くと、urxvt上での問題は一切合切直った。 すごい!!

の解決策のようにwcwidth-cjkを導入すればいいのか?

git clone https://github.com/fumiyas/wcwidth-cjk
cd wcwidth-cjk/
sudo apt install autoconf
sudo apt install automake libtool make gcc
sh autogen.sh
ls
./configure --prefix=/usr/local
make
sudo make install

これでうまくインストールできたんだけど、自分がぱーたりんすぎて、どう使うのか良く分からない。

eval `/usr/local/bin/wcwidth-cjk --sh-init` とか /usr/local/bin/wcwidth-cjk /usr/local/bin/alacrittyをしてもどうも上手くいかない…


追記 2021-01-17

$ /usr/local/bin/wcwidth Ab漢α¥
1 00 00 00 41   A
1 00 00 00 62   b
2 00 00 6F 22   漢
1 00 00 03 B1   α
1 00 00 00 A5   ¥

となっていたのを/usr/local/bin/wcwidth-cjk /usr/local/bin/alacrittyとすることで、その先で

$ /usr/local/bin/wcwidth Ab漢α¥
1 00 00 00 41   A
1 00 00 00 62   b
2 00 00 6F 22   漢
2 00 00 03 B1   α
1 00 00 00 A5   ¥

と表示されることは確認している。何か考え違いをしているのか。

ちなみに/usr/local/bin/wcwidth/etc/locale.genja_JP.UTF-8 UTF-8-EAW-FULLWIDTHとすることでも、2 00 00 03 B1 αの状態にはなる。

追記ここまで


そもそもmozcで入力すれば文字が欠けずに、半角文字幅で入力されていくだけ。画面の表示が崩れて困るのは、skkだから、ということに今更気付いてしまった。Chromebookでも拡張機能 SKK Japanese Input2なくなっちゃったしね…skkを使うのが悪いのか。

なにかL’Arc〜en〜Cielの全角チルダどうこう言ってたころが懐しいな…

技術書典 :技術書のオンラインマーケット開催中がこのあいだ年始にやってましたけど

ここらへん買って読んだら、少しは理解できるようになるのだろうか(下は関係なさそう、でも面白そう)…あ、今でも(2021-01-16 23:30)購入できるんだね。

他の端末(ターミナル、GNU Screenあたり)を導入しようかな。 GNU Screenはラッパーだった。


  1. ビルドしてできたものはalacritty 0.8.0-dev (3ed9f9a)だった。 ↩︎

  2. https://chrome.google.com/webstore/detail/skk-japanese-input/khlokcofcnjkbjfddpkhfainfgkfngcm?hl=ja に元々公開されていた。ソース自体は GitHub - jmuk/chrome-skk: An SKK implementation for ChromeOS IME API.にある。 ↩︎

Tags: Ubuntu Desktop Terminal

標準コマンドを変更する。また、優先度を変更する。 MimeTypeが*/*は正しくない