マクロリファレンス:3 について

  1. いつもお世話になっております。

    マクロリファレンス:3 の「Selection オブジェクト」のページ内、「SelectLine メソッド」で引数 true についての説明が抜けているようですのでご報告。

    -----
    あわせて、マクロ用メソッドの動作について気になった点を…。

    ・Selection.NewLine(), Selection.Indent/Unindent() メソッドで 2 以上の引数を指定して実行した場合、元に戻すさいの Undo (Ctrl+Z) の操作もその引数の値とおなじだけ必要になるようです。

    ・Selection.DuplicateLine() メソッドはアクティブなキャレットのある論理行 ActivePointY が複製対象になりますが、実行後のキャレットの位置(桁)が実行前の ActivePointX ではなく AnchorPointX になるようで、ちょっと不自然です。

    ・Selection.Tabify/Untabify(), と Selection.Indent/Unindent() メソッドの説明では操作対象が「選択範囲のテキスト」となっていますが、「選択範囲をふくむ論理行全体」が操作対象ですよね。 あと、これらの実行にあたっては一定以上の長さの選択範囲が必要ですね(マクロからではなく編集メニューのコマンドも同様ですが)。

    ・すでに何らかの文字列が「検索ハイライト」されている状態(HighlightFind = true)から、meFindKeepOptions オプションつきで Selection.Replace() メソッドを実行すると、マクロ終了後に残る「検索ハイライト」は、実行前の文字列ではなく Replace() メソッドでの検索文字列が対象になってしまうようです (検索/置換ダイアログにはもとの検索文字列が入力欄に残っていますから、F3 キーなどでの再検索対象はもとの文字列)。
    また、マクロ実行前に「検索ハイライト」がない状態(HighlightFind = false)から meFindKeepOptions オプションつきの Selection.Replace() メソッドを実行した場合にも Replace() メソッドでの検索文字列がハイライトされたまま残るようです。
    以下のマクロ後半のコメントアウト部分のような処理をいれれば不自然さはなくせそうですが…。

    /**
     * 「スペース×2削除」マクロの Mery v3 対応テスト版
     * 行頭の字下げを1段階解除する(半角×2, 全角×1, タブ×1)
     * ※ マルチカーソル非対応
     */
    var d = editor.ActiveDocument,  s = d.selection;
    var sx = ScrollX,  sy = ScrollY;
    var ty = s.GetTopPointY(mePosLogical);
    var by = s.GetBottomPointY(mePosLogical);
    var bx = s.GetBottomPointX(mePosLogical);
    // ver 3.0.1 以降かバージョンチェック用
    var meFindKeepOptions; // (meFindKeepOptions = 16384) > 0
    
    // 選択範囲の先頭/末尾を論理行全体に拡張
    if (s.Text && by != ty && bx == 1)  by--;
    s.SetActivePoint(mePosLogical, 1, by);
    s.EndOfLine(false, mePosLogical);
    s.SetAnchorPoint(mePosLogical, 1, ty);
    s.CharRight(true);
    
    var st = s.Text;
    
    if (st && meFindKeepOptions) {
      // Undo 用の選択範囲を保存
      var sv = d.Saved;
      BeginUndoGroup();  AddUndo();
    
      // 置換で字上げ(逆インデント)
      var hl = d.HighlightFind; // 検索ハイライトの状態を取得
      var regRep = "^(?:\t| {1,2}| )(.*+)$"; // ※ masme氏による
      var result = "$1";
      var flag = meReplaceSelOnly + meReplaceAll
               + meFindReplaceRegExp + meFindKeepOptions;
    
      s.Replace(regRep, result, flag); // ⇒ Replace() での検索ハイライトが残る
    
      // もとの検索ハイライトの状態に復帰(※カーソル移動をともなう)
      // var act = s.GetActivePos();      // 置換終了時のキャレット位置
      // s.FindRepeat(0); // 検索履歴の文字列で「前の文字列を検索」
      // d.HighlightFind = hl;  Status = "";
    
      // 選択範囲とスクロール位置を復旧
      s.SetAnchorPoint(mePosLogical, 1, ty);
      s.SetActivePos(act, true);
      ScrollX = sx;  ScrollY = sy;
    
      EndUndoGroup();
      // 字上げ(置換)ナシなら AddUndo を破棄
      if (s.Text == st) {
        d.Undo();  d.Saved = sv;
      }
    }
     |  sukemaru  |  返信
  2. ご報告ありがとうございます。マクロリファレンスのほうは修正しておきますね。

    > Selection.NewLine(), Selection.Indent/Unindent()

    はい、これは仕様です。一括で戻したい場合は BeginUndoGroup、EndUndoGroup で Undo のグループ化をご利用ください。

    > Selection.DuplicateLine()

    これはご指摘のとおり、ActivePointX のほうが良いですね。次のバージョンでは修正しておきます。

    > Selection.Tabify/Untabify(), と Selection.Indent/Unindent()

    マクロリファレンスでは便宜上、「選択範囲のテキスト」という表現で統一させていただいています。また、編集メニューのコマンドリファレンスなど MeryWiki のヘルプの内容については内容がずいぶん古いため、Ver 3 系の正式版をリリースしたのち時間に余裕ができたら全面的に見直そうと思っていますので、その際にはご意見を参考にさせていただきたいと思います。

    > meFindKeepOptions オプション

    これは検索ハイライトも維持したほうが良いのかどうかはご意見が分かれそうですね。

    検索ハイライトを維持した場合、Find メソッド実行後に選択範囲だけが検索位置に移動し、検索ハイライトは以前の文字列をハイライトした状態となってしまうので、これはこれで不自然な気もしますが、それなら meFindKeepOptions 付けなければ良いわけですから、検索ハイライトも維持したほうが仕様としては正しいですか…。

     |  Kuro  |  返信
  3. ご返信ありがとうございます。
    「コンパクトメニュー」マクロの制作や構文ファイル「Mery_Macro_JS」の更新のために色々とチェックしていて気づいたことを書かせていただいた次第です。

    > > Selection.NewLine(), Selection.Indent/Unindent()
    ありがとうございます。
    これらもキーボード操作のエミュレーション機能のようなものなのでしょうが、意図的な仕様なんですね。 :)

    > > Selection.DuplicateLine()
    マクロの自作をはじめた最初の頃に複数行対応版を作っていましたので久しぶりに使ってみたのですが、「あれ?」って。
    複数行選択の状態から実行(アクティブ行だけしか複製されないことは承知してましたが、ひそかに複数行対応していないかな? なんて期待して引数に true とか入れてみたりも)したときにキャレットが予期せぬところに行っちゃって、ひとりでモニターにツッコミ入れちゃいました。 :D

    > > Selection.Tabify/Untabify(), と Selection.Indent/Unindent()
    選択範囲内だけの「TAB/空白変換」のマクロが先日やっとモノになりましたが、マクロリファレンスを見るにつけ気になっていた部分でした。 :|

    > > meFindKeepOptions オプション
    跡形なく Replace() するテストコードはできましたがちょっと面倒な後処理になっちゃってますし、せっかくの「検索ダイアログの文字列、オプション項目を維持する」オプションですので、「あえて meFindKeepOptions をつけたマクロを書いたのに!」とならないほうがよいのではないでしょうか。
    meKeeoOptions のマクロのあとで F3 キーを叩くとマクロ実行前の検索文字列が再検索されるわけですから、meKeepOptions をつけて Find() や Replace() したあとは(キャレット位置以外の)形跡を残さないほうがよいと私はおもいます。
    あらかじめあった検索ハイライトを復帰させるべきかどうかについては(日ごろ検索ハイライト機能をほとんど利用していないので)... お任せいたします。 :)

     |  sukemaru  |  返信
  4. たびたび失礼します。
    気になる点がまたでてきましたのでよろしくお願いします。

    ・Selection.SelectWord/SelectLine() メソッドについて
    「カーソル位置の単語/論理行を選択します」となっていますが、すでに選択範囲がある状態から実行したとき、SelectWord() は AnchorPos が基点で SelectLine() は ActivePos が基点となっています。

    マクロリファレンスでの説明の文言が正しいとして SlectWord() の動作方式が変なのかな? とおもわなくもないのですが、それぞれのメソッドを連続で実行した場合に SelectWord() の選択範囲は動きませんが SelectLine( false ) の選択範囲は下に1行ずつ移動していってしまうので、SelectWord() の動作方式のほうが好ましいような?
    どちらかに動作仕様をあわせてしまうと既存のマクロに影響しそうですので、マクロリファレンスの説明文を変えてしまうほうがよさそうですが。

    ※ あと、マクロリファレンス/ 3 の Selection の各ページ内で、SelectWord メソッドの配置が SelectLine の次ではなく、 SetBookmark メソッドの下になっていますね。 :D

    c.f. Selection.FindRepeat() メソッド
    複数行にまたがる選択範囲のある状態から meFindRepeatWord オプションつきで実行したとき、SelectWord() と同じく AnchorPos 位置の単語が基点になるようです。

    ・Document.LineEnding プロパティと GUI 操作での改行コードの変更
    マクロでこのプロパティに値を代入して改行スタイルを変更した場合は「未保存*」のフラグが付くことはないようですが、[ファイル ]メニューやステータスバーから改行コードを変更した場合には「未保存*」のフラグがつくようです。
    「書きかえ禁止」が ON の状態でも改行コードを変更できる(マクロでも GUI でも)ので、「書きかえ禁止」のままテキスト編集操作なしで改行コードの変更だけした文書の「未保存*」フラグを消すことができません。

    改行コードだけを変更して上書き保存できるようにするには GUI での変更と同じく「未保存*」フラグが付くほうがよさそうですが、Undo で改行コードの変更を元に戻したり「未保存*」フラグを消したりすることができません。
    Mery ver 3 なら、改行コードを元の形式に戻してから文字列をを足すなどのテキストの編集操作をして Undo すれば「未保存*」消せるのですが、
    改行コード変更 ⇒ テキスト編集 ⇒ Undo
    でテキストの変更内容が完全に元に戻ると改行コードのスタイルは変更されているままなのに「未保存*」のフラグも消えてしまいます。

    改行コードの変更を Undo できるようにしてしまえばよさそうですが、個人的には検索ダイアログに改行つきの文字列を放りこむ前に \r が付かなくなるよう LF にしてから D&D したりという使い方でしか改行コードをいじらないので、「書きかえ禁止」でも改行スタイルを変更できて、改行スタイルの変更で「未保存*」フラグがつかないほうが嬉しいです。 :P

    ...ご確認とご検討お願いします。

     |  sukemaru  |  返信
  5. 検索のハイライト機能は「検索ダイアログの文字列、オプション項目を維持する」オプションには含まれません。確かに検索にまつわる機能ではありますが勘違いなさっていると思います。

    meFindKeepOptions オプションを設定していたとしても、検索を実行したわけですから最新の検索結果をハイライトするのが当たり前です。
    もしもこれを怠り、前回の検索結果をハイライトしたままになっていたら、普通の人は「あれ?検索に失敗したかな?どうして?」と思います。
    基本的な原則、イロハのイですので不具合だと言われるでしょう。
    人によって異なる操作上の好き嫌いという問題でもありません。

    また、検索のハイライトは自由に消すこともできますし、特定の文字を目立たせたいのであれば強調表示やマーカーが用意されています。前回の検索結果を目立たせるための仕組みはすでに準備されています。

    さらにいえば、ハイライトの復帰はマクロで実現できた訳ですよね?マクロの出来はマクロ作者自身が責任を負う所だと思いますので、個人のマクロが「ちょっと面倒」くらいの理由で注文を付けるのは筋違いかと思います。

    > あらかじめあった検索ハイライトを復帰させるべきかどうかについては(日ごろ検索ハイライト機能をほとんど利用していないので)... お任せいたします。 :)

    であれば、なぜ要望をしたのかと思います。

    > 個人的には検索ダイアログに改行つきの文字列を放りこむ前に \r が付かなくなるよう LF にしてから D&D したりという使い方でしか改行コードをいじらない

    検索のためにわざわざ改行コードを変更???\rを消せばいいだけなのに?
    いちゃもんを付けたいがために問題を捏造していませんか?

    sukemaruさんはフォーラムにおいて頓珍漢な質問をして却下されるということを繰り返しているように見えます。それだけであれば不慣れな方なのかな?で済まされると思いますが、さらに却下された事を蒸し返すということも繰り返しているように見えます。

    この問題もそうではないですか?あたかも今気づいたかのように要望されていますが、以前、却下されていますよね?このような態度はKuro様はじめ、このフォーラムを利用するすべての人に対して失礼だとは思いませんか?

     |  Angel  |  返信
  6. >> Angel さん、sukemaru さん

    ご意見ありがとうございます。

    検索ハイライトにつきましては Angel さんご指摘のとおり、検索したあとに検索ハイライトが変更されないのは不自然だと思いました。前回の sukemaru さんへの回答で書きましたが、たぶん反対意見もあるだろうと思っていましたので、ここの仕様は慎重に検討させていただきたいと思います。

    >> sukemaru さん

    ご意見は今後の開発の参考にさせていただきたいと思います。

    しかしながら、フォーラムをご利用の際は他のユーザーさんのご迷惑にならないよう、また、管理上の都合もございますので、フォーラム上部にある「ご利用前に必ずお読みください」のリンクをクリックしていただき、ご一読いただきますようご協力お願いいたします。

    ここは「カスタマーサービス」ではありませんし、苦情を受け付ける窓口でもありません。ユーザーさんが参加して情報交換するフォーラムです。

    ご質問、ご意見、ご要望、不具合のご報告、問題点の議論や助言など、投稿内容に制限は設けていませんが、思いつきなどではなく、ご投稿の前に内容を見直していただき、節度ある発言をお願いいたします。

    特に、「1 つのトピックに 1 つの質問」ということでお願いいたします。複数の質問がある場合でも連続してのご投稿は控えてください。問題は 1 つづつ解決していくほうが効率的ですし、他のユーザーさんも質問しやすい空気が作れます。

    他のユーザーさんのトピックに対して返信する場合も、同じ問題についての的確な回答が分かる場合のみ、要点をまとめてから投稿していただくようご協力ください。

    あと、MeryWiki のマクロライブラリへのご投稿につきましても、少々、ご投稿が多すぎるように見受けられます。

    実験的なマクロや明らかに他のユーザーさんが使わないようなマクロは「マクロライブラリ」のページではなく別のページに集約するなど、他のユーザーさんのご迷惑にならないようご配慮いただければ幸いです。

    フォーラムに参加されるユーザーさんが安心できるような空気を作り、建設的な情報交換ができるよう、ご協力いただければ幸いです。

     |  Kuro  |  返信
  7. meFindKeepOptions を要望した一人としては、sukemaru さんの仰る「ハイライトも変更されないでほしい」に1票です。

    このオプションを要望した動機は、Mery の強力な検索置換機能を頼りたい場面があるけれど、検索置換設定を変更してしまう(元に戻す手段がない)ので、ユーザーの設定をマクロ側の都合で変更しない手段が欲しい(ユーザーの環境を守りたい)からでした。
    ※たとえば過去、「ひらがな/カタカナ変換」を矩形範囲でも実現するマクロのために検索置換機能を頼ったことがあります。なぜならマクロで矩形範囲を加工できるのは検索置換機能しかなかったからです。しかし、かなカナ変換するだけで検索置換設定が変わってしまうことに悩み、公開を断念しました。同じく、数値を増減、連番を挿入などのマクロの矩形対応も見送った経緯があります。

    「検索結果のハイライト」も検索行為から生じる環境の一部と考えられます。
    ユーザーの環境を変えたくない、という目的からすれば「あれ?ハイライトは変わっちゃうの?」と疑問に思うのは当然ですし、「ハイライトも変更されないでほしい」という要望は自然なものではないでしょうか。

    > 特定の文字を目立たせたいのであれば強調表示やマーカーが用意されています。前回の検索結果を目立たせるための仕組みはすでに準備されています。

    いえ、マクロから強調文字列やマーカーを操作する仕組みは用意されていません。マクロリファレンスにもそれらしき記述は見当たりません。
    …もしかして、前回の検索結果を目立たせたいのなら「ハイライトを維持してほしい」と要望するより「強調文字列やマーカーをマクロで操作したい」と要望すべき、ということなのでしょうか。

    ただ、そもそも私が(そして多分 sukemaru さんも)念頭に置いているのは「前回の検索結果を目立たせる」ことではなく「設定環境をマクロ作者側の勝手な都合で変えない」ことです。
    検索置換の設定を変えないために強調文字列やマーカーの設定を変えるのは、手段として遠回りですし、本末転倒に感じられます。

    > 前回の検索結果をハイライトしたままになっていたら、普通の人は「あれ?検索に失敗したかな?どうして?」と思います。

    私の想像力不足かもしれませんが、その心配は杞憂かと思います。
    現状で発生しうる状況としては以下の3パターンが考えられますが、

    1. meFindKeepOptions を利用しない(通常の検索置換動作)
    → 検索置換設定:変わる、ハイライト:変わる
    2. meFindKeepOptions を利用する
    → 検索置換設定:変わらない、ハイライト:変わる
    3. meFindKeepOptions を利用して、ハイライト変更対策をする
    → 検索置換設定:変わらない、ハイライト:変わらない

    meFindKeepOptions は通常の検索置換では利用できないので、普通は 1 の状況しか発生しません。
    むしろ 2 や 3 の状況で普通の人が困惑するとしたら、統一感のない 2 の状況のほうではないかと思うのです。

    検索置換設定を変えずにハイライトだけ変えるという利用法は考えられますが、具体的な活用法が思い浮かびませんし、ハイライトを変えたくないなら対策が必須という欠点を補えるほどか、と考えるとデメリットが勝るように思えます。
    ハイライトだけ変えたい=特定の文字を目立たせたい、とするなら、2 の状況こそマーカーでやる案件ではないでしょうか。

    追伸。いっそのこと meFindKeepHighlight オプションを追加してみるとか。

     |  masme  |  返信
  8. > いえ、マクロから強調文字列やマーカーを操作する仕組みは用意されていません。マクロリファレンスにもそれらしき記述は見当たりません。
    > …もしかして、前回の検索結果を目立たせたいのなら「ハイライトを維持してほしい」と要望するより「強調文字列やマーカーをマクロで操作したい」と要望すべき、ということなのでしょうか。

    そんな話はしていません。特に「マクロから」なんて一言も言っていません
    言葉通り、ただの一般ユースの話です
    特定の文字を目立たせたいのであれば、(ユーザーが)強調表示やマーカーを使うでしょうから、マクロがハイライトの復帰なんて余分なことをする必要はないという意味です

    > ただ、そもそも私が(そして多分 sukemaru さんも)念頭に置いているのは「前回の検索結果を目立たせる」ことではなく「設定環境をマクロ作者側の勝手な都合で変えない」ことです。

    マクロ製作者の素晴らしい配慮かのように聞こえますが欺瞞ですね
    現状、検索ダイアログ内の設定は壊れましたか?壊れてないですよね?
    meFindKeepOptions によって守られています。meFindKeepOptions は必要十分な役割を果たしています。

    ハイライトは全く次元の異なる話です。と言ってもおそらく理解できない状態なんだろうと思います。前回、「検索オプションには含まれない」と明言したにも関わらず伝わってないようですから。話の角度を変えますね

    Meryに限らず一般的に検索を次々実行した場合、最新のものがハイライトされます。どんどん切り替わっていくわけですね。過去の検索結果も併せてハイライトが追加されていくようなソフトウェアは存在しますか?無いですよね?

    こんなことをわざわざ説明する人はいません。誰もが当たり前に感じ、受け入れる暗黙の了解、規範、原則と呼ばれる類のものです。
    法律でもプログラミングでも原則があれば例外があります。むしろ例外がたくさんあって複雑なわけですが、例外は例外と認められるための理由がそれぞれあるのが普通です。

    『検索は最新だけをハイライトする』これが原則です。
    何故か?【ハイライトが蓄積したら訳がわからなくなるから】です

    私なんかに言われるまでもなくmasmeさんも当然ご承知のことだと思います。にもかかわらず、原則破りを要望してしまっている。それは何故か?おそらく過去の経緯で、考え過ぎたためだと思います。マクロ製作者が陥ってしまう症状です。これは自覚するのが大変難しい所が厄介ですが、今ここでそれを明らかにし、リセットしなければ永遠に理解することはできないでしょう。
    過去の経緯の中で様々な可能性を考え、手段を模索し続け過ぎた結果、明後日の方向で落とし穴に嵌っています。

    ・「ひらがな/カタカナ変換」
    ・数値を増減
    ・連番を挿入

    一度落ち着いて、頭をまっさらにして、よく考えてください
    これらのマクロを実行してハイライトするべきは何ですか?出来る出来ないは関係ないですよ?ユーザー目線で、何をハイライトすれば、わかりやすいですか?

    「ここをひらがなに変換したよ」「カタカナに変換したよ」
    「この数値が減ったよ」「この数値が増えたよ」
    「ここに連番が挿入されたよ」

    真にハイライトするべきはこれらではないですか?違いますか?
    特に矩形選択内に複数の実行結果があるのであれば、わかりやすくハイライトしないとどれが実行結果だか、わからないですよ?
    どうですか?ご自身が落ちた穴が見えてきましたか?
    前回の検索結果がどうしたって?どうでも良いでしょう?
    本筋はここです。それ以外は筋違いです。何故ならこれらのマクロの主たる目的だからです。
    むしろ前回の検索ハイライトは消さなくてはなりません。何故なら【ハイライトが蓄積したら訳がわからなくなるから】です。
    単純明快でしょう?

    実際に、実現するとすれば検索ハイライトでもマーカーでも難しいと思います、マクロと無関係の部分まで巻き込むでしょうし。今のMeryなら複数選択範囲が最も近いでしょうか?しかし複数範囲は「ハイライト」でもあり、「選択状態」でもありますから、続けて文字を打つとせっかくの実行結果が壊れてしまいます。
    うまく実現できればそれでよし、出来なければ、それをこそ要望すべきなんです。
    どうするかは知りませんが、筋違いの要望では、原則を破って例外を認めさせるほどでは無いということです

    > 対策が必須という欠点

    これもすでに言っていますが、対策すれば現状でも実現できるわけですよね?

    どうしてもやりたいことがあって、でも出来ないから要望するならわかりますが、対策できるんですよね?ならやればいいのではないでしょうか?無意味だとは思いますけれど。
    マクロ側で引き受けるべき事項であり、要望すべき事項ではないと思います。

     |  Angel  |  返信
  9. @ Kuro さん
    1.本トピックに複数の質問等をまとめたことについて、お詫び申し上げます。
    質問する側の勝手な判断で同種の内容であろうからとまとめてしまいましたが、対応する Kuro さんにおかれてはそれぞれ別個のものとして確認・検討なさるべき案件ということですね。

    2.Kuro さんを不愉快な気持ちにさせてしまったことは申しわけありませんが、私の書き込みの目的は指摘した内容がそれぞれ Kuro さんの開発意図どおりのものなのかという確認のためです。
    ご返信のお手間をとらせてしまいますが、至急解決してくださいと申しているわけではありませんし、DuplicateLine メソッドの例のように Kuro さんが変更すべきと判断なさる場合もありますから、ご確認やご検討をお願いすること自体が無意味であるとはおもいません。
    個人的な事情や心情を書き加えたことにたいして苦言や苦情と受け止められることはかまいませんが、フォーラムで意見を述べてはならないというご指摘には疑問をかんじました。

    3.マクロライブラリに投稿したマクロについては、私にはどれが不適切であるか判断できません(投稿数の多寡で問題視される理由もよくわかりませんが)。
    とりあえず「実験的マクロ・練習マクロなど」のカテゴリの5件のリンクは「マクロライブラリ」トップから削除または移動しました、
    お手数をおかけしますが、ほかにも問題のあるものがありましたら具体的にご指摘いただければ、同様にリンクを削除または移動します(あるいは管理人さんの権限でページごと削除していただいてもかまいません)。

    @ masme さん
    ありがとうございます。
    変更行のマーカーやブックマーク、スクロールバーマーカーなど、Mery 本体のインターフェイスが便利なものとなってきていますから、マクロの投稿にあたっては、広範囲の文字列を一括操作するマクロでもなるべく余計な形跡を残さないですむようにしたいところですよね。
    BeginUndoGroup() で 1 UNDO が可能になったこともあって、JavaScript(私のは JScript ですが)でコードを作るよりも Mery 本体の機能を利用するほうが「シンプル! 強力! 速い!」という状況になりましたから、Mery 本体のマクロ用メソッドやプロパティがよりいっそう便利になることに期待したくなってしまうんですよね…。

    @ Anger さん
    マクロで使用した meFindKeepOptions が検索ハイライトを残すべきかどうかや、あるいはマクロ実行前の検索ハイライトの ON/OFF 状態まで維持・復帰させるべきかどうかは Kuro さんが慎重にご検討すると仰っています。
    この場で Anger さん以外の方が意見表明をすることもそれぞれ Kuro さんのご判断の材料となるものとおもいますので、他の方の意見や提案を頭ごなしに否定する必要はないとおもいます。

     |  sukemaru  |  返信
  10. >> sukemaru さん

    ご返信ありがとうございます。しかしながら、問題点はそこではありません。

    フォーラムで意見を述べてはいけないと言っているわけではなく、不快に思われているかたもいますので、節度をわきまえた発言をしていただくようお願いしています。

    苦言や苦情と受け止められることはかまわない、ではなく、そう受け取られないような発言をしていただきたいのです。

    その具体的な方法としてご案内したのが「1 トピックに 1 つの内容」であり、「連続での投稿は控えてください」であり、「要点をまとめて的確に」であり、「ご利用前に必ずお読みください」です。

    これを意識していただけるだけでも投稿内容は簡潔になりますし、苦情として受け取られることも少なくなるのではないかと思います。

    マクロライブラリにつきましては、マクロライブラリのトップにある 186 件のマクロのうち sukemaru さんの名前が書かれているものが 52 件もあります。

    フォーラムや MeryWiki は他の利用者さんも参加しますし、インターネット上に公開されており、多くの人が閲覧します。

    特に投稿数に制限を設けているわけではありませんが、一人のユーザーが大量に投稿する行為は、ネットワーク上のコミュニティにおいては参加者の不快感を招く恐れがあります。

    また、Angel さんのご投稿はその理由が丁寧に説明されており、頭ごなしに否定しているものではないと思います。

    どうか他の利用者さんへの配慮を大切にしていただき、場の空気を壊さないようご協力お願いいたします。

     |  Kuro  |  返信
  11. > 「ここをひらがなに変換したよ」「カタカナに変換したよ」
    > 「この数値が減ったよ」「この数値が増えたよ」
    > 「ここに連番が挿入されたよ」
    > 真にハイライトするべきはこれらではないですか?違いますか?

    その理屈で言えば、Mery に標準搭載されている [編集]→[選択範囲の変換]→[大文字/小文字に変換] などは、
    「ここを大文字に変換したよ」「小文字に変換したよ」
    とハイライトされるべきではないか、とも言えるわけですが、それはおかしくありませんか?

    検索してない(変換しただけな)のに検索ハイライトが変わるなんて、普通の人が期待する動作でしょうか。
    文字種変換、数値の増減、連番の挿入…それらを実行しただけで「なぜハイライトが変わるの? 検索と関係ないじゃん」というのが普通の人の反応だと思います。
    マクロ作者が「検索置換が必要な箇所があって…」と釈明しても、普通の人にとっては知ったことではないでしょう。

    > ハイライトが蓄積したら訳がわからなくなる

    ああ…食い違いの原因が見えてきました。
    Angel さんは、前回のハイライトを「残し」た上で追加でハイライトしてくれ、という要望だと思っているのですね?
    違います。まったく違います。そんなことは微塵も要望してません。
    私が要望しているのは、マクロでの検索結果を「残さない」(ハイライトしない)でくれ、ということです。

    meFindKeepOptions に相当する機能を要望した際、私は次のような名称案を出していました。
    「meFindReplaceOffRecord」――この検索置換はオフレコで頼む。記録しないでくれ。
    つまり、私が meFindKeepOptions に期待していたのは、マクロで検索置換を実行しても、検索置換設定やハイライトには一切影響を及ぼさない、ということです。最新の検索内容は、マクロ実行前の状態のままにしたい、ということです。
    それが「変えない」という言葉の意味です。

    食い違いを避けるため、もっと具体的に、以下のマクロと例文で説明しましょう。
    ■マクロ(選択範囲内のカタカナをひらがなに変換する)
    ※動作環境: Mery 3.0.1 以降

    new function ひらがなに変換() {
      var Sel = Document.Selection;
      var txt = Sel.Text.replace(/[^ァ-ンヽヾ\n]+|\n+/g,"\n").replace(/^\n|\n$/,"");
      if (!txt) { Status = "変換対象がありません"; return; }
      BeginUndoGroup();
      var a = txt.split("\n");
      var b = txt.replace(/[ァ-ヶヽヾ]/g,function(s){return String.fromCharCode(s.charCodeAt(0)-0x60)}).split("\n");
      for (var i=0; i<a.length; i++) if (a[i] !== b[i]) {
    //    Sel.Replace(a[i], b[i], meReplaceSelOnly+meReplaceAll); //meFindKeepOptions を利用しない場合
        Sel.Replace(a[i], b[i], meReplaceSelOnly+meReplaceAll+meFindKeepOptions); //利用する場合
        for (var j=i+1; j<a.length; j++) if (a[i] === a[j]) { a.splice(j,1); }
      }
      EndUndoGroup();
    };

    ■例文

    a.ABC  b.ABC  c.イロハ  d.イロハ

    まず、下記の内容で検索を行います。
     検索文字列: ABC
     オプション: ☑大文字と小文字を区別する
    当然ながら「ABC」の文字がハイライトされます(a. と b. の2箇所)。

    次に、c. の「イロハ」の文字を選択してマクロを実行します。
    マクロにより、c. の「イロハ」は「いろは」に変換されます。
    問題は、マクロ実行後、検索設定とハイライトがどうなるかです。

    1. meFindKeepOptions を利用しない場合
     検索文字列: ABC → イロハ
     オプション: ☑大文字と小文字を区別する → オフに変更
     ハイライト: ABC → イロハ
    (「ABC」のハイライトが消え、d. の「イロハ」がハイライトされる)

    2a. meFindKeepOptions を利用する場合(現在の仕様)
     検索文字列: ABC ※変更なし
     オプション: ☑大文字と小文字を区別する ※変更なし
     ハイライト: ABC → イロハ (上記 1. と同様)

    2b. Angel さんの想像上の私が要望しているであろう挙動
     検索文字列&オプション: ※変更なし
     ハイライト: ABC → ABC、イロハ
    (「ABC」のハイライトに加え「イロハ」もハイライトされる)

    3. 現実の私(とおそらく sukemaru さん)が要望している挙動
     検索文字列&オプション: ※変更なし
     ハイライト: ABC ※変更なし
    (「ABC」のハイライトは変わらない。「イロハ」はハイライトされない)

    余談. マクロではなく [編集]→[選択範囲の変換]→[半角に変換] を実行した場合
     c. の「イロハ」は「イロハ」に変換される。
     検索文字列&オプション: ※変更なし
     ハイライト: ABC ※変更なし
    (文字種変換しただけなので当然、検索設定もハイライトも変わらない)

    今一度、お伺いします。
    Angel さんは現在の仕様(2a. の状況になること)を望ましいと思いますか?
    検索文字列は「ABC」だけど「イロハ」がハイライトされるほうが良いですか?

    私は、現在の仕様を望ましいと思えなかったから、sukemaru さんの要望に賛同しました。
    検索文字列が「ABC」なのだから「イロハ」がハイライトされるのは不自然だろうと考えました。
    マクロ側で対策はできるものの、その手間に見合うほどのメリットがある仕様かといえば、デメリットのほうが勝る、と判断しました。

    皆様方はどう考えますか?

    >> Kuro さん

    Kuro さんのブログからコメント欄がなくなったのも、話題が乱立して追い切れないことが原因だったと記憶していますので、1つのトピックに1つの話題という方針は承知しております。
    今回は meFindKeepOptions への要望がこのトピックで始まったため、こちらに書き込ませていただきましたが、新たなトピックを設けたほうがよいでしょうか。このまま話を続けたほうがよいでしょうか。他の方のご意見も伺えればと思います。

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

    meFindKeepOptions については、すでにご意見が投稿されていることもありますのでトピックを増やさず、ここで行きましょう。

    その他の項目についてご意見がある場合は、お手数をおかけしますが別のトピックを作成していただきますようご協力お願いします。

    さて、私もいちユーザーとして意見を言わせていただきますと、私は Angel さんのご意見に 1 票です。

    もちろん、マクロを作成する上で手間がかかってしまうというご意見もわかります。

    しかしながら、ポイントは Angel さんがご指摘されている「一般ユース」と「最新の検索結果をハイライトするのが当たり前」という部分です。

    マクロ機能は本来、操作を記録してそれを自動的に実行するための機能です。

    一般的な使い方としては、[マクロの記録] で操作を記録するところから始まります。

    そこで [検索] の操作を記録したとします。

    document.selection.Find("あ", meFindNext);

    すると ↑ のような感じで記録されるわけですが、ここでユーザーさんは「検索オプションは維持したい」と思い、meFindKeepOptions を付けます。

    document.selection.Find("あ", meFindNext | meFindKeepOptions);

    すると、検索オプションが維持されたまま検索が実行されるわけですが、検索したにも関わらずハイライトが前回検索したものを指した状態になっていると、ユーザーさんは検索に失敗したのかと思ってしまう、というわけです。

    document.selection.Find は検索をするためのメソッドであるという前提がありますから、検索ハイライトも当然、最新の検索結果に追従すべきであるというご意見はごもっともだと思いました。

     |  Kuro  |  返信
  13. 検索オプションを維持する設定でマクロを実行したときのハイライト動作について、使う側からするとどちらでも良い気がします。
    標準機能の「大文字/小文字に変換」などと比べると、ハイライトする箇所が変わらないほうが自然なのかもしれませんが、マクロでの動作はそれとは別と考えても特に違和感はありません(「私は」ですが)。

    マクロはほんのちょっとしか分かりませんが(と言うより、ちょっとだけは知っているからかもしれませんが)、マクロがやっていることは、検索して該当箇所を変換しているのだろうなーと想像できるので、マクロで使用した検索文字列がハイライトしても違和感はありません。
    ただし、まったく知識がない人にとっては違和感があるかも?とも思います。
    また、マクロ使用直後に「次/前を検索」を行うと、マクロ使用前の検索文字列で検索されるので、ハイライトされる文字列が変わるのはちょっと違和感があるかもしれません。

    どのマクロがこのことに関係するのか分かりません(ここでは、ひらがな/カタカナ変換、数値を増減、連番を挿入が挙がっていたと思います)が、そもそも、どれだけの需要があるの?と言うのが率直な感想です。
    標準機能の大文字/小文字変換はたまに、半角/全角変換は稀ではありますが使用します。
    でも、ひらがな/カタカナ変換、数値を増減は、私としては使用用途がありませんし、ましてや、検索を継続しながら使用する人がどれだけいるのか?
    連番を挿入については、たぶん手石さん作のものを半角数値でのみ付与するように編集して使用していますが、ハイライトは変わりません。
    まあ、Kuro さんは需要の有無より機能の妥当性で仕様を決めると思いますが。

    簡単に追加できるのであれば、masme さんが提案している meFindKeepHighlight オプションもアリだとは思いますが、そこまでする必要があることなのか少々疑問です。

     |  774  |  返信
  14. > document.selection.Find は検索をするためのメソッドであるという前提がありますから、検索ハイライトも当然、最新の検索結果に追従すべきであるというご意見はごもっともだと思いました。

    meFindKeepOptions を使ったマクロの後で F3 または Shift+F3 キーを押したときに齟齬が発生することや、もともとの(?) meFindKeepOptions が導入された経緯から masme さんと同じく検索ハイライトを残さないほうが使いやすいであろうとおもっていましたが、一般的な検索での利用では現状どおり meFindKeepOptions を使用した Find/Replace() メソッドの検索文字列でハイライトが残る仕様のほうが適していそうですね。

    masme さんや私が希望するようなマクロ実行前のハイライト状態の維持(または復帰)を実現する方法として、さいしょに挙げたサンプルコードのような FindRepeat(0) または FindRepeat(1) の使い方にお墨付きをいただけると安心できるのですが...。

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