【要望】 検索/置換ダイアログへのドラッグ&ドロップについて

  1. @ Kuro さん
    開発・更新おつかれさまです。

    「検索/置換」ダイアログの入力フォームは文字列のドラッグ&ドロップにも対応していてとても便利で、「正規表現を使用した複数行に渡る検索・置換にも対応しています」とあわせて、Mery の検索機能の ウリ ですよね。 :)

    『知っておくと便利なテキストエディタ「Mery」の 10 個の小技』より
    「検索ダイアログにドラッグ&ドロップする」
    https://www.haijin-boys.com/software/mery/mery-tips#8

    なにげに複数行の選択範囲の文字列でもドラッグ&ドロップ OK ということに(いまさらながら)気付いて「スゲー!」とおもったのですが、同時に気になる部分も見つけてしまいまして…。
    たびたびの注文つづきになってしまっていますが、以下、よろしくお願いします(関連していそうなトピックもありますが、新規トピックとさせていただきます)。

    関連?: 『前後の検索の挙動』
    https://www.haijin-boys.com/discussions/4840

    -----

    改行をふくむ複数行の文字列を「検索/置換」ダイアログにドラッグ&ドロップしたときは、改行コード CR が "\r" になりますが( CR+LF の文書内からだと "\r\n" )、実際の「検索/置換」の実行にあたっては「正規表現」オプションが ON の場合でも ―― ON じゃないと改行をふくめての検索はできませんが―― 文書の改行コードの形式によらず "\n" のみが「検索する文字列」で有効な改行文字として扱われ、"\r" や "\r\n" は無視されてしまいます。
    要するに「検索する文字列」に "\r" があると「正規表現」 ON で検索を実行しても意味がないようで…。 :(

    そういう次第で、
    「検索/置換」ダイアログの入力フォームに複数行の選択範囲の文字列をドラッグ&ドロップしたとき
    の動作として、以下2点を要望/提案いたします。

    1. 改行をふくむ文字列の D&D で、自動的に CR や CR+LF での改行文字を "\n" に置き換える
    2. 改行をふくむ文字列の D&D で、自動的に「正規表現を使用する」のオプションの ☑ を ON にする

    せっかく文字列を直接ドラッグ&ドロップできるのですから、「手作業で "\r" や "\r\n" を "\n" に直さないでも済むように」ということで、ご検討をお願いします。
    (あるいは、いっそ "\r" や "\r\n" のままでも "\n" と同一視して検索とか?)

     |  sukemaru  |  返信
  2. また、上2件が可能であれば、もう1点追加でお願いしたいのですが…。
    ベータ版 2.8.3 から「次/前の文字列を検索」機能を使用した後でも「正規表現を使用する」のチェック状態も保持されるようになりましたので、

    3. 「次/前の文字列を検索」機能でも、改行を含む複数行の選択範囲(行末改行を含んだ1行選択の場合も)から検索できるようにする → ※自動的に「正規表現」オプション ON

    …これができちゃうと、複数行からの検索のときは「検索」ダイアログを開く必要すらないかもしれないですよね。 :)
    あわせてご検討いただけますよう、よろしくお願いします。

    検索文字列にする選択範囲が "\n" を含んでいると HighlightFind が効かないということは
    https://www.haijin-boys.com/wiki/よくある質問#改行および折り返しをまたぐ検索で強調表示されません
    ということで承知していますが、上の3件についても難しいのでしょうか…。

    -----

    ※ 「複数行選択からでも次の文字列を検索」をマクロにしてみましたが Document.Selection.FindRepeat( meFindNext ); はダメで、 Document.Selection.Find( Document.Selection.Text.replace( /\W/g, "\\$&" ), meFindNext + meFindReplaceRegExp ); ならいけるようでしたが、その前後の部分での処理の仕様がうまく決まらずテスト版レベルのままになってます。 :|

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

    > 要するに「検索する文字列」に "\r" があると「正規表現」 ON で検索を実行しても意味がないようで…。 :(

    ご不便をおかけして申し訳ございません。Mery のエディタエンジンは内部データの改行コードをすべて LF で扱う仕様となっています。

    このため、正規表現では改行コードを意識することなくすべて \n で通るというメリットがありますが、改行コードが混在するテキストを扱うことができないというデメリットがあります。

    これはエディタエンジンの仕様上の制限事項ですので、改行コードが混在するテキストを扱う必要がある場合は、申し訳ございませんが他のテキストエディタをご利用いただくしか方法がありません。

    改行を含む検索において強調表示されないという点につきましても、ご不便をおかけして申し訳ございませんがエディタエンジンの仕様となっております。

    自動的に正規表現オプションをオンにするという仕組みにつきましては、個人向けのカスタマイズというかたちになってしまいますので、申し訳ございませんが対応は控えさせていただければと思います。

    お力になれず申し訳ございませんが、よろしくお願いいたします。

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

    > 自動的に正規表現オプションをオンにするという仕組みにつきましては、個人向けのカスタマイズというかたちになってしまいますので、申し訳ございませんが対応は控えさせていただければと思います。
    諒解いたしました。

    > お力になれず申し訳ございませんが、よろしくお願いいたします。
    ご説明いただいた仕様については大体理解しています。
    要望の1点めでお願いしたかったのは「入力フォームにドラッグ&ドロップされた文字列内の "\r" と "\r\n" を(入力フォームの中でだけ) "\n" に置きかえる」ということでして、検索の仕様にからんだ要望ではなく、エディタ内の TAB 文字をふくむ選択文字列を D&D すると入力フォーム内では "\t" に置き換えられるのと同じように …というつもりだったのですが。 :(

    いつものごとくアレやコレやを詰め込みすぎて「できの良し悪しはともかく」な感じですが、複数行対応のマクロ化がなんとかなりましたので、個人的にはお茶を濁す程度ですが凌げるようになるとおもいます。

    わがままな要望にたいしてご検討とご回答いただき、ありがとうございました。

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

    > 要望の1点めでお願いしたかったのは「入力フォームにドラッグ&ドロップされた文字列内の "\r" と "\r\n" を(入力フォームの中でだけ) "\n" に置きかえる」

    入力フォームなどへのドラッグ&ドロップは、Mery 内部だけではなく外部のアプリケーションとの整合性を考慮した OLE ドラッグ&ドロップというものを採用しています。

    これは Mery から別のアプリケーションへのドラッグ&ドロップや、別のアプリケーションから Mery へのドラッグ&ドロップを可能とするものですから、Mery 側の都合だけでドラッグ&ドロップされたデータを改変してしまうのは美しくないと思います。

    > ということでして、検索の仕様にからんだ要望ではなく、エディタ内の TAB 文字をふくむ選択文字列を D&D すると入力フォーム内では "\t" に置き換えられるのと同じように …というつもりだったのですが。 :(

    そうですね。どうせ \r が扱えないなら初めから表示しないでほしいというご意見はごもっともだと思いますが、そもそも \r が扱えないということ自体が仕様上の穴ですからね。

    エディタエンジン自体は私が開発したものではありませんので、現在の私の技術力では \r に対応させるカスタマイズを施すことはできそうにありません。

    大変申し訳ない回答となってしまいますが、この場合は \r を扱えるエディタのご利用を案内させていただいています。

    どうしても必要とのことでしたら、個人向けのカスタマイズとなりますが、隠しオプションで実装ということで相談に乗らないこともないですが… ^^;

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

    > そもそも \r が扱えないということ自体が仕様上の穴ですからね。
    選択範囲の文字列をあつかう自作マクロなどで "\r\n", "\r" "\n" を気にせずに済むので、むしろ助かっていることのほうが多いです( …というか、つい最近まで「改行コードの形式」というものに気を回したことがなかったのですが)。 :D

    > どうせ \r が扱えないなら初めから表示しないでほしいというご意見はごもっともだと思いますが、
    「改行コード形式を気にしないでいいですよ」という意味でのユーザーフレンドリーな仕様だとばかりおもっていたものでして、Mery において「検索する文字列(&F):」欄でだけ "\r\n", "\r" が顕在化するのは不自然な気がしてしまったのです。 :(

    > どうしても必要とのことでしたら、個人向けのカスタマイズとなりますが、隠しオプションで実装ということで相談に乗らないこともないですが… ^^;
    システムの設定をいじっていないため検索ダイアログの入力フォームはフォントサイズが小さく、とくに欧文テキストのばあい「検索する文字列」欄で横方向に \r をさがすのがつらいので、可能であればお願いしたいところです

    … が、

    いままで何も気にせずデフォルトの CR+LF(Windows) で運用していて、「検索する文字列(&F):」欄に複数行のテキストを「貼り付け (Ctrl+V)」したばあいに改行以降が切り捨てられるのは「そういう仕様」であろうと認識していたのですが、 … 先ほどふと思いつきで

    ステータスバーのWクリックメニューで CR+LF(Windows) → LF(UNIX) にしてから
    エディタ内の複数行テキストをコピー → 「検索する文字列」欄に貼り付け

    とやってみたら、改行以降も切り捨てされず、「正規表現」オプション OFF のままでも複数行の重複部分を検索できてしまいました。 :?
    また、CR+LF 形式の文書でも LF(UNIX) モードにすると複数行のドラッグ&ドロップで、入力欄の改行文字が "\n" で置き換えられるようで…!! :o

    裏技(?)的な抜け道が見つかりましたので、個人的には複数行検索がわりとスムーズにできそうな気がしてきました。 :)
    XML 文書などで「重複するブロック」を検索するのも楽になりそうです。 :D

    ただ、改行コードの形式を変更すると「未保存*」フラグがついてしまうのですが、Ctrl+Z では「改行コードの形式の変更」を元に戻せないため、途中で誤って文書内に変更(再編集)をしてしまったのかどうかを判別しづらいかも?
    (手持ちのエディタでは gPad だけは「改行コードの形式の変更」をアンドゥできるようでした。他は、ことなる改行コードの混在可能のものか、保存時にしか改行コードの形式を変更できないものか…)

    「書き換え禁止」と併用すれば誤入力も防げるので、変テコな段取りではありますが「検索」においてはなんとか用が足りるかもしれません。
    ※ さすがにこの方法でも、他のエディタ/アプリケーションからのコピペやドラッグ&ドロップではうまくいきませんが。 :|

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