ダーティーインジケーターと変換中の文字列を挿入モード

  1. たいしたことではないのですが、ちょっと気づいてしまったもので、ご報告です。
    オプションの「変換中の文字列を挿入モードで入力する」がONの状態で、ファイルを開き、IME-ONの状態で何か入力して、確定せずにキャンセルすると、ダーティーインジケーターが更新と表示されます。

    この状態でファイルを閉じると、更新保存確認は出ないため、内部的には未更新と判断されているようで、表示だけの問題と思われます。

    Mery: 3.7.15 (x64, Portable)
    Onigmo: 6.2.0
    C/Migemo: 1.3
    Tidy: 5.8.0
    Hunspell: 1.7.1
    uchardet: 0.0.8
    アウトライン: 3.2.3 (Outline.dll)
    OS: Windows 10 (Version 22H2, OS Build 19045.5737, 64-bit Edition)

     |  pizz  |  返信
  2. ご報告ありがとうございます。

    > オプションの「変換中の文字列を挿入モードで入力する」がONの状態で、ファイルを開き、IME-ONの状態で何か入力して、確定せずにキャンセルすると、ダーティーインジケーターが更新と表示されます。

    [変換中の文字列を挿入モードで入力する] が有効な場合、文字列は確定後にまとめて挿入されるのではなく、変換中の状態からリアルタイムでテキストに反映される仕様になっています。

    そのため、変換中に何かしらの入力があると、たとえ確定せずにキャンセルしても「一度は内容が変わった」とみなされ、ダーティ インジケーターが「更新あり」の状態になるのは想定どおりの動作ですね。

    この仕様は、Windows 11 の新しいメモ帳や VSCode でも同様で、変換中の入力をキャンセルした場合でも「更新あり」として扱われるようです。

    > この状態でファイルを閉じると、更新保存確認は出ないため、内部的には未更新と判断されているようで、表示だけの問題と思われます。

    こちらは少し別の話になりますが、「無題」のファイルに限り、テキストが空の状態であれば、更新の有無にかかわらず「保存しますか?」の確認ダイアログは表示しない仕様にしています。

    たとえば、[新規作成] → [文字を入力] → [すべて削除] → [タブを閉じる] という操作をしても、ダイアログは表示されません。

    ちなみに、この仕様も Windows 11 の新しいメモ帳や VSCode と同じですが、1 つ違う点としては、メモ帳や VSCode では、このような状態になるとダーティ インジケーターが「更新なし」の状態になるようです。

    ただ、その仕様だと、「新規作成したばかりで何もしていない状態」なのか、「一度編集してすべて削除した状態」なのか、見た目では区別がつかなくなってしまうので、個人的には現状の Mery の仕様のほうが好みです。

    このあたりは人によって意見が分かれるところかもしれませんね。

     |  Kuro  |  返信
  3. ご回答ありがとうございます。

    > そのため、変換中に何かしらの入力があると、たとえ確定せずにキャンセルしても「一度は内容が変わった」とみなされ、ダーティ インジケーターが「更新あり」の状態になるのは想定どおりの動作ですね。

    UNDOで未更新に戻せないあたり、個人的にはいま一つ気持ちが悪い感じがしますが、想定通りとのことでしたら、それで構いません。

    ありがとうございました。

     |  pizz  |  返信
  4. ご返信ありがとうございます。

    > UNDOで未更新に戻せないあたり、個人的にはいま一つ気持ちが悪い感じがしますが、想定通りとのことでしたら、それで構いません。

    そうですよね、ここは好みが分かれるところだと思います。

    ただ、今のところはメモ帳や VSCode と同じ動きということで、そのあたりでご理解いただけると助かります。

    とはいえ、ご要望が多ければ、改めて検討させていただくこともあるかと思いますので、よろしくお願いします。

     |  Kuro  |  返信
  5. 追伸です。

    先ほどの回答で、実は「もし実装するなら…」という前提で考えた内容も書いていたのですが、長くなってしまったため、その部分は割愛していました。

    …が、その後、良い方法が見つかったので、少し長くなりますが改めて回答させていただきたいと思います。

    というのも、最初にメモ帳や VSCode の動作を参考にしていたため、ご要望いただいた仕様を実装するなら、入力 (変換) 中は「更新あり」状態にして、キャンセルされたら「更新なし」に戻す、といった仕様を考えていました。

    そのためには、IME の変換開始を検知して状態を保存し、入力がキャンセルされたら元の状態に戻す、という仕組みが必要になります。

    ただ、IME の挙動は Microsoft IME、Google 日本語入力、ATOK などでそれぞれ異なりますし、それらの古いバージョンや古い OS での動作検証も必要になって、かなり大変な実装になりそうだな…と。

    それで、やっぱりメモ帳や VSCode でも対応していないし、私の技術力では厳しそうだなということで、現状維持という回答にさせていただきました。

    …が、先ほどふと、秀丸エディタさんのトゥルーインライン入力を試してみたところ、なんと入力をキャンセルすると「更新なし」状態になっているではありませんか!

    というか、そもそも入力 (変換) 中は「更新あり」にすらならないようで、「なるほど、これだ!」と。

    よく考えてみれば、入力 (変換) 中に「更新あり」にする必要って、特にないんですよね。完全にメモ帳や VSCode の仕様に引っ張られてしまっていたようです。

    強いて言えば、「変換中にタブの閉じるボタンを押したとき、更新フラグが立っていれば確認ダイアログが出せる」といった利点もあるにはあるのですが、変換を確定していない状態なのだから、それも不要かなと。

    そういうわけで、秀丸エディタさん方式であれば、IME の種類に依存せずに実装できそうな気がしています。

    とはいえ、メモ帳や VSCode の仕様にも何かしら理由があるのかもしれないので、もう少し調査した上で、改めて検討してみたいと思います。

     |  Kuro  |  返信
  6. Ver.3.7.16で、想定した動作になっていることを確認しました。
    わざわざこんなところまで対応いただきまして、ありがとうございます。

     |  pizz  |  返信
  7. ご確認いただきありがとうございます。

    問題なく動作しているとのことで、ホッとしました。

    いやはや、さすが秀丸エディタさんですね。こんな仕様があるなんて、まさに目から鱗でした。

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