ブックマーク管理その2

前回からやったこと


いろいろ書いてたけど、結局AHKを使って管理しようとしている。とりあえず、前回いってた「こんなんだったらいーよねー^^」というのは、

  • 短期的。賞味期限が短いサイトが対象
  • 登録が簡単。ワンキーでできる
  • 名前とかアドレスは自動の方がいい
  • 呼び出したら一覧で表示
  • fenrirみたいに絞り込みできたらいい


まあ、まあ十分なものができたかも。

おおざっぱな考え方


考え方としては、気に入ったサイトを取り込むことと、それを呼び出すことを分離したらいいな、と。それで、二つのahkファイルを作る。
取り込むのは、AHKでふつうにやることができる。ControlGetTextとWinGetTitleで、サイトのタイトルとurlを取得すればいい。これを加工し、テキストファイルに書き込めばいい。
読み込み、表示するのについて。menuを用いたポップアップメニュー。このとき、どうやっておのおののラベルを作るのかで迷ったが、2ちゃんねるの過去スレを見ると同じようなことが書いてあって解決した。やっぱ2ちゃんねるは偉大だ。

作ったahkファイルとデータファイル


三つファイルがいる。サイトのurlとタイトル取り込み用のshorterwright.ahkと、ポップアップメニューにして表示するためのshorterread.ahk。urlとタイトルが保存されているbookmark.txt。shorterっぽいからshorterってつけてます><
shorterwright.ahkで、urlとタイトルを取得し、bookmark.txtに書き込む。shorterread.ahkで、bookmark.txtから読み込み、ポップアップメニューにして表示という関係。

以下、それぞれのファイルをコピペ。パスとか適当に読み替えてください。AHKで何かを作ったことあまりないので、変かも知れないけど許して;;あと思いっきり自分のため用に作ったからもしかしたら不具合あるかも;;


shorterread.ahk

;bookmark.txtから一行ずつ読み込み、タイトルとurlの二つの要素に分ける
Loop, Read,D:\data\AHKdata\bookmark.txt
{
	Src=%A_LoopReadLine%
	StringSplit, word_array, Src,`|,%A_Space%%A_Tab%
	Menu,Shorter,add, %word_array1%, Menu
}

Menu,Shorter,Show, 100 ,400
return


;menuラベル。最初は、このラベルをLoop内で作ろうとしたけど無理だった。
;ラベルだけは共通にして、押したときに%A_ThisMenuItemPos%で場合分けするという仕方で対応。
;2ちゃんねる謝謝^^
Menu:
GetKeyState, state, Ctrl
;Ctrlを押しながらの時の挙動。
;削除したい行以外をコピーし、それを内容とするbookmark.txtを作り直すという仕方で
;一行だけ削除というのをやっている。
If state=D
{
Loop, Read, D:\data\AHKdata\bookmark.txt
{
	if(A_Index=A_ThisMenuItemPos)
	continue

	Line=%A_LoopReadLine%`n%Line%
}
	Msgbox,%A_ThisMenuItem%を削除します
	FileDelete, D:\data\AHKdata\bookmark.txt
	FileAppend , %Line%, D:\data\AHKdata\bookmark.txt
return
}
;Ctrlを押さずにクリックしたときの挙動。%A_ThisMenuItemPos%で場合分けしている
If state=U

{
	FileReadLine, Src, D:\data\AHKdata\bookmark.txt, %A_ThisMenuItemPos%
	StringSplit, word_array, Src,`|,%A_Space%%A_Tab%

Run,%word_array2%
return
}


shorterwright.ahk

ControlGetText, Urltext, Edit1, ahk_class TKikiMain
WinGetTitle, Title, ahk_class TKikiMain
;- kikiの部分を取り除いている。
StringTrimRight, Title, Title,7
InputBox, Title , , , , 200, 100, , , , , %Title%
if ErrorLevel <> 0
return
Msgbox,タイトル%Title%`nURL%Urltext%`nを書き込んでもいいですか?
FileAppend,`n%Title%` | %Urltext%,D:\data\AHKdata\bookmark.txt
return

bookmark.txt

;自分がブックマークしているサイトあんまり知られたくないから無難なのを選んだの;;
;賞味期限短いとかいってて書けるわけないの;;
つかさのほえほえ日記(&t) | http://d.hatena.ne.jp/tukasa1919/
Google ニュース | http://news.google.co.jp/
Yahoo! JAPAN | http://www.yahoo.co.jp/

具体的な使い方


fenrirで、shorterread.ahk、shorterwright.ahkそれぞれ呼び出すつもりにしている。

とりあえず注意点としては、このままだとkikiにしか使えないということと(私にとってはそれで十分)、bookmark.txtが、改行入ってたりするとうまくいかなかったりするといったくらいか。
とりあえず、このbookmark.txtの書式だとshorter launchのやつをそのままコピペしたら使えるから、自分的に便利だったりする。というかそういうふうにつくったんだけどね。
あと、shorterread.ahkでは、Ctrlを押しながらクリックすると、それを削除するようにしている。まあbookmark.txtをエディタで編集するだけでもいい気もするけどね。
また何か使い勝手悪かったり不具合あったら報告するね☆(ゝω・)vキャピ