PlemolJP icon indicating copy to clipboard operation
PlemolJP copied to clipboard

PlemolJP Console NF v1.2.4で▽が全角になる

Open yamam opened this issue 2 years ago • 1 comments

PlemolJP Console NF v1.2.4で▼▽等が全角になっています。 UDev Gothic NFやHackGenNerd Consoleでは半角になっていますので、半角にしていただきたいです。

yamam avatar May 16 '22 23:05 yamam

☆★も全角になりますが、こちらは半角にすることは難しいでしょうか? (UDev Gothic NFやHackGenNerd Consoleでも全角でした)

yamam avatar May 17 '22 01:05 yamam

返信が遅れてすみません。

IBM Plex Mono に含まれる記号でなければ半角にはなりません。HackGenなども、英字フォント側に含まれているために半角になっており、半角化の処理を記号ごと個別に加えているわけではありません。

ちなみに、これはどういった理由からの要望でしょうか?

過去にも「IDEで不可視文字を表現するのにフォント内の特定の記号を用いており、それが全角だと表示被りが起きる」などの事象はあったため、そういった諸事情が絡むのであれば検討の余地はあるかもしれません。

yuru7 avatar Sep 17 '22 01:09 yuru7

▽▼に関してはSKKでの変換時に表示される記号で、全角表示だと以下のように半分しか表示されないからです。 image ☆★に関してはテキストエディタで表示したときに半分しか表示されませんが、これらの文字が出現する頻度は高くありませんので優先度は低いです。 image

yamam avatar Sep 17 '22 02:09 yamam

半分しか表示されないこと自体はテキストエディタ固有の問題のように思えますが(East Asian Ambiguous Width の対応が甘い?)、何のテキストエディタをご使用でしょうか?

yuru7 avatar Sep 17 '22 02:09 yuru7

ご使用になってるOS、テキストエディタとそのバージョンについてお知らせいただけると助かります。

yuru7 avatar Sep 17 '22 02:09 yuru7

OSはWIndows 10 Pro の WSL 2(Ubuntu 22.04) terminalはwsltty (mintty 3.6.1) エディタはneovim(v0.8.0-dev-1109-g72e104142)です。 neovimの設定でambwidth=singleとしているため、East Asian Ambiguous Widthは半角表示されます。 PlemolJP Consoleの説明に以下のように記載されているため、East Asian Ambiguous Widthの文字は半角表示が望ましいと思っています。 「矢印記号などの多くの記号が半角で表示されるため、コンソールでの利用や記号類は可能な限り半角で表示したい人にオススメ」

yamam avatar Sep 17 '22 02:09 yamam

元々Console版ではEast Asian Ambiguous Widthに相当する文字を半角にすることを目的にしていたわけではないですが、もしも本件に対応するならば今回ご報告いただいた記号だけでなく、Ambiguousとして分類されている文字(下記の A に分類されているコードポイント)全体を半角化するのが根本的な対応になりそうです。 https://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt

その方向で検討します。

yuru7 avatar Sep 17 '22 07:09 yuru7

ありがとうございます。 East Asian Ambiguous Widthが半角の日本語フォントは以下のものしか見つからなかったので実現されたらありがたいです。 https://github.com/tomonic-x/Illusion

yamam avatar Sep 17 '22 12:09 yamam

複数のターミナルアプリで、PlemolJPだけでなく自作の他フォントや定番の等幅フォントなどを使い、Ambiguousとして分類されている文字すべての表示状態を見てみました。

どうやらAmbiguousを全部半角化してしまおう、とするフォントはなかなか無いように思えます。 Ambiguous文字を一律で半角幅にしてしまうと、文字が潰れてしまって読み取りできない文字が出てくるため、そのあたりの兼ね合いを解消できないのでしょう。読めないフォントはもはや意味をなさないため、Ambiguousを一律半角幅にするというのは厳しいだろうと私としても結論付けました。

では、半角幅に縮めても読み取れる文字や記号類だけを半角幅にすればいいだろうという話にはなるのですが、それを選別し、表示状態をチェックするにはそれなりに時間を取ってやらなければいけなさそうです。したがって、ちょっと直してすぐ適用、というのもなかなか難しいですね。

恐縮ですがしばらくは現状のままとさせていただき、今後の改善の参考とさせていただきます。

yuru7 avatar Sep 17 '22 13:09 yuru7

今後のためにメモ: Unicode定義から コードポイント 文字 の一覧に変換するためのスクリプト

import csv


def main():
    with open("ambiguous.txt", mode="rt", encoding="utf-8") as f:
        code_points = {}
        i = 0
        for line in f:
            code_point = line.rstrip("\n").split(";")[0]
            if ".." in code_point:
                for cp in range(
                    int("0x" + code_point.split("..")[0], 16),
                    int("0x" + code_point.split("..")[1], 16) + 1,
                ):
                    code_points["0x{:04X}".format(cp)] = chr(cp)
            else:
                code_point = "0x" + code_point
                code_points["0x{:04X}".format(int(code_point, 16))] = chr(
                    int(code_point, 16)
                )

            i += 1

            # リミッター
            # if i > 10:
            #     break

        with open("out.tsv", mode="w", encoding="utf-8") as f:
            for key, value in code_points.items():
                f.write(key + "  " + value + "\n")


if __name__ == "__main__":
    main()

yuru7 avatar Sep 17 '22 13:09 yuru7

ご検討ありがとうございました。 やはり全部となると大変ですよね。SKK使いとしては▽と▼だけは対応して頂けるとありがたいです。(▽の件があったので今はUDev Gothic NFを使っています)

Ambiguous文字を一律で半角幅にしてしまうと、文字が潰れてしまって読み取りできない文字が出てくるため

というこは、Ambiguousの選定リストに問題がありそうですね

yamam avatar Sep 17 '22 13:09 yamam

そうですね…気持ちとしては対応したいところなのですが、一方で「英字側フォントを全て適用するのがConsole版」というポリシーをシンプルに保ちたいという思いもあります。 例外的に一部の用途に引っ張られて仕様を変えると、なし崩し的に他のユーザーも各々の個別要望を反映してほしい、と思うでしょうから。 今後、なにか上手い変更理由が見つかれば、そのなかで▼▽を半角幅にするという判断もあるかもしれませんが、現時点では「SKKで使うから」という理由はレアケースと判断せざるを得ず、、、悪しからずご容赦いただければと思います。

というこは、Ambiguousの選定リストに問題がありそうですね

うーん、元から半角幅でデザインしていれば、もしかしたらもうちょっと見やすくできるのかもしれません。私がやれることはあくまで「全角幅であるものを機械的に半角幅に縮める」ということなので、どうしてもデザインそのままで横幅をギュッ!と縮めた感じになってしまい、表示品質を担保できなかったりします。 それにターミナルやプログラミングで利用される用途を考えると、デザイン用途よりも小さな文字サイズで利用されることが多いと思いますから、「縮小したら文字が読めない...」という状況には結構気を使わなければいけませんね。 「固定幅フォントかつ文字サイズは小さめで利用」という前提をAmbiguous分類は特に意識していないでしょうから、フォント側で容易に半角化対応できないような文字があるのも仕方ないのかもしれません。

yuru7 avatar Sep 17 '22 13:09 yuru7

Neovimの0.8にて、setcellwidths()という関数が追加されています。 ▼▽の文字幅をNeovim側で変更することが可能です。

https://qiita.com/delphinus/items/3c47567e1af13add968e

ryota2357 avatar Sep 19 '22 08:09 ryota2357

ありがとうございます。 ★☆に設定して使ってみます。 カーソル位置の☆は半分になってしまいますが、これはminttyが原因のようです。(gnome-terminalだと問題ない) image

yamam avatar Sep 19 '22 09:09 yamam

久しぶりに試してみたら▽が半角表示になっていました。(v1.7.1) image

yamam avatar Feb 21 '24 23:02 yamam

v1.5.0で対応していました。お声がけしておけばよかったですね、すみません。

yuru7 avatar Feb 22 '24 01:02 yuru7