◀ANSI版開発トップへ
  • 4433 マクロからアウトプットウインドウへ出力
    • 4434 RE: マクロからアウトプットウインドウへ出力
      • 4437 Re2: マクロからアウトプットウインドウへ出力
        • 4438 Re3: マクロからアウトプットウインドウへ出力
          • 4441 Re4: マクロからアウトプットウインドウへ出力
            • 4442 Re5: マクロからアウトプットウインドウへ出力
              • 4446 Re6: マクロからアウトプットウインドウへ出力
                • 4448 Re7: マクロからアウトプットウインドウへ出力
                  • 4455 Re8: マクロからアウトプットウインドウへ出力
                    • 4499 Re9: マクロからアウトプットウインドウへ出力
  • [4433] マクロからアウトプットウインドウへ出力 maru 2006年04月23日 14:16

    >>data:5188にちょっと関連して
    マクロから別のウインドウに出力するような機能が
    時々要望としてあがるので、アウトプットウインドウに出力
    するマクロ関数を作ってみました。
    共有フォルダ:Developer/Source/MacroTraceOut.diff

    integer S_TraceOut ( S1 );

    S1: 出力したい文字列
    戻り値: 出力文字列長
    • [4434] RE: マクロからアウトプットウインドウへ出力 げんた 2006年04月24日 00:50

      PPAとJavaScriptで試しましたが動作は問題ないようですね.
      ▼PPA
      var
      a, i : Integer;
      begin
      a := S_TraceOut( 'TEST of TraceOut' );
      for i := 0 to 5 do
      begin
      a := a + S_TraceOut( IntToStr( a ) + ' Printed.' );
      end;
      end

      ▼JavaScript
      var a, i;
      a = Editor.TraceOut( 'TEST of TraceOut (JavaScript)' );
      for( i = 0; i < 5; i++ ){
      a += Editor.TraceOut( a + ' Printed.' );
      }

      -----
      気付いたこと
      *関数型なのでノーマルのマクロでは使えない
      *PPAでは引数は文字列のみ.数値はIntToStrで変換が必要
      *JavaScriptでは数値も引数に与えられる
      *1行出力毎に自動的に復帰改行が入る
      *返される文字数には復帰改行は含まれない

      ノーマルのマクロでは固定文字列しか与えられずあんまり使用価値が無いので関数として定義することに特に問題はないでしょう.
      でも,出力文字数を知りたいのはどのようなときでしょうか?
      • [4437] Re2: マクロからアウトプットウインドウへ出力 maru 2006年04月25日 01:13

        ▼ げんたさん
        レスありがとうございます。
        > PPAとJavaScriptで試しましたが動作は問題ないようですね.
        > 気付いたこと
        > *関数型なのでノーマルのマクロでは使えない
        > *PPAでは引数は文字列のみ.数値はIntToStrで変換が必要
        > *JavaScriptでは数値も引数に与えられる
        > *1行出力毎に自動的に復帰改行が入る
        > *返される文字数には復帰改行は含まれない
        いつもお手数おかけいたします。

        > でも,出力文字数を知りたいのはどのようなときでしょうか?
        えっと、CMacro::HandleFunctionのコメントに
        *値を返す関数を処理する
        と書いてあったので、何か値を返すべきかと思って無理やり…。
        特に意味はありません。
        • [4438] Re3: マクロからアウトプットウインドウへ出力 げんた 2006年04月25日 01:48

          >*値を返す関数を処理する
          >と書いてあったので、何か値を返すべきかと思って無理やり…。
          なら別に普通の値を返さないタイプのマクロで良かったのでは?
          ノーマルのマクロでの使い道は無さそうではあるけれどもムリに排除する必要もないかと.
          • [4441] Re4: マクロからアウトプットウインドウへ出力 maru 2006年04月26日 23:50

            ▼ げんたさん
            > なら別に普通の値を返さないタイプのマクロで良かったのでは?
            他に習い値を返さないタイプに直しました。
            また改行コードを付加しないように変更しました。

            共有フォルダ:/Developer/Source/MacroTraceOut2.diff

            たとえば引数に空文字列を渡されたときは
            クリップボードの内容(もしくは選択文字列)を出力する
            ような機能をつければキーマクロからでも
            使途がありそうですが、今のところは現状で満足です。
            • [4442] Re5: マクロからアウトプットウインドウへ出力 げんた 2006年04月29日 02:42

              細かくてすいませんが
              >他に習い値を返さないタイプに直しました。
              コマンドからは使われないので,32768以上の値を割り当てたい...

              >また改行コードを付加しないように変更しました。
              改行があるのと無いのではどちらが便利なんでしょうか.
              素のマクロでは改行を特殊文字で与えられないので改行できないと言うのもちょっと気になる.
              TraceOutに出すのはデバッグ用の文字列で,そうであればその都度勝手に改行してくれた方が便利,というのは浅はかかな?
              TraceOutとTraceOutlnの両方を用意する案もありますが.

              >たとえば引数に空文字列を渡されたときは
              >クリップボードの内容(もしくは選択文字列)を出力する
              これは本当の空文字列と区別が付かなくなるのであまり良い仕様では無いと思います.
              • [4446] Re6: マクロからアウトプットウインドウへ出力 maru 2006年04月29日 17:39

                ▼ げんたさん
                > 細かくてすいませんが
                いえいえ、アドバイスありがとうございます。

                > コマンドからは使われないので,32768以上の値を
                と思って32802にしましたが、もっと大きな値ですか?

                > 改行があるのと無いのではどちらが便利なんでしょうか.
                > 素のマクロでは改行を特殊文字で与えられないので
                「素のマクロ」とは*.ppaの意味ですか?
                改行を与えられないとは予定外でした。
                やっぱり勝手に改行が付くようにいたします。

                > >たとえば引数に空文字列を渡されたときは
                上記に関連して、PPAで改行だけの行を送信するためには
                空文字列を渡すしかないので、このような仕様は
                不適切ですね。
                • [4448] Re7: マクロからアウトプットウインドウへ出力 げんた 2006年04月29日 20:58

                  >> コマンドからは使われないので,32768以上の値を
                  >と思って32802にしましたが、もっと大きな値ですか?
                  すいません.見間違えました.
                  他のコマンドの隙間に入っているような気がしたんですが,よく見たらコマンドの末尾でしたね.

                  >> 素のマクロでは改行を特殊文字で与えられないので
                  >「素のマクロ」とは*.ppaの意味ですか?
                  >改行を与えられないとは予定外でした。
                  >やっぱり勝手に改行が付くようにいたします。
                  素のマクロというのは.mac のことです.素のマクロで使い道があるとすれば外部コマンドを連続して実行した結果をアウトプットに取り込む場合で,コマンドの出力の間に何か区切りを入れたい場合ですかね.
                  エディタに文字を入力する場合は1文字ずつ文字コードで与える方法が用意されているので改行も入れられますが,今回は文字列しか与えられないのでできません.

                  ppaでは一応与えることは出来ますが,文字列中で\r\nといった書き方が出来ず,
                  文字列連結として+ #13 + #10 と毎回書かなくてはならなくてちょっと煩雑かなと.
                  (変数に入れればもう少し短くはなりますが.)
                  • [4455] Re8: マクロからアウトプットウインドウへ出力 maru 2006年05月02日 12:08

                    いろいろ考えた末、以下の仕様で作ってみました。

                    void TraceOut( S1, i1 );

                    S1:出力テキスト
                    i1:次の数値の和。
                    0x01 ExpandParameterによる文字列展開を行う
                    0x02 テキスト末尾に改行コードを付加しない

                    共有:/Developer/Source/MacroTraceOut3.diff
                    • [4499] Re9: マクロからアウトプットウインドウへ出力 げんた 2006年07月01日 20:36

                      遅くなりましたが,sakura/trunk#982でCommitしました.
                      Patches #1478468