◀マクロトップへ
  • 58 WSHマクロ5題1
    • 59 WSHマクロ5題 2
      • 60 WSHマクロ5題3
        • 61 RE: WSHマクロ5題
          • 62 RE2: WSHマクロ5題
  • [58] WSHマクロ5題1 しみづ 2004年01月27日 09:51


     ブロックコメント関係(コメントアウト、選択、解除)、括弧の選択、改行までの選択のWSHマクロを作ってみました。
     WSHマクロが使える環境の人がどれくらいいるのか……。

    【addcomm.js】
    // 選択部分をブロックコメント"/*""*/"で囲むWSHマクロ

    var inp = Editor.GetSelectedString(0);
    var len = inp.length+4;
    var crlf = 0;
    var rc;
    var i;

    for ( i = 0; ; i++ ) { // 改行カウント
    rc = inp.indexOf("\n", i);
    if ( rc == -1 )
    break;
    crlf++;
    i = rc;
    }
    len -= crlf; // 改行数を長さから引く
    inp = "/*" + inp + "*/";
    Editor.InsText(inp); // 変更
    for ( i = 0; i < len; i++ ) { // 変更部分を選択
    Editor.Left_Sel();
    }

    【delcomm.js】
    // 選択部分の先頭と最後を2文字づつ削除するWSHマクロ

    var inp = Editor.GetSelectedString(0);
    var len = inp.length-4;
    var outp = inp.substr(2, len);
    var crlf = 0;
    var rc;
    var i;

    for ( i = 0; ; i++ ) { // 改行カウント
    rc = inp.indexOf("\n", i);
    if ( rc == -1 )
    break;
    crlf++;
    i = rc;
    }
    len -= crlf; // 改行数を長さから引く
    Editor.InsText(outp); // 改行数を長さから引く
    for ( i = 0; i < len; i++ ) { // 変更部分を選択
    Editor.Left_Sel();
    }
    • [59] WSHマクロ5題 2 しみづ 2004年01月27日 10:01


      【commsel.js】
      // カーソル位置からさかのぼってブロックコメント"/*"を探し、そこから"*/"までを選択するWSHマクロ
      // ※ファルイ先頭行・最終行にあるコメントは選択できません

      var inp = " ";
      var type = " ";
      var last = 99;
      var i = 0;
      var tmp = " ";
      var crlf = 0;
      var rc = 0;

      Editor.MoveHistSet();
      Editor.GoFileEnd();
      last = Number(Editor.ExpandParameter("$y")); // 最後の行数を取得
      Editor.MoveHistPrev();
      for ( ; ; ) { // /*をさかのぼって検索ループ
      Editor.Left_Sel();
      inp = Editor.GetSelectedString(0);
      tmp = inp.substr(0, 1); // 頭の一文字を取得し
      if ( -1 != tmp.indexOf("*", 0) ) { // *なら
      type = "*";
      }
      else if ( -1 != tmp.indexOf("/", 0) ) { // その前が/か調べる
      if ( type == "*" ) {
      type = "/";
      break;
      }
      }
      else {
      type = " ";
      }
      if ( 1 == Number(Editor.ExpandParameter("$y")) ) // ファイル先頭にきたらやめる
      break;
      }

      if ( type == " " ) { // 見つからなかったら戻る
      Editor.MoveHistPrev();
      }
      else { // 見つかったら
      Editor.Left(); // 選択をやめて
      for ( i=0; ;i++ ) { // */を検索ループ
      Editor.Right_Sel();
      inp = Editor.GetSelectedString(0);
      tmp = inp.substr(i, 1); // 次の一文字を取得し
      if ( -1 != tmp.indexOf("\n", 0) ) { // 改行は選択にスキップされるので、次の一文字を取り直し
      i++;
      tmp = inp.substr(i, 1);
      }
      if ( -1 != tmp.indexOf("*", 0) ) { // *なら
      type = "*";
      }
      else if ( -1 != tmp.indexOf("/", 0) ) { // その前が/か調べる
      if ( type == "*" )
      break;
      }
      else {
      type = " ";
      }
      if ( Number(Editor.ExpandParameter("$y")) >= last ) { // ファイル最後にきたらやめて戻る
      Editor.Left();
      break;
      }
      }
      }
      • [60] WSHマクロ5題3 しみづ 2004年01月27日 10:02


        【brasel.js】
        // カーソル位置から選択を開始し、最初に見つけた(か{の対括弧までを選択するWSHマクロ
        // 括弧以前も選択できることにより、例えば関数呼び出し部分を全部選択できる
        // また、(を判定して抜ける処理部分をコメントアウトして作り直しておけば、最初に見つけた{の対括弧までを選択するため、関数定義を全部選択できる
        // ※ファルイ最終行にある括弧は選択できません

        var inp = " ";
        var type = " ";
        var last = 99;
        var tmp = " ";
        var i = 1;

        Editor.MoveHistSet();
        Editor.GoFileEnd();
        last = Number(Editor.ExpandParameter('$y')); // 最後の行数を取得
        Editor.MoveHistPrev();
        Editor.BeginSelect();
        for ( i=0; ; i++ ) { // (か{を検索ループ
        Editor.Right();
        inp = Editor.GetSelectedString(0);
        tmp = inp.substr(i, 1); // 次の一文字を取得し
        if ( -1 != tmp.indexOf("\n", 0) ) { // 改行は選択にスキップされるので、次の一文字を取り直し
        i++;
        tmp = inp.substr(i, 1);
        }
        if ( -1 != tmp.indexOf("{", 0) ) { // {を判定
        type = "{";
        break;
        }
        if ( -1 != tmp.indexOf("(", 0) ) { // (を判定
        type = "(";
        break;
        }
        if ( Number(Editor.ExpandParameter("$y")) >= last ) // ファイル最後にきたらやめる
        break;
        }
        if ( type == " " ) { // 見つからなかったら戻る
        Editor.MoveHistPrev();
        }
        else { // 見つかったら
        if ( i > 0 ) // いきなり最初で見つかったのでなかったら
        Editor.Left(); // 一つもどって
        Editor.BracketPair(); // 対括弧まで行って
        Editor.Right(); // 選択
        }

        【endsel.js】
        // カーソル位置から選択を開始し、最初に見つけた改行までを選択するWSHマクロ
        // ※ファルイ最終行は選択できません

        var inp = " ";
        var last = 99;
        var tmp = " ";
        var i = 1;

        Editor.MoveHistSet();
        Editor.GoFileEnd();
        last = Number(Editor.ExpandParameter('$y'));
        Editor.MoveHistPrev();
        Editor.BeginSelect();
        for ( i=0; ; i++ ) {
        Editor.Right();
        inp = Editor.GetSelectedString(0);
        tmp = inp.substr(i, 1);
        if ( -1 != tmp.indexOf("\n", 0) ) { // 改行
        Editor.Left();
        Editor.Left();
        break;
        }
        if ( Number(Editor.ExpandParameter("$y")) >= last )
        break;
        }
        • [61] RE: WSHマクロ5題 もか 2004年01月28日 00:15

          >// ※ファルイ最終行にある括弧は選択できません
          以下のように変更すれば、最終行でも選択できそうです。(未実験ですので注意)
          ただし、sakura 1.4.2.0以上専用です。

          >Editor.GoFileEnd();
          >last = Number(Editor.ExpandParameter('$y')); // 最後の行数を取得
          >Editor.MoveHistPrev();
          last = Editor.GetLineCount( 0 ); // 物理行数を取得

          > if ( Number(Editor.ExpandParameter("$y")) >= last ) // ファイル最後にきたらやめる
          (省略) > last )
          • [62] RE2: WSHマクロ5題 しみづ 2004年01月28日 07:13

            もかさん
             反応ありがとうございます。動いたのでしょうか、これらのマクロ。意味がないことしてるような。

            >>last = Number(Editor.ExpandParameter('$y')); // 最後の行数を取得
            >last = Editor.GetLineCount( 0 ); // 物理行数を取得

             提案ありがとうございます。テストしてみるかもしれません。二つの処理は返ってくるものが違うのかどうか。

            >> if ( Number(Editor.ExpandParameter("$y")) >= last ) // ファイル最後にきたらやめる
            >(省略) > last )

             ファイルエンドを超えた場合に、何が返ってくるのかがはっきりしないので、その手前でやめる事にしたのです。
             最後にあるものを扱うのはなかなかないとも思いましたし、そこはあまり追求する気がなかったのです。ループに陥るのは嫌ですし。(ちなみに、最後というのは行末にEOFが直接ついている行です)
             必要な場合に出会ったら、試してみたいと思います。
             つれない返事ですみません。