制御文字(U+007F)の表示

  1. 開発お疲れ様です。

    制御文字の表示について要望があります。

    U+0080 など制御文字は [PAD] のように目に見える形で表示されますが、
    U+007F は表示されません。

    U+007F も目に見える形で表示できるようにしていただけないでしょうか。

    なお、Windows標準のメモ帳では、半角の□で表示されます。
    テキストの中に意図しないで U+007F を挿入してしまった際、
    Meryでは目視で見えないため存在に気づくことが難しいと思っています。

    よろしくお願いいたします。

     |  ikn  |  返信
  2. ご意見ありがとうございます。

    Mery Ver 2.6.11 でユニコードの絵文字対応や結合文字対応で文字の描画を優先したため、DirectWrite を使用した U+007F, U+200B, U+2060 .. U+2064 (ゼロ幅文字) の描画を Windows に任せるように仕様変更しましたので、OS が描画しない文字 (ゼロ幅文字) は表示されなくなりました。

    > U+007F も目に見える形で表示できるようにしていただけないでしょうか。

    DirectWrite をオフにすると、メモ帳と同様、U+007F は □ の文字として表示されるようになると思います。

    DirectWrite がオンの場合でも一応、ゼロ幅文字を表示させる隠しオプションを用意しています。

    Mery.ini の [Display] セクションに CharacterMinWidth=X の項目を追記することで、ゼロ幅文字に幅を付けることができます。

    [Display]
    CharacterMinWidth=2

    単位はピクセルです。ただし、このオプションを使用するとゼロ幅文字が目に見える形になりますので、ゼロ幅文字を使用した絵文字や結合文字の描画が乱れてしまうことがありますのでその点はご了承ください。

     |  Kuro  |  返信
  3. ご回答ありがとうございます。
    ご教示いただいたとおり、DirectWriteを無効にしたり、CharacterMinWidth=X のオプションを試したりして挙動を確認してみました。

    「DirectWrite有効」かつ「オプション→記号→半角空白文字をオフ」の設定状態で、ゼロ幅文字と半角空白文字を目視で見分けられるようにしていただくことはできないでしょうか。

    次のような理由で、見分けられればいいなと思っています。
    ●DirectWriteの恩恵を受けたいためDirectWriteは有効にしたい。
    ●半角空白文字はテキストのインデントの調整に使っており、半角空白文字ごとに ﹈ を表示させると見づらくなるため、半角空白文字はただの空白として表示させたい。
    ●(可能性はそんなに高くないと思うが)例えば半角空白文字のつもりで入力したテキストに意図せずゼロ幅文字が混入した場合、上述した設定状態の時は半角空白文字とゼロ幅文字どちらもスペースのように見えて見分けられないので、他の環境で表示した際に自分の意図したように表示できない。そのため、ゼロ幅文字と半角空白文字を見分けたい。
    ●ゼロ幅文字でテキストを検索すれば、ゼロ幅文字の存在を見つけ出せると思うが、そのような手間をかけず目視で見分けたい。

    よろしくお願いいたします。

     |  ikn  |  返信
  4. 横から失礼します
    CharacterMinWidth=X を設定した上でゼロ幅文字をマーカーに登録してみてはどうでしょうか?目視で確認できるようになると思います

     |  シリル  |  返信
  5. ご返信ありがとうございます。

    マーカーに登録とのことですが、以前から U+007F をマーカーに登録していました。
    その時はまだCharacterMinWidth=X オプションを知らなかったので、U+007F の存在をチェックしたくなった時にテキストの先頭までカーソルを移動させ、マーカーバーで U+007F(UI上は□)をクリックして確認していました。

    恥ずかしながら、Kuroさんのご返信で U+007F はゼロ幅文字の一種であり他にも同様のものがいくつかあること、CharacterMinWidth=X オプションのことを知りました。
    ゼロ幅文字を全てマーカーに登録する手もありますが、
    ・マーカーバーの見た目の問題(あまり気にならないが、マーカーバーに□やただの空白が並ぶ)
    ・マーカーの本来の使い方からずれる??
    という点が気になり、何かスマートな方法はないだろうかと思って返信しました。

    (おそらく)ニッチ過ぎるだろうと思っていますし、不可能であってもそこまで困ることでもないかなと思っています。

    あと、Ver 2.6.14の記事で CharacterMinWidth=X オプションについて書かれていたにも関わらず、Kuroさんにご返信いただくまで認識しておらず失礼しました。。
    (ユニコードの仕様でゼロ幅文字はゼロ幅で扱うことになっているのですね。)

     |  ikn  |  返信
  6. シリルさんがおっしゃる通り、現状の仕様ですと CharacterMinWidth=X オプションと合わせてマーカーを使うのが一番スマートな方法だと思います。

    マーカーバーに □ が並ぶという点が問題であれば、[編集モード] の設定で強調文字列として登録するという方法もあります。

    それか、マーカーとして登録するときに正規表現を使用して、

    [\x{007f},\x{200b},\x{2060}-\x{2064}]

    こんな感じでゼロ幅文字をまとめて一つのマーカーに登録するという手もありますね。

    > (ユニコードの仕様でゼロ幅文字はゼロ幅で扱うことになっているのですね。)

    そうですね。ユニコード時代となり、ゼロ幅文字も重要な意味を持つようになりましたのでエディタ側の都合で勝手な描画ができなくなりました。

     |  Kuro  |  返信
スポンサーリンク