昨日AutoHotkeyスクリプトを改良しました。昨日のは選択したいSQLの終端寄りに文字カーソルを置くと動作が遅く、またエディタ最終行に来たかどうかをA_CaretYという座標値で判別していたところ、これはスクロールのある場合に使えませんでした。

というわけで抜本的にやり直したスクリプトのテストが、下の動画です。実行環境はWindows 7 32bit + AutHotkey Unicode 32bit 1.1.20 + pgAdmin Portable 1.20.0。クエリのサンプルは前のブログの記事
「ISO-8601の週番号に関するクエリ(再整理)」(2015/01/21)より。

ソースコードは後掲します。例によって動画にキーボード入力が映ってなく、文字も小さいですが、最初にAutoHotkeyスクリプトを起動して、クエリツールに切り替えて適当にカーソルを置き、全てショートカットキー(とりあえずCtrl+Shift+Q)だけでSQLを自動選択しています。今回は動作が早く、選択と同時にバッとスクロールしてSQLの先頭を上に持っていくので、いつもに増して何をやってるか伝わりにくいかも…。動画が出ない場合はブラウザが未対応なので、リンクからダウンロードして下さい。
(526日追記:Chromeで正常再生できる動画に差し替えました)
≫ Link : demo_select_current_sql_v2.webm

昨日の、というかAutoHotkey全般でよくボトルネックになるのが、文字カーソル移動とクリップボードへの格納です。今回はそれを最小限にするため、最初にエディタ全体の内容をカーソル位置で2分割して格納し、正規表現で行位置を計算した後、基本的に縦移動だけでSQLを選択しました。SQLの前にコメントがあれば、それも含めて選択します。

実行環境とスクリプト
スクリプト以外に準備したものは、昨日までと同じ。AutoHotkeyこちらからUnicode 32bitZIPをダウンロードし、本体のプログラムだけ適当なフォルダに解凍します。同じ場所に起動用バッチファイルとスクリプトを置いて準備終わり。必要な時にバッチをダブルクリックすればスクリプトが常駐し、pgAdminクエリツール上でショートカットキー(Ctrl+Shift+Q)が機能します。
loading from Bitbucket...
loading from Bitbucket...
後ろの方、二つの変数str1str2に正規表現の関数RegExReplaceで文字列をセットしている部分が、選択対象SQLの抽出です。昨日は単純にセミコロンの有無だけの判断でしたが、もう少し細かく行末まで見るようにしました。この抽出結果から改行が何個あるか調べ、SQL選択に必要な縦移動量を計算しているため、正規表現が不十分だと結果全体がおかしくなります。今日テストしなかったパターンで、うまく動かないケースがあるかもしれません。