◀ANSI版開発トップへ
  • 4501 スタートアップマクロ
    • 4502 Re:スタートアップマクロ
    • 4503 Re: スタートアップマクロ
      • 4506 Re2: スタートアップマクロ
        • 4560 自動実行マクロ
          • 4562 Re:自動実行マクロ
            • 4565 Re2:自動実行マクロ
              • 4566 Re3:自動実行マクロ
                • 4567 Re4:自動実行マクロ
                  • 4568 Re5:自動実行マクロ
                    • 4569 Re6:自動実行マクロ
                      • 4571 Re7:自動実行マクロ
                        • 4573 Re8:自動実行マクロ
          • 4579 Re:自動実行マクロ
            • 4580 Re2:自動実行マクロ
              • 4581 Re3:自動実行マクロ
    • 4582 Re:スタートアップマクロ
      • 4584 Re2:スタートアップマクロ
  • [4501] スタートアップマクロ (全略) 2006年07月03日 23:10

    ユーザのマクロ実行以外の動作をした時に実行されるマクロがあってもいいんじゃないかな思いますが、どうでしょう?

    簡単なものではスタートアップマクロとか
    一番最初に開いた時に実行されるという程度のものなら
    CEditWnd::Createの最後に

    if(m_cEditDoc.m_pcSMacroMgr->IsEnabled(0)) {m_cEditDoc.HandleCommand(F_USERMACRO_0);}

    と入れるだけです(マクロの0番を実行します)

    こういうのがあると >>data:5292 で出たようなファイルの中身を見て文字コードの変更なども
    ユーザ側で対応できるんじゃないでしょうか?
    自家製のマクロではファイル名を見て文字コード切り替えたり
    タブサイズ変えたり、ファイル先頭の #!/usr/local/bin/hoge を見て拡張子の設定変えたりさせてます

    あると便利ですよ^-^
    • [4502] Re:スタートアップマクロ maru 2006年07月03日 23:20

      ▼ (全略)さん
      > 簡単なものではスタートアップマクロとか
      ぜひとも取り入れていただきたいですね^^
    • [4503] Re: スタートアップマクロ げんた 2006年07月04日 00:34

      あると便利という点は賛成です.

      以前ちょっと考えたときは,引数でマクロファイル名を渡すことばかり考えていて結構複雑になりそうだと思っていましたが,登録マクロの1つをスタートアップマクロにするのであれば簡単に出来そうですね.

      もしかして,もう出来てます?щ(゜д゜щ)カモーン
      • [4506] Re2: スタートアップマクロ (全略) 2006年07月05日 23:35

        ▼ げんたさん
        > もしかして,もう出来てます?щ(゜д゜щ)カモーン
        マクロ0番を・・・というヤツなら自家製版で組み込んでます
        って言ってもほんとに上のコメントにある1行いれただけなんですけどね
        http://qwerty.s2.xrea.com/XA5B5A5AFA5E9A5A8A5C7A5A3A5BF2FA5B5A5AF
        A5E9A5A8A5C7A5A3A5BFXJRegex.xhtml
        の2005/10/19版ですか
        # ドキュメントで一切触れてないほどいい加減なヤツですが^^;

        自分で入れろって事ですかね
        svnの使い方覚えてみます(>_<)
        • [4560] 自動実行マクロ ryoji 2006年09月01日 23:16

          (全略)さんのコードを参考に作ってみました。

          Patches#1550557

          自動実行マクロ(3種類)に任意番号のマクロを
          割り当てられるようにしています。
          • [4562] Re:自動実行マクロ maru 2006年09月02日 12:08

            ▼ ryojiさん
            1.開くときのマクロでS_FileNewを使用すると無限ループ
            →使う人が気をつける話なので無視

            2.開くときのマクロでS_Grepを使用すると無限ループ
            →ユーザー責任とするかどうかは微妙

            3.アウトプットウインドウが表示されていない状態で開くときのマクロにS_ExecCommand(標準出力を得る)とかS_TraceOutとかを使用すると「エディタまたはシステムがビジー状態です。しばらく待って開きなおしてください。」「プロセスの起動に失敗しました」
            →これはちょっと不便な感じです


            現仕様はアウトプットウインドウもGrepウインドウも新規作成もすべて '(無題)' として、マクロ側からは同じに見えるので、マクロ側での回避は難しいです。
            • [4565] Re2:自動実行マクロ ryoji 2006年09月03日 03:34

              ▼ maruさん
              > 現仕様はアウトプットウインドウもGrepウインドウも新規作成もすべて '(無題)' として、マクロ側からは同じに見えるので、マクロ側での回避は難しいです。

              そもそもアウトプットやGrepでは自動実行しないほうがいいのかな?
              とりあえず、2や3についてマクロ側で回避できるようしたものをUpしておきました。
              自分はあまり凝ったマクロを組むことが無いので、maru さんのように評価してくださる方がいると助かります。
              • [4566] Re3:自動実行マクロ maru 2006年09月03日 17:10

                ▼ ryojiさん
                個人的にはかなり理想形です。

                ただ実際には、バグだとか不親切だとかの指摘が来そうな予感がするので、やはりryoujiさんのおっしゃる通りアウトプットやGrepでは自動実行を止めたほうがいいかも知れません。
                想像するシナリオとしては、マクロを初めて使用する人が設定を誤って、「サクラエディタが突然起動できなくなりました」とか。
                • [4567] Re4:自動実行マクロ ryoji 2006年09月04日 01:38

                  ▼ maruさん
                  > ただ実際には、バグだとか不親切だとかの指摘が来そうな予感がするので、やはりryoujiさんのおっしゃる通りアウトプットやGrepでは自動実行を止めたほうがいいかも知れません。
                  アウトプットやGrepウィンドウが開かれるときは「新規/開ファイル」マクロは自動実行しないようにしました。
                  その他細部仕様については、どんなマクロが登場するかも未知なので利用/評価してもらいながら微調整していくのがいいかな~、と思います。
                  • [4568] Re5:自動実行マクロ ryoji 2006年09月05日 00:46

                    今回の自動実行にはこれくらい欲しいだろうと思われるマクロ関数を3つ追加してみました。
                    見送りになったPatches#1542670「ExpandParameterの条件文字追加」の中にあったタイプ判別を別の関数型でできるようにしています。
                    #汎用性は持たせたつもりですが... (^^;
                    • [4569] Re6:自動実行マクロ maru 2006年09月05日 23:14

                      ▼ ryojiさん
                      きわどそうなマクロを自動実行でいろいろテストしてみて
                      いまのところ特に問題は出ていません。

                      > タイプ判別を別の関数型でできるようにしています
                      ありがとうございます!

                      ところで、S_IsSameTypeExtとS_GetSaveFileNameの
                      使いどころがいまひとつ分かりません(^^;;
                      どういう用途を想定したものでしょうか?
                      • [4571] Re7:自動実行マクロ ryoji 2006年09月06日 00:42

                        > きわどそうなマクロを自動実行でいろいろテストしてみて
                        > いまのところ特に問題は出ていません。

                        評価ありがとうございます。
                        その「いろいろ」が自分ではあまり思いつかないだけに、自信が無く...

                        > ところで、S_IsSameTypeExtとS_GetSaveFileNameの
                        > 使いどころがいまひとつ分かりません(^^;;
                        > どういう用途を想定したものでしょうか?

                        普段の自分の作業を思い返したとき、「新規」でウィンドウを開いてそこにパタパタと何か入力したり他ファイルからコピペしたあとで名前をつけて保存するということがちょくちょくあります。
                        それだと保存時まで名無しで基本タイプのままになるわけですが、そんなときも保存時の拡張子に対応したタイプで自動整形したい、ってことがあるかなと。
                        あと、タイプは同じでも作業ごとにフォルダを分けていて、それぞれ名前をつけて保存する際に違う整形を施したい、というような場合とか。
                        • [4573] Re8:自動実行マクロ maru 2006年09月06日 23:58

                          ▼ ryojiさん
                          ご説明ありがとうございます。
                          本来あってもよさそうなS_FileSaveAsDialogのような関数
                          がないからですね、きっと。

                          で、S_IsSameTypeExtのほうですが
                          ごめんなさいやっぱり分かりません。
          • [4579] Re:自動実行マクロ miau 2006年09月12日 09:16

            遅ればせながら使ってみました。
            色々と可能性が広がって嬉しい限りなんですけど、何点か要望が。

            ・元々行おうとした動作をキャンセルする方法があるとさらに便利かも?
             例えばファイルを開く際の自動実行に
             「ファイルサイズが 10 MB 以上であれば本当に開くか確認する」
             マクロを登録したい場合や、ファイル保存前の自動実行に
             「改行コードが混在していればダイアログ表示して保存を行わない」
             マクロを登録したい場合にも対応できると嬉しいです。

            ・一つのイベントに複数のマクロを関連づけることができると良いかも?
             今後便利な自動実行マクロが公開されたときに、
             あるものは .vbs、あるものは .js という状況だと困りますので。
            • [4580] Re2:自動実行マクロ ryoji 2006年09月13日 01:46

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

              > ・元々行おうとした動作をキャンセルする方法があるとさらに便利かも?

              これは、マクロから実行結果を本体に返してもらうようなインターフェースの追加が必要になりますね。
              今はちょっとどんな具合にしたらいいか思いつきませんが...

              >  例えばファイルを開く際の自動実行に
              >  「ファイルサイズが 10 MB 以上であれば本当に開くか確認する」

              これについては「開ファイル前」マクロを追加することが前提になると思います。
              ただ、他に用途があまりないようなら、「開ファイル前」マクロの追加ではなく、本体にファイル読み込み途中でキャンセルできる機能が追加されるほうが嬉しいかも。

              >  「改行コードが混在していればダイアログ表示して保存を行わない」
              >  マクロを登録したい場合にも対応できると嬉しいです。

              現状のイベントマクロでキャンセルの用途があるとすれば、このようなファイル保存前処理になるかと思います。
              sakura は保存後でも UNDO が効くので、警告メッセージを出すだけで無条件に改行コードを統一保存してしまってもさほど支障はなさそうな気もします。他エディタの多くは警告すら出さずに無条件統一するのが普通ですし。

              > ・一つのイベントに複数のマクロを関連づけることができると良いかも?
              >  今後便利な自動実行マクロが公開されたときに、
              >  あるものは .vbs、あるものは .js という状況だと困りますので。

              この機能に着手したとき、そのようにする選択肢もあったのですが、複数選択可能になっていたとしても通常は1個だけ動くようにしておくのが使い方の基本かな~、1個だけ使うなら選択したときに勝手に他の選択が解除されたほうが使いやすいよな~、ということで1イベントにつき1個にしました。
              普通に使うのに扱いやすいのと、複数マクロを1つにまとめる苦労がなくなるのとを天秤にかけて、今は前者を取ったというところです。あまり気の利いたUIを思いつかなかったというのもありますけど。
              これじゃやってられん!と感じるようになったらそのときに対策を考えてみようかと。
              • [4581] Re3:自動実行マクロ miau 2006年09月13日 08:55

                ご回答ありがとうございます。

                > これは、マクロから実行結果を本体に返してもらうようなインターフェースの追加が必要になりますね。
                > 今はちょっとどんな具合にしたらいいか思いつきませんが...

                イメージとしては、マクロ側で Editor.Cancel = True を設定するとキャンセルされる、というものなんですが…
                実現性とか度外視した意見ばかりですみません。

                > これについては「開ファイル前」マクロを追加することが前提になると思います。

                こちらもすいません。勘違いしてました。
                今あるのはファイルを開いた直後のイベントですね。

                > 現状のイベントマクロでキャンセルの用途があるとすれば、このようなファイル保存前処理になるかと思います。
                > sakura は保存後でも UNDO が効くので、警告メッセージを出すだけで無条件に改行コードを統一保存してしまってもさほど支障はなさそうな気もします。他エディタの多くは警告すら出さずに無条件統一するのが普通ですし。

                確かにこの用途だとあまり支障無いですね。
                何かまた「キャンセルできるとすごく助かる」という場面に出くわしたら要望出させていただきます。

                複数マクロ登録の件も了解です。
                いざとなったら別の言語に移植するなり ScriptControl 使うなり、やりようはあると思いますので。
    • [4582] Re:スタートアップマクロ miau 2006年09月13日 20:41

      たびたびすみません。

      ▼ (全略)さん
      > 自家製のマクロではファイル名を見て文字コード切り替えたり
      > タブサイズ変えたり、ファイル先頭の #!/usr/local/bin/hoge を見て拡張子の設定変えたりさせてます

      とのことなんですけど、拡張子の設定を変えるマクロ関数ってありましたっけ?
      # WScript.Shell を使って -TYPE=txt とか指定できそうですが・・・
      • [4584] Re2:スタートアップマクロ (全略) 2006年09月17日 13:15

        ▼ miauさん
        > たびたびすみません。
        >
        > ▼ (全略)さん
        > > 自家製のマクロではファイル名を見て文字コード切り替えたり
        > > タブサイズ変えたり、ファイル先頭の #!/usr/local/bin/hoge を見て拡張子の設定変えたりさせてます
        >
        > とのことなんですけど、拡張子の設定を変えるマクロ関数ってありましたっけ?
        > # WScript.Shell を使って -TYPE=txt とか指定できそうですが・・・
        これは失礼しましたm(__)m
        自家製fork版に入れた機能の話をしてしまいました

        今出先で手元にPCがなくて詳しく確認できませんが
        http://qwerty.s2.xrea.com/XA5B5A5AFA5E9A5A8A5C7A5A3A5BF2FA5B5A5AF
        A5E9A5A8A5C7A5A3A5BFXJRegex.xhtml
        の2005/10/19版にその機能が入っています
        スタートアップマクロのサンプルとしてsakura.rc.vbsとかいうファイル名のスクリプトを同梱したはずです

        よければ参考にしてください(^_^)