2008年10月2日木曜日

AutoHotkey で サイトのタイトルと URL から、 FreeMind の子ノードを作成 (Firefox のみ)

FreeMind を使って調べものをしつつ、まとめていくとき、一番面倒なのはノードに対してリンクをつけること。これを AutoHotkey を使って自動化したい。

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

こちらをダウンロードしてダブルクリックで起動。→ ffLink2fm.ahk 。タスクトレイに アイコン 081002-002 が表示される。

 

使い方

  1. FreeMind で、新規に作成したいノードの「親になるノード」をアクティブにしておく。
  2. Firefox で対象のサイトを開く。
  3. Ctrl + Shift + L を押すことによって、FreeMind に新規ノードが作成される。

※ 上手く動作しないときは、下記の実装において適当に Sleep の値を大きくする。たまにおかしな動作をする。 ^^;

 

実装

^+l::   ; Ctrl + Shift + L

; JavaScript をロケーションバーに入力し、
; サイトのタイトルと URL をアラートに表示
clipboard = javascript:(function(){alert(document.title + "\n" + location.href)})();
Send ^l
Send ^v{ENTER}
Sleep 1000

; 表示されたアラートの内容をコピー
Send ^a^c{ENTER}

; クリップボードの内容を分割
StringSplit, url_ary, clipboard, `n
clipboard = %url_ary1%

SetKeyDelay 300

; アプリケーションの切り替え
Send !{Tab}

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

; 新規子ノードを作成してペースト
Send {Ins}^v

; ノードにリンクを設定
clipboard = %url_ary2%
Send ^k^v{ENTER}

return

 

サイトのタイトルと URL の取得

以下の JavaScript をロケーションバーで実行することによって、アラートにサイトのタイトルと URL を表示。(cf. ブックマークレット) コピーしてクリップボードへ。

javascript:(function(){alert(document.title + "\n" + location.href)})();

 

文字列を分割したものを配列として利用

クリップボードから文字列を取り出し、タイトルと URL を配列に入れようと思ったら、AutoHotkeyを流行らせるページ - 配列 によると、

AutoHotkeyには配列型変数は無く、StringSplitWinGetなどのコマンドでは、配列の代わりに最後に数字の付いた変数に結果を代入する。

なるほど、文字列を区切ってそれを配列代りに使うと。StringSplit というコマンドのポイントは、出力される配列のようなもの。

ここで「array」を指定した場合、「array0」に要素数が、「array1」「array2」...に各要素が格納される。

(AutoHotkey – StringSplit より)

内容を参照するときも独特。以下では、組み込み変数である clipboard より改行を区切り文字に指定し、 url_ary 変数に分割した内容を入れている。参照するときは、%url_ary添字% と書く。

; クリップボードの内容を分割
StringSplit, url_ary, clipboard, `n
clipboard = %url_ary1%

(cf. StringSplit)

 

Insert キー

{Ins} と書く。(cf. Send/SendRaw/SendInput/SendPlay/SendEvent: Send keys & clicks )

 

その他

今回は使わなかったけれど、クリップボッドの内容を順次メッセージボックスに表示させるには次のようにする。

Loop, parse, clipboard, `n, `r
{
    MsgBox, , , %A_LoopField%
}

(cf. Clipboard, ClipboardAll, and OnClipboardChange, Loop (parse a string) )

追記 (2009.1.17) : 手動でやるならアドオン Make Link を使ってページのタイトルと URL より HTML の リンクとなる文字列を作成。Freemind でリンクを子ノードとして貼り付けたいノードを選択してペーストする。どちらがお手軽なんだろう... ^^;