2008年10月2日木曜日

AutoHotkey で Windows Live Writer に ソースコード を貼り付ける

追記 (2011.3.23) : リボンUI を採用した Windows LiveWriter 2011 の場合は、こちらを参照。


1. Windows Live Writer にソースコードを貼り付ける操作を自動化したい

ブログに掲載するソースコードは、google-code-prettify を使い、色付けしている。

google-code-prettify にソースコードを色付けしてもらうには、pre タグを使い、以下の形式で記述する必要がある。

<pre class="prettyprint">ソースコード</pre>

( cf. Windows Live Writer でソースコードの貼り付け )

ブログを書くのに Windows Live Writer を使用。ソースコードを貼り付けるために、HTML の編集モードにして、挿入する位置を探すのは面倒。 (+_+)

AutoHotykey を利用して、ソースコードを貼り付けるためのショートカットキーを設定。ブログに貼り付けたいコードを選択し、ホットキーを入力したら、上記の形式にして Windows Live Writer にペーストするようにしたい。

 

2. ソースコードを Windows Live Writer に貼り付けるためのスクリプト

スクリプトの起動方法

前提 : AutoHotkey がインスールされていること。

  1. 右のスクリプトをダウンロードした後、ダブルクリックして起動。→ pasteHTMLCode2Writer-old.ahk
  2. タスクトレイに アイコン 081002-002 が表示される。

 

使い方
  1. Windows Live Writer で、予めソースコードを挿入したい位置にカーソルを移動。
  2. ソースコードが書かれているアプリケーションをアクティブにし、対象のコードを選択。
  3. Ctrl + Shitf + Q を押すことによって、ソースコードが Windows Live Writer に貼り付けられる。

※ ソースコードが書かれているアプリから Windows Live Wirter に切り替えるとき、Alt + Tab のショートカットキーを利用して切り替えている。よって、上記の 1 の操作は必ず必要。

※ もし上記操作で動作しない場合、以下の実装における Sleep コマンドの値を大きくするといいかも。

 

3. スクリプトの実装方法

スクリプトは、以下の通り。

^+Q::    ; Ctrl + Shift + Q
Send ^c    ; コピー
Send !{Tab}   ; Alt + Tab でウィンドウを切り替える

; Windows Live Writer がアクティブになるのを待つ
SetTitleMatchMode, 2
WinWaitActive, Windows Live Writer, , 2

; クリップボードの内容を変更
clipboard = <pre class="prettyprint">%clipboard%</pre>
Sleep 500
Send ^+v   ; 形式を選択してペースト
Sleep 800
Send H    ; HTML を選択
Sleep 600
Send {ENTER}  ; OK ボタンを押す
return

 

複数行の文をホットキーに割当てる

複数行に渡ったコマンドを書くには、最後に return を付ける。

ホットキー ::
コマンド1
コマンド2
...
return

(cf. Launching a program or document)

 

キーの入力

キーの入力を行うには、Send コマンド を利用する。

特殊なキーを入力をするには、以下のように書く。

  • Ctrl   : ^
  • Alt    : !
  • Shift : +

cf. Hotkeys (Mouse, Joystick and Keyboard Shortcuts)

 

ソースコードを貼り付ける先のウィンドウを確認する方法

ソースコードを貼り付ける先の、ウィンドウがアクティブになるまで待つコマンドを利用。

タイトルの中の一部を指定することによって、見つけることができるように、

を設定した。

 

クリップボードの中身を更新

コピーしたテキストはクリップボードに転送される。クリップボードにアクセスするためには、組込み変数

clipboard

を利用する。

(cf. Clipboard, ClipboardAll, and OnClipboardChange)

 

アプリケーションの反応を待つために一時停止する

Send コマンドによってキー入力を連続して行ったら、アプリケーションがそのスピードに対応できなかった。そのため、 Sleep コマンドを送った後短い時間一時停止するようにした。

一時停止しておく適切な時間間隔がわからなかったので、 とりあえず、自分の環境において思ったように動く値を適当に入力。

Sleep コマンド以外でも、SetKeyDelaySetWinDelay によって処理を遅らせることができるようだ。

 

エラー処理はしてない

ホットキーを入力した際、失敗することもあるけれど、エラー処理は面倒なのでしなかった。

てゆうか、まだエラー処理まで読んでない。… ^^;