Open8

俺たちの戦いはこれからだ(zetamatta's Book 読者コミュニティー)

hymkorhymkor

本の感想や質問をお気軽にコメントしてください。

hymkorhymkor

さっそくですが、WindowsTerminal 1.4→1.5 のバージョンアップで、U+2000~U+2FFF 以外にも、KeyDown が届かないコードが登場しました。現在、以下のスクラップで格闘中

hymkorhymkor

とりあえず、一旦解決し、go-readline-ny v0.4.2 では普通に MAN FARMER もマウスの右クリックで入力できるようになっているので、スクラップはクローズしました。

hymkorhymkor

囲み数字:U+0023/U+FE0F/U+20E3 ( #️⃣ )

おそるべき絵文字で言及されてたやつ。go-readline-ny v0.2.6 にて対応した。

WindowsTerminal での表示は本来「#□」みたいになるが、go-readline では「#<20E3>」みたいになっていた。せめて「#□」のままちゃんと編集できるようにした。

この文字の変態性は「ただの半角文字(#)」+「異体字セレクタ15」+「囲み文字□」というコンボな点。囲み文字は異体字セレクタと同じ扱い(型)にすればよかったのだが、問題は異体字セレクタ的処理が二重になるという点。

これは type VariationSequence string としていたのを type VariationSequence [2]Mojiと変えることで解決した。つまり、何重にでも入れ子にできるわけですわ。

囲み文字を異体字セレクタと同じ扱いにするのは簡単で

return unicode.Is(unicode.Variation_Selector, ch)

としていたのを

return unicode.Is(unicode.Variation_Selector, ch) || unicode.Is(unicode.Me, ch)

としただけ

hymkorhymkor

ひたいに手をあてる女性の異体字15:U+1F926/U+200D/U+2640/U+FE0F (🤦‍♀️)

  • Windows だと、Windowsキー+ピリオドで入力できる。
  • WindowsTerminal だと「🤦 ♀」という二文字表示になる。
  • go-readline-ny では「🤦 ♀<FE0F>」とか出てしまっていた。

これ、驚くべきは

  • 異体字セレクタ(U+FE0F)が ReadConsoleInput 経由で読み込まれていた
  • 合字+異体字シーケンスのコンボ

という2点。前者については Ctrl-Y 以外の異体字セレクタ読み込みにも素直に対応するようにした。後者については異体字シーケンスの構造を入れ子にできるようにすることで対応した。
(異体字シーケンスの構造を入れ子は、v0.2.6 でやったみたいに書いてたけど、実は本件の修正(v0.2.5) でやってた修正だった)

hymkorhymkor

他の文字の前に合字を挿入した時に、文字幅計算計算が狂う

go-readline-ny v0.4.4 にて Fix。一部の文字幅計算関数(readline.GetStringWidth)が、合字処理に対応出来てなかったという…あちゃあ案件。同じことをする関数を複数用意してると、こういうことになる。

いずれ統一せんといかんなぁ(readline.GetStringWidthはいずれ廃止するが、今はまだ存続)