ちょっと、このあと、しばらく時間がとれないかもしれないので、忘れないうちに、今、頭にあることを書いておこうと思います。
■ TODO
○ ダイレクト登録/呼び出しのためのショートカットキー機能
・CheckShortcutKeyルーチンの実装が必要
iskeydown()関数で、Shift、Ctrl、Altのコードが上がってくることは確認済み。
CAL_SHORTCUTKEYとCAP_SHORTCUTKEYキーの文字列を解析("Shift"、"Ctrl"、"Alt"をstrstrすれば良いか?)
Shift、Ctrl、Altと数字キーの組み合わせが、マッチしたら、オプションキーも含めて、リターンする。マッチしない場合には、0リターン(今のスタブ)
なお、数字キーは、;QWERTYの上(1段目)と;NumLock(テンキー)で違うので、コンフィグレーションの要素として、追加が必要。
・「// ★[TODO]ショートカットキーの処理」の分岐処理
現在は、空。
まぁ、実験用のコードをベースにすれば、すぐにできるはず。
それより、#recording_statusが1:記録中の状態の場合には、登録ができないので、エラーメッセージも良いした方が良い。
○ クリップボード、及びクリップボード履歴の保持
たぶん、今は、マクロの前後で、クリップボードの内容が壊れることがあるはず。(要確認)
カレントのクリップボードの内容は、復帰するのは、当然として、クリップボード履歴も変化しないようにすること。
○ 検索条件の保持
たぶん、今は、マクロの前後で、検索バッファの内容が変化することがあるはず。(要確認)
マクロを呼んだら、検索テキストが変化するなんて、とんでもないので、検証と対応が必要。
○ 置換系の検索失敗のendmacroallをしていない
単純なコーディング漏れ。ConvertMacroFileのマクロ変換時に、置換系のキーワード検索も追加しておくこと。
○ 現状、KeyboardMacroEx.mac呼び出しを含むキーボードマクロは、1箇所の保存しかサポートしていない
#recording_statusが1:記録中で、KeyboardMacroEx.mac呼び出し履歴をとっているが、ConvertMacroFileのマクロ変換時後に、単純に削除してしまっている。(特に、現コードは、ConvertMacroFileのマクロ変換時にエラー表示するため、にっちもさっちもいかない。)
履歴ファイルを削除したら、KeyboardMacroEx.mac呼び出しを含むキーボードマクロは、バッファに登録ができなくするようなチェックを入れて、登録メニューに遷移できないようにする方が良いはず。(カレントの実行も消去が必要。。。。少し、制限が厳しすぎるか?)
このチェックが面倒であれば、ConvertMacroFileのマクロ変換時後に、履歴を単純に削除せずに、カレントのマクロが必要な行数にシュリンクするようなアイデアもある。
○ エラーチェック
現状は、とりあえずのコードなので、ほとんど、エラーチェックをしていない。気づいた部分には、ソースコード中に、「★[TODO]」でコメントを入れている。
■ ちょっと、気になっている点
○ disabledrawからenabledrawしたときに、画面調整をしたはずだが、うまくいっているか?
○ 実行速度
反応速度が、ワンテンポ遅れるのが気に入らない。(特に、ポップアップメニュー表示)
まずは、debuginfo文が大量に入っているので、その影響度合いを調査した方が良いかも。
そのあとは、実行時間のプロファイリングをして、チューニングをすることになるが、秀丸エディタのマクロ実行エンジンの速度の問題で、対応が厳しそうな場合には、WSH側に、多くの処理をさせた方が速くなる気がする。
○ 検索失敗で再生中止したマクロは、endmacroallで終了させているため、カレントのキーボードマクロ実行時には、そのテンポラリファイルが残るはず。
とりあえずは、固定ファイル名にしてあり、かつ、KeyboardMacroEx.macの最初のCheckRecordingStatusでのVBSとの中間ファイルと共用しているため、あまり、気にすることはないような気がする。
変換後のマクロは、絶対にKeyboardMacroEx.macコールを含んでいないはずだから、CheckRecordingStatusと共用は問題にならないと思っているが、よくよく考えて、破綻している場合には、少し、気にした方が良いかしれない。
また、CheckRecordingStatusと共用したので、$CURRENT_KBM_TMP_SAVE_FNAMEは、もう少し、分かりやすい、名前を変えたり、さらに、各所のコメントを変更が必要。
○ 秀丸エディタのキー操作記録状態の取得 CheckRecordingStatus:では、VBSを呼び出して、「記録中!」というタイトルウィンドウを探すことにしてしまったが、もっと、エレガントな方法はないのだろうか?
このVBS呼び出しは、WSH立ち上がり後、一回のチェックで、OK/NGが判断できるので、速度的には、あまり、気にならないようだったが、ただ、あまりにも、きわどすぎる。
○ マクロ変換時に、常に。キーボードマクロ用一時変数の挿入とインクリメント用のInsertKbmTmpVar:ルーチンを挿入してしまっている。
少なくとも、履歴に、call InsertKbmTmpVarがあるときだけにしたい。
ただ、やはり、直接、マクロに挿入せずに、InsertKbmTmpVar.macのようなものを用意or作成して、execmacroに置換した方が気持ちが良いかも。要再考。
○ CaputureCurrentKeyboardMacroルーチンからKeyboardMacroEx.macを使って、「キー操作の保存」ダイアログを操作するとき、300ms周期ポーリングとかアクティブ後100msウェイトとか、いろいろと、マージン時間をいれている。このあたりを調整すると、きびきび動くようになるかもしれないが、環境やシステム状況の状況に影響されるので、何か、対策がないかを考えたい。(そもそも、こんなきわどいことをしなくても、もっと、自然に、保存する方法がないかも、調査したい。)
■ TODO
○ ダイレクト登録/呼び出しのためのショートカットキー機能
・CheckShortcutKeyルーチンの実装が必要
iskeydown()関数で、Shift、Ctrl、Altのコードが上がってくることは確認済み。
CAL_SHORTCUTKEYとCAP_SHORTCUTKEYキーの文字列を解析("Shift"、"Ctrl"、"Alt"をstrstrすれば良いか?)
Shift、Ctrl、Altと数字キーの組み合わせが、マッチしたら、オプションキーも含めて、リターンする。マッチしない場合には、0リターン(今のスタブ)
なお、数字キーは、;QWERTYの上(1段目)と;NumLock(テンキー)で違うので、コンフィグレーションの要素として、追加が必要。
・「// ★[TODO]ショートカットキーの処理」の分岐処理
現在は、空。
まぁ、実験用のコードをベースにすれば、すぐにできるはず。
それより、#recording_statusが1:記録中の状態の場合には、登録ができないので、エラーメッセージも良いした方が良い。
○ クリップボード、及びクリップボード履歴の保持
たぶん、今は、マクロの前後で、クリップボードの内容が壊れることがあるはず。(要確認)
カレントのクリップボードの内容は、復帰するのは、当然として、クリップボード履歴も変化しないようにすること。
○ 検索条件の保持
たぶん、今は、マクロの前後で、検索バッファの内容が変化することがあるはず。(要確認)
マクロを呼んだら、検索テキストが変化するなんて、とんでもないので、検証と対応が必要。
○ 置換系の検索失敗のendmacroallをしていない
単純なコーディング漏れ。ConvertMacroFileのマクロ変換時に、置換系のキーワード検索も追加しておくこと。
○ 現状、KeyboardMacroEx.mac呼び出しを含むキーボードマクロは、1箇所の保存しかサポートしていない
#recording_statusが1:記録中で、KeyboardMacroEx.mac呼び出し履歴をとっているが、ConvertMacroFileのマクロ変換時後に、単純に削除してしまっている。(特に、現コードは、ConvertMacroFileのマクロ変換時にエラー表示するため、にっちもさっちもいかない。)
履歴ファイルを削除したら、KeyboardMacroEx.mac呼び出しを含むキーボードマクロは、バッファに登録ができなくするようなチェックを入れて、登録メニューに遷移できないようにする方が良いはず。(カレントの実行も消去が必要。。。。少し、制限が厳しすぎるか?)
このチェックが面倒であれば、ConvertMacroFileのマクロ変換時後に、履歴を単純に削除せずに、カレントのマクロが必要な行数にシュリンクするようなアイデアもある。
○ エラーチェック
現状は、とりあえずのコードなので、ほとんど、エラーチェックをしていない。気づいた部分には、ソースコード中に、「★[TODO]」でコメントを入れている。
■ ちょっと、気になっている点
○ disabledrawからenabledrawしたときに、画面調整をしたはずだが、うまくいっているか?
○ 実行速度
反応速度が、ワンテンポ遅れるのが気に入らない。(特に、ポップアップメニュー表示)
まずは、debuginfo文が大量に入っているので、その影響度合いを調査した方が良いかも。
そのあとは、実行時間のプロファイリングをして、チューニングをすることになるが、秀丸エディタのマクロ実行エンジンの速度の問題で、対応が厳しそうな場合には、WSH側に、多くの処理をさせた方が速くなる気がする。
○ 検索失敗で再生中止したマクロは、endmacroallで終了させているため、カレントのキーボードマクロ実行時には、そのテンポラリファイルが残るはず。
とりあえずは、固定ファイル名にしてあり、かつ、KeyboardMacroEx.macの最初のCheckRecordingStatusでのVBSとの中間ファイルと共用しているため、あまり、気にすることはないような気がする。
変換後のマクロは、絶対にKeyboardMacroEx.macコールを含んでいないはずだから、CheckRecordingStatusと共用は問題にならないと思っているが、よくよく考えて、破綻している場合には、少し、気にした方が良いかしれない。
また、CheckRecordingStatusと共用したので、$CURRENT_KBM_TMP_SAVE_FNAMEは、もう少し、分かりやすい、名前を変えたり、さらに、各所のコメントを変更が必要。
○ 秀丸エディタのキー操作記録状態の取得 CheckRecordingStatus:では、VBSを呼び出して、「記録中!」というタイトルウィンドウを探すことにしてしまったが、もっと、エレガントな方法はないのだろうか?
このVBS呼び出しは、WSH立ち上がり後、一回のチェックで、OK/NGが判断できるので、速度的には、あまり、気にならないようだったが、ただ、あまりにも、きわどすぎる。
○ マクロ変換時に、常に。キーボードマクロ用一時変数の挿入とインクリメント用のInsertKbmTmpVar:ルーチンを挿入してしまっている。
少なくとも、履歴に、call InsertKbmTmpVarがあるときだけにしたい。
ただ、やはり、直接、マクロに挿入せずに、InsertKbmTmpVar.macのようなものを用意or作成して、execmacroに置換した方が気持ちが良いかも。要再考。
○ CaputureCurrentKeyboardMacroルーチンからKeyboardMacroEx.macを使って、「キー操作の保存」ダイアログを操作するとき、300ms周期ポーリングとかアクティブ後100msウェイトとか、いろいろと、マージン時間をいれている。このあたりを調整すると、きびきび動くようになるかもしれないが、環境やシステム状況の状況に影響されるので、何か、対策がないかを考えたい。(そもそも、こんなきわどいことをしなくても、もっと、自然に、保存する方法がないかも、調査したい。)