テーマ:未分類(甘党)

日々、思いついたことを記録します。

KeyboardMacroEx.macのTODO

2007年07月05日 05時33分31秒 | 秀丸エディタ Tips
ちょっと、このあと、しばらく時間がとれないかもしれないので、忘れないうちに、今、頭にあることを書いておこうと思います。

■ 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ウェイトとか、いろいろと、マージン時間をいれている。このあたりを調整すると、きびきび動くようになるかもしれないが、環境やシステム状況の状況に影響されるので、何か、対策がないかを考えたい。(そもそも、こんなきわどいことをしなくても、もっと、自然に、保存する方法がないかも、調査したい。)

秀丸エディタキーボードマクロ拡張v0.000001(作りかけ&機能評価用(α版)&バックアップ版)

2007年07月05日 04時31分26秒 | 秀丸エディタ Tips
いやぁ、参りました。ここまで、一気に書いたですが、何かする度に、考え込むような箇所がたくさんあって、くたびれたので、当初、頭の中でイメージした全体的なフレームワークは動き始めたので、まだ、コーディング途中で、ほとんど、動作確認もできていない状況ですが、とりあえず、現時点のコードをアーカイブしてバックアップしておこうと思います。

このマクロは、最終的には、秀丸エディタのキーボードマクロを、より便利にするための以下の機能を実現しようとしています。

・ キーボードマクロ一時バッファ(最大9個)
・ 一時バッファ登録時のコメント
・ キーボードマクロのリピート呼び出し機能
・ 検索失敗時のマクロ実行中止機能
・ disabledrawによるマクロ実行中の画面ロック指定
・ 繰り返しで連番数を作るためのキーボードマクロ用一時変数機能
・ 一時バッファへ登録済みのキーボードマクロを組み合わせて、キーボードマクロを作成可能
・ 全機能は、ポップアップメニューでアクセス可能
・ ダイレクト登録/呼び出しのためのショートカットキー機能(★未コーディング)

2007/7/5 v0.000001(作りかけ&機能評価用(α版)&バックアップ版)

ファイルのダウンロードは、以下からできるようにしてあります。

甘党のプログラマのファイル保管庫」の「秀丸エディタ関連のマクロ」ページの「■ 秀丸エディタキーボードマクロ拡張」

秀丸エディタキーボードマクロ拡張用マクロの機能案を検討中、、、

2007年07月04日 03時44分34秒 | 秀丸エディタ Tips
とりあえず、WSHで、無理やりに、キーボードマクロを、マクロで保存することができることが確認できたので、キーボードマクロの一時的なバッファのためのマクロを作ろうとしていますが、先週から、なかなか時間がとれずに、プログラム作業が、なかなか、進んでいません。

キーボードマクロ周辺は、いろんな機能拡張が思いついてしまいますが、まずは、キーボードマクロの退避バッファが、一番、欲しい機能なので、とりあえずは、あまり、機能を欲張らずに、普段、良く使いそうなものだけを、試しに、実装してみようかと考えています。


・ 秀丸エディタでキー操作の記録したキーボードマクロを、一時バッファ(最大9個)に登録可能

・ 一時バッファ登録時へのコメント挿入可能(デフォルトは、登録した日時)

・ キーボードマクロの一時的なバッファへの登録と、呼び出しは、ポップアップメニューで指定可能とともに、さらに、[1]~[9]に関連したショートカットキー(Shift+Altなど)に割り当てもにも対応

・ いろいろな条件でのキーボードマクロのリピート呼び出し。(回数指定、EOFまで、次のマークまで)

・ 繰り返しで連番数を作るためのキーボードマクロ用一時変数機能

・ 大量に編集するマクロ(特にループ)を短時間で終わらせるためのdisabledraw指定

・ 一時バッファへ登録済みのキーボードマクロを組み合わせて、キーボードマクロを作成可能

・ 検索失敗時のマクロ実行中止機能


うむむ、、これだけに絞っても、相当なコード量になりそうだ、、、。本当に、できるんだろうか、、、。

今の懸念は、キーボードマクロ中に、一時バッファへ登録済みのキーボードマクロやキーボードマクロ用一時変数機能を記録したときに、うまく再生させることができるのかということですね。

あと、「繰り返しで連番数を作るためのキーボードマクロ用一時変数機能」では、まずは、単純な挿入&インクリの機能だけにしようとしているので、別のマクロにしてしまっても良いのかしれませんが、将来的に、本当に、必要か/実現するかどうかは、別にして、キーボードマクロの記録中に、値や書式を設定できるようするには、さすがに、マクロの内容の変換が必要になる可能性もありそうで、他にも、キーボードマクロを繰り返すときや、環境変数、レジストリ、iniファイルにアクセスするような機能など、キーボードマクロに役立つような機能が思いつきそうで、そのたびに、マクロを新規に追加していくよりは、このキーボードマクロ拡張の中に押し込んでしまった方が、面倒が無いし、それに、まずは、単純な機能で、マクロ変換による機能拡張の練習という意味でも、トライしてみようかなと考えています。

「いろいろな条件でのキーボードマクロのリピート呼び出し」で、本当は、範囲指定を抜けたら、リピートを停止させたいと考えましたが、すぐに、実現方法が思いつかなかったので、まずは、マークが付いている行になったら、止めるような単純な処理で、使い勝手を試してみようと思います。

「検索失敗時のマクロ実行中止機能」を、メニューから有効/無効設定させるかどうかを迷いましたが、マクロ変換時に、endmacroを挿入するぐらいのことは、簡単にできそうなのと、あと、検索失敗時に単純なシーケンスしか表現できないキーボードマクロにおいて、そのあとの実行を継続したいケースが思い当たらずに、まずは、デフォルトでは、検索失敗したら、マクロを終了するような変換をしてしまおうと考えています。(将来的には、検索に成功/失敗の条件分岐の設定ができるようにするかもしれません。---すぐに、どういうふうに設定させるのかが思いつきませんが、、、。)