JURIA @Wiki
open_url.ahk
最終更新:
juria
-
view
open_url.ahk α8 &bookmark_hatena(show=none)
[2008-01-05] 保存ファイル名を変更可能に。
[2007-12-17] DLファイルリスト記録は保存先フォルダを2階層目まで可能に。
[2007-01-06] DLしたファイルをパスリストに記録するように。
[2006-12-30] url を追加するお気に入りリストファイルを選択・作成可能に。
open_url.ahk α8 (2007.12.17 版)
juria(自分用メモ)
juria(自分用メモ)
仕様
■クリップボード内の文字列が url の場合
▼拡張子によって実行するコマンドを振り分ける(対応したメニューのみ表示)
拡張子と実行するコマンド・アプリは工夫次第で
▼ダウンロード
▼パスをお気に入りリストに追加する
付加するコメントとタグをダイアログで入力
▼ttp://、tp:// の補完(completionURL.ahk 下記参照)
■url を含む文字列から url を取り出し整形、クリップボードに戻す
●書式に従って記述されたお気に入り(リンク)リストの場合
▼クリップボードに戻した url を設定したアプリで開く
▼ダウンロード
▼ハイパーリンク・タグの生成
書式は、
タグ, URL, コメント [, 備考など] (カンマ区切り、タブ区切り)
各要素内の最初と最後のスペース、改行は取り除かれる。
AHKリファレンス, http://www.autohotkey.com/docs/commands.htm , 名前順 (タグ, コメント, URL [, 備考など] の場合は、適宜変更のこと)
%new_url1%→%new_url2%、%new_url2%→%new_url3%
●( オートアンカー でコピーした)ハイパーリンクの場合
<a href="http://www.autohotkey.com/">AutoHotKey</a>
▼リストファイルを選択して追加書き込み(ページ上、リンク上)
▼リストファイルを新規作成する場合は、インプットボックスにファイル名を
入力(拡張子も)
▼選択・作成するリストファイルは同一フォルダ内に置く(置かれる)。
▼書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
「いいえ」でタグを追加するダイアログ表示 →
書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
「いいえ」でキャンセル
■クリップボード内の文字列に url が含まれない場合
▼Google、Youtube、英辞郎で検索
■クリップボード内の文字列が url の場合
▼拡張子によって実行するコマンドを振り分ける(対応したメニューのみ表示)
拡張子と実行するコマンド・アプリは工夫次第で
▼ダウンロード
▼パスをお気に入りリストに追加する
付加するコメントとタグをダイアログで入力
▼ttp://、tp:// の補完(completionURL.ahk 下記参照)
■url を含む文字列から url を取り出し整形、クリップボードに戻す
●書式に従って記述されたお気に入り(リンク)リストの場合
▼クリップボードに戻した url を設定したアプリで開く
▼ダウンロード
▼ハイパーリンク・タグの生成
書式は、
タグ, URL, コメント [, 備考など] (カンマ区切り、タブ区切り)
各要素内の最初と最後のスペース、改行は取り除かれる。
AHKリファレンス, http://www.autohotkey.com/docs/commands.htm , 名前順 (タグ, コメント, URL [, 備考など] の場合は、適宜変更のこと)
%new_url1%→%new_url2%、%new_url2%→%new_url3%
●( オートアンカー でコピーした)ハイパーリンクの場合
<a href="http://www.autohotkey.com/">AutoHotKey</a>
▼リストファイルを選択して追加書き込み(ページ上、リンク上)
▼リストファイルを新規作成する場合は、インプットボックスにファイル名を
入力(拡張子も)
▼選択・作成するリストファイルは同一フォルダ内に置く(置かれる)。
▼書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
「いいえ」でタグを追加するダイアログ表示 →
書き込み文字列の確認 →「はい」→ リストファイル選択・作成 → 書き込み
「いいえ」でキャンセル
■クリップボード内の文字列に url が含まれない場合
▼Google、Youtube、英辞郎で検索
◎ダウンロードには、
esDL
と curl.exe または wget.exe を使用。
Principia さんの ShuffleDown.ahk を参考に(感謝)サブディレクトリも選択可に。
( esDL では cgi? や php? で飛ばされる url をうまく取得できない場合に利用)
◎ダウンロード完了後、ダウンロードしたファイルをパスリストに記録する。
#Include DLarchiveList4.ahk
要 axpathlist.spi(パスリストを書庫にみせかけて展開する Susie プラグイン)
◎設定されていない拡張子の場合は、何も起きない。
◎あふとサクラエディタはローカルのパス用なので、誤爆に注意。
(正規表現で正しくローカルパスかどうか判定すべきだよな。きっと。)
Principia さんの ShuffleDown.ahk を参考に(感謝)サブディレクトリも選択可に。
( esDL では cgi? や php? で飛ばされる url をうまく取得できない場合に利用)
◎ダウンロード完了後、ダウンロードしたファイルをパスリストに記録する。
#Include DLarchiveList4.ahk
要 axpathlist.spi(パスリストを書庫にみせかけて展開する Susie プラグイン)
◎設定されていない拡張子の場合は、何も起きない。
◎あふとサクラエディタはローカルのパス用なので、誤爆に注意。
(正規表現で正しくローカルパスかどうか判定すべきだよな。きっと。)
#noTrayIcon
;#Include mbstring.ahk
#EscapeChar ' ; シングルクオートにエスケープ文字を変更'
app = D:\Application
LDir = E:\etc ;リストファイルを置くフォルダ指定
; クリップボードの文字列から url を取り出し、クリップボードに戻す
path = tp://
StringGetPos, pos_prev, Clipboard, %path%,
; 欠落文字数分(ht,h,f)+ 1 以上
; url の前にあるタグ・コメントが区切り文字を入れて2文字以下は想定外
if pos_prev > 2
If Clipboard not contains '<a href ; <は半角で
{
url = %Clipboard%
;StringSplit, OutputArray, InputVar [, Delimiters, OmitChars, FutureUse]
; Delimiters はスペース等を入れずに列挙
StringSplit, new_url, url, ',%A_Tab%, %A_Space% 'n'r
{
Menu, linklist, Add, MyWiki, MyWiki
Menu, linklist, Add, HTML, HTML
Menu, linklist, Add, Open, Open
Menu, linklist, Show
return
}
MyWiki:
Clipboard = [[%new_url1%:new|%new_url2%]]
return
HTML:
Clipboard = <a href="%new_url2%">%new_url1%</a> ; <>は半角で
return
Open:
{
Clipboard = %new_url2%
ClipWait
GoSub, OpenURL
return
}
}
; HTMLハイパーリンクタグの場合
If Clipboard contains '<a href ; <は半角で
{
url = %Clipboard%
StringSplit, new_url, url, ""<>,%A_Space%,
list = %new_url5%, %new_url3%
MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
IfMsgBox, YES
{
Gosub, Append
Return
}
IfMsgBox, NO
{
InputBox, Tag, , タグ名を入力, , 110,124
If ErrorLevel <> 0
Return
list = %new_url5%, %new_url3%, %Tag%
MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
IfMsgBox, YES
{
Gosub, Append
Return
}
IfMsgBox, No, Goto, NotAppend
}
}
; URL の前に、タグやコメントが無い場合
; (ht,h,f)が欠落している場合を想定
If pos_prev <= 2
{
Gosub, OpenURL
Return
}
; URL を開く
OpenURL:
; クリップボード内の url の補完(ttp,tp -> http)
#Include completionURL.ahk
; クリップボード内の url を各要素に分解する
SplitPath,new_clip,file,dir,ext,name
;;; ポップアップで表示するメニューを作成
; 書式:Menu,分類,コマンド,表示名,ラベル
; 共通メニュー
Menu, DL, Add, &esDL + curl, Menu6
Menu, DL, Add, &Wget, Menu13,
Menu, DL, Add, &NetTransport, Menu7
Menu, Main, Add, ダウンロード(&D), :DL
Menu, Main, Add, 関連付け実行, Menu8
Menu, Main, Add,
Menu, Main, Add, リストに追加, LinkList
if new_clip not Contains %path%
{
Menu, Filer, Add, あふ右, AFX-R
Menu, Filer, Add, あふ左, AFX-L
Menu, Main, Add, あふ, :Filer
}
Menu, Main, Add,
; 検索メニュー
Menu, Search, Add, Google, Menu10
Menu, Search, Add, YouTube, Menu11
Menu, Search, Add, 英辞郎, Menu14
; 拡張子フィルターメニュー
; url を実行するアプリのメニューを拡張子で振り分け
if (ext="htm" or ext="html" or ext="xml" or ext="php" or ext="cgi")
GoSub, htmlMenu
if (ext="txt" or ext="ini")
{
Menu, Main, Add, &sakura, Menu3
Menu, Main, Show
}
if (ext="gif" or ext="jpg" or ext="png" or ext="bmp")
{
Menu, Main, Add, &picture, Menu2
Menu, Main, Add, Lynx+i_View, Menu1
Menu, Main, Show
}
if (ext="mpg" or ext="avi" or ext="wmv")
{
Menu, Main, Add, video, Menu5
Menu, Main, Show
}
if (ext="mp3" or ext="ogg" or ext="wma" or ext="ra" or ext="pls" or ext="mid")
{
Menu, Main, Add, xmplay, Menu4
Menu, Main, Add, mplayer, Menu5
Menu, Main, Add, streamrip, Menu12
Menu, Main, Show
}
if (ext="zip" or ext="lzh" or ext="rar" or ext="exe" or ext="tar")
{
Menu, Main, Add, Wget, Menu6
Menu, Main, Add, NetTransport, Menu7
Menu, Main, Show
}
; url が / や php?***,cgi?*** やアンカーで終わってるとき
if new_clip not contains %name%
GoSub, htmlMenu
if new_clip contains http,ftp
{
StringRight, new_url, new_clip, 5
IfNotInString, new_url, '.
GoSub, htmlMenu
}
; 検索
if new_clip not contains %dir%
{
Menu, Search, Show
}
; else
; {
; Menu, Main, Show
; }
return
htmlMenu:
Menu, Sub, Add, lynx, Menu1
Menu, Sub, Add, luna, Menu2
Menu, Sub, Add, xyzzy_www, Menu9
Menu, Main, Add, Browser, :Sub
Menu, Sub2, Add, sakura, Menu5
Menu, Main, Add, Editor, :Sub2
Menu, Main, Show,
return
; ハイパーリンクをお気に入りリストに追加する
LinkList:
InputBox, Comment, , コメントを入力, , 110,124
If ErrorLevel <> 0
Return
InputBox, Tag, , タグ名を入力, , 110,124
If ErrorLevel <> 0
Return
list = %Comment%, %new_clip%, %Tag%
MsgBox, 4, , %list% 'n'nリストに追加してもいい?,
IfMsgBox, YES
{
Gosub, Append
Return
}
IfMsgBox, NO, Goto, NotAppend
NotAppend:
MsgBox, リストに追加してません
Return
;リストファイルを選択・新規作成して url を追加
Append:
{
;Loop, FilePattern [, IncludeFolders?, Recurse?]
Loop, %LDir%\*
Menu, list, Add, &%A_LoopFileName%, ThisFile
Menu, list, Add ;区切り線
Menu, list, Add, &MakeFile, MakeFile
Menu, list, Show
Return
MakeFile:
InputBox, NewFile, 新ファイル名, , , 130, 100
If ErrorLevel <> 0
Return
; Sleep, 500
FileAppend, %list%'r'n, %LDir%\%NewFile%
Return
ThisFile:
StringTrimLeft, cFile, A_ThisMenuItem, 1
FileAppend, %list%'r'n, %LDir%\%cFile%
Return
}
; 各メニューに対応する動作(起動するアプリの)設定
AFX-R:
Run, %app%\Filer\afx0165\AFX.EXE -s -r"%new_clip%"
Return
AFX-L:
Run, %app%\Filer\afx0165\AFX.EXE -s -l"%new_clip%"
Return
Menu1:
EnvSet, HOME, %app%\Internet\Lynx
EnvSet, Temp, %app%\Internet\Lynx
Run, D:\bin\ckw.exe -e %app%\Internet\Lynx\lynx.exe -image_links %new_clip%
return
Menu2:
run, %app%\Internet\Lunascape3\Luna.exe %new_clip%,
return
Menu3:
Run, %app%\Text_Editor\sakura\sakura.exe %new_clip%,
return
Menu4:
; run, %app%\AudioPlayers\foobar2000_09\foobar2000.exe /play %new_clip%
Run, %app%\AudioPlayers\xmplay\xmplay.exe %new_clip%
return
Menu5:
; Run, %app%\VideoPlayers\MPlayer-KK\mplayer.exe %new_clip%
Run, %app%\VideoPlayers\mplayer-athlon-svn-18928\mplayer.exe %new_clip%,
return
Menu6:
Run, %app%\Launcher\esDL\esDL.exe /#e=curl %new_clip%
Process, Wait, curl.exe
If Errorlevel <> 0
Process, WaitClose, %ErrorLevel%
Run, %A_ScriptDir%\DLarchiveList4.ahk
return
Menu7:
Run, "%app%\Internet\NetTransport 2\NetTransport.exe" %new_clip%,
return
Menu8:
Run, %new_clip%
Return
Menu9:
Run, %app%\Text_Editor\xyzzy\xyzzycli.exe -f my-www-open-url %new_clip%
Return
Menu10:
Run, http://www.google.com/search?hl=ja&lr=lang_ja&num=20&q=%new_clip%
Return
Menu11:
Run, http://www.youtube.com/results?search_type=search_videos&search_sort=
relevance&search_query=%new_clip% ; 表示の都合により改行、本当は一行
Return
Menu12:
; 外部アプリの引数に % が必要な場合はエスケープする
Run, %app%\streamripper-win32\streamripper.exe %new_clip% -a -d E:\Stream
'%d -D '%d/'%1q-'%A-'%T -k 1 -A ; 表示の都合により改行、本当は一行
Menu13:
Run, %A_ScriptDir%\DownLoad3.ahk
Process, Wait, wget.exe
If Errorlevel <> 0
Process, WaitClose, %ErrorLevel%
Run, %A_ScriptDir%\DLarchiveList4.ahk
Return
Menu14:
Run, http://www2.alc.co.jp/ejr/index.php?word_in=%new_clip%&word_in2=
'%u304B'%u304D'%u304F'%u3051'%u3053&word_in3=PVawEWi72JXCKoa0Je
; 表示の都合により改行、本当は一行
Return
ExitApp
completionURL.ahk
; クリップボード内の url の補完(ttp,tp -> http)
new_clip = %Clipboard%
StringLeft, new_url, new_clip, 3
IfInString, new_url, ttp
{
StringReplace, clipboad, clipboad, h%new_clip%
new_clip = h%new_clip%
}
else IfInString, new_url, tp`:
{
StringReplace, clipboad, clipboad, ht%new_clip%
new_clip = ht%new_clip%
}
else
{
new_clip = %new_clip%
}
esDL のプログラム設定(@あれこれ-2006年11月参照)
esDL.ini
esDL.ini
[exec] ;wgetでダウンロード ;ファイル名をダイアログで入力 ;起動オプション /#e=wget D:\bin\wget.exe >-c --referer=%L -O "%P%$K" %L ;>-c --referer=%L -P %P %L ;curlでダウンロード ;ファイル名をダイアログで入力 ;起動オプション /#e=curl D:\Application\Internet\curl\curl.exe >-o "%P%$K" %L -v %end
DLarchiveList4.ahk
/*
DL・保存先のパスを取得するAHK
*/
; 保存先フォルダの親フォルダ
pDir = D:\archives
; リスト編集用エディタ
editor= path\to\sakura\sakura.exe
; クリップボード内の url の置換(ttp,tp -> http)
#Include completionURL.ahk
dURL = %new_clip%
; クリップボード内の url を各要素に分解する
SplitPath,dURL,file,dir,ext,name,drive
; 保存先フォルダのリストアップ
;{
Loop, %pDir%\*, 2, 0
{
Dir = %A_LoopFileName%
Menu, Main, Add, &%Dir%, ThisDir
}
Menu, Main, Add
Menu, Main, Add, (&E)リストを編集, Edit
Menu, Main, Show
Return
ThisDir:
;保存先フォルダ名
;左から一文字(ショートカットキー名)カット
StringTrimLeft, cDir, A_ThisMenuItem, 1
Loop, %pDir%\%cDir%\*, 2, 0
if A_Index >= 1
{
sDir = %A_LoopFileName%
Menu, Sub, Add, &%sDir%, SubDir
}
Menu, Sub, Add
Menu, Sub, Add, p/&%cDir%, CurentDir
Menu, Sub, Show
Return
if A_Index = 0
Gosub, CurentDir
Return
CurentDir:
InputBox, filename, 保存ファイル名, , , 180,100,,,,,%file%
If ErrorLevel <> 0
ExitApp
;保存先フォルダ名
;左から三文字(p/ とショートカットキー名)カット
StringTrimLeft, cDir, A_ThisMenuItem, 3
FileAppend, %pDir%\%cDir%\%filename%`r`n, archiveList.sz7
Return
SubDir:
InputBox, filename, 保存ファイル名, , , 180,100,,,,,%file%
If ErrorLevel <> 0
ExitApp
StringTrimLeft, sDir, A_ThisMenuItem, 1
FileAppend, %pDir%\%cDir%\%sDir%\%filename%`r`n, archiveList.sz7
Return
Edit:
Run, %editor% E:\etc\archiveList.sz7
Return
DownLoad3.ahk
;;; DownLoad3.ahk (2008-01-05)
; クリップボード内の url をダウンロード
; Principia さんの ShuffleDown.ahk を参考に、保存先 にサブディレクトリも
; 指定可能に改造(1階層のみ)、保存ファイル名を変更できるようにした。
; クリップボード内の url の置換(ttp,tp -> http)
#Include completionURL.ahk
pDir = D:\archives\ ;振り分けたいディレクトリ群がある親ディレクトリ
wget = wget.exe ;wgetの絶対パス
wget_opt = -c --referer=%new_clip% ;wgetのオプション(-O 以外)
{
Loop, %pDir%*, 2, 0
{
Menu, DownDir, Add, &%A_LoopFileName%, ThisDir
}
Menu, DownDir, Add
Menu, DownDir, Add, &MakeDir, MakeDir_Down
Menu, DownDir, Show
return
}
ThisDir:
StringTrimLeft, cDir, A_ThisMenuItem, 1
Loop, %pDir%%cDir%\*, 2, 0
if A_Index >= 1
{
sDir = %A_LoopFileName%
Menu, Sub, Add, &%sDir%, SubDir
}
Menu, Sub, Add
Menu, Sub, Add, p/&%cDir%, CurentDir
Menu, Sub, Show
Return
if A_Index = 0
Gosub, CurentDir
Return
CurentDir:
StringTrimLeft, cDir, A_ThisMenuItem, 3
Ren()
Run, %wget% %wget_opt% -O %pDir%%cDir%\%filename% %new_clip%
Return
SubDir:
StringTrimLeft, sDir, A_ThisMenuItem, 1
Ren()
Run, %wget% %wget_opt% -O %pDir%%cDir%\%sDir%\%filename% %new_clip%
Return
MakeDir_Down:
InputBox, NewDir, 新規ディレクトリ名, , , 180, 100
If ErrorLevel <> 0
Return
FileCreateDir, %pDir%%NewDir%
Ren()
Run, %wget% %wget_opt% -O %pDir%%NewDir%\%filename% %new_clip%
Return
Ren()
{
global
SplitPath, new_clip, Name, Dir, Ext, NameNoExt, Drive
InputBox, filename, 保存ファイル名, , , 180,100,,,,,%Name%
If ErrorLevel <> 0
ExitApp
}