JURIA @Wiki
RecentView.ahk
最終更新:
juria
-
view
最近使ったファイル
RecentView.ahk &bookmark_hatena(show=none)
「最近使ったファイル」をリストアップ、migemo でインクリメンタルサーチ
@あれこれ-2007年7月参照
@あれこれ-2007年7月参照
[2008-01-25]シェルのコンテキストメニューを開けるように
[2007-09-29]右クリックメニュー追加
![]() |
![]() |
/*
RecentView.ahk 2008.01.25 版
「最近使ったファイル」をリストアップ、migemo でインクリメンタルサーチ
・流行らせるページ管理人 さまの migemo.ahk を使用させていただいてます。
http://lukewarm.s101.xrea.com/myscripts/index.html
必要なファイルは migemo.ahk を参照のこと。
・ファイル名・フォルダ名とリンク先ファイルの拡張子を一覧表示
・エディット部にファイル名の一部を入力(migemo スタート)
・タイトルバーにファイル総数、ステータスバーにマッチファイル数を表示
・タブでコントロールを移動、カーソルキーでリスト移動・選択
・項目を選択すると、ステータスバーにリンク先のディレクトリを表示。
・項目をダブルクリック、または選択状態にして Enter でリンク先のパスを
ポチエス関連付け版に渡す。
・右クリックメニューから、
・リンク先ファイルのあるフォルダ(リンク先がフォルダの場合はその
上位フォルダ)を開く、
・リンク先ファイル・フォルダ(target)のフルパスをクリップボードにコピー、
・リンク先ファイル・フォルダ(target)のコンテキストメニューを開く、
・ショートカットファイルをゴミ箱に入れる(個別・全て)。
フルパスのコピーは poafag さまの file:///形式とかでフルパス取得する
AHK(http://d.hatena.ne.jp/poafag/20060831/1157027879)を、
コンテキストメニュー表示は Contextmenu(http://cspace.s2.xrea.com/
単機能ツール集)を使わせて頂いてます。
・拡張子欄が空欄になってるものは、フォルダ。
・フォルダへのショートカットの場合、ファイル名中、つまりフォルダ名に
[.] があると拡張子として表示してしまう→動作には問題なし。
*/
#Include %A_ScriptDir%\migemo.ahk
pochi_s = D:\Application\Launcher\esExt5\esExt5.exe ; ポチエスのパス
recent = %UserProfile%\Recent\*.*
;;; ----- 一覧作成 -----
GUI, Margin, 1, 1
Gui, Add, Edit, vEdit gMatch w200
Gui, Add, ListView, r20 w200 AltSubmit vRecentView gRecentView, Name|Ext
Gui, +Resize
Gui, Add, Button, xm+30 Default gButtonOpenFile, OpenThis
Gui, Add, Button, x+30 gButtonCancel, Cancel
Gui, Add, StatusBar
MigemoOpen(A_ScriptDir "\dict\migemo-dict")
; 「最近使ったファイル」リスト
Loop, %recent%
{
lists()
}
LV_ModifyCol(1, 142) ; 列の幅指定
LV_ModifyCol(2, 36)
LV_ModifyCol(2, "Sort") ; 2列目でソート
LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス
SB_SetParts(30) ; ステータスバーの分割幅指定
Gui, Show, , %num% recent files ;タイトルバー(最近使ったファイルの総数)
Return
;;; ----- インクリメンタルサーチ -----
Match:
GuiControlGet,Ed,,Edit
len := StrLen(Ed)
LV_Delete()
GuiControl,-Redraw,RecentView
MigemoSet(Ed)
Loop, %recent%
{
filename := A_LoopFileName
Loop, Parse, filename, "`n"
{
StringSplit, file, filename, .
if(len > 0)
{
ifInString, A_LoopField, %Ed%
{
lists()
}
else if(MigemoMatch(A_LoopField) && len > 1)
{
lists()
}
}
if(len = 0)
lists()
}
}
LV_ModifyCol(2, "Sort") ; 2列目でソート
LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス
GUIControl, +Redraw, RecentView
Return
;;; ----- イベント -----
RecentView:
; ダブルクリック
if A_GuiEvent = DoubleClick
{
targetfile()
Run, %pochi_s% %OutTarget%
}
;Return
; 項目選択
if A_GuiEvent = I ; リストビューの選択状態
{
targetfile()
if ErrorLevel = S ; 選択されたら
Outdir = %OutDir%
num := LV_GetCount(S)
SB_SetText(A_Space num, 1) ; ステータスバーに表示
SB_SetText(OutDir, 2)
}
Return
; [Open This]ボタン、ENTER
ButtonOpenFile:
targetfile()
Run, %pochi_s% %OutTarget%
Return
; 右クリックメニュー・アプリケーションキー
GuiContextMenu:
Menu, ContextMenu, Add, directory, target
Menu, ContextMenu, Add, clip path, clip
Menu, ContextMenu, Add, Shell ContextMenu, context
Menu, ContextMenu, Add, recycle, recycle
Menu, ContextMenu, Add, recycleAll, recycleAll
Menu, ContextMenu, Show
Return
target:
targetfile()
;Run, D:\Application\Filer\afx0165\yaafxcmd.exe -s -l "%OutDir%"
Run, %pochi_s% %OutDir%
Return
clip:
targetfile()
Run, %A_ScriptDir%\AutoHotkey.exe %A_ScriptDir%\scripts\file_path.ahk
"%OutTarget%"
Return
context:
targetfile()
Run, path\to\ContextMenu.exe "%OutTarget%"
Return
recycle:
FileRecycle, %UserProfile%\Recent\%file%.lnk
Gosub, Match ; サーチ中の最新状態にするか
; re() ; 全ファイルのリストを更新するか
Return
recycleAll:
FileRecycle, %UserProfile%\Recent\*.lnk
re()
Return
;;; ----- ファイルリスト表示関数 -----
lists()
{
global
SplitPath,A_LoopFileFullPath,file,dir,ext,name,drive
SplitPath, name, file,dir,ext,name,drive
StringSplit, file, name, . ; ファイル名を.で分割
If file0 > 2 ; 分割した文字列が3つ以上なら
{
LV_Add("", name) ; ファイル名のみ表示
}
else
{
LV_Add("", name, ext) ; 2分割以下なら
}
num := LV_GetCount()
}
;;; ----- リスト再取得 -----
re()
{
global
LV_Delete()
GuiControl,-Redraw,RecentView
Loop, %recent%
{
lists()
}
LV_ModifyCol(2, "Sort") ; 2列目でソート
LV_Modify(1,"Select Focus") ; ソート後1行目を選択・フォーカス
GUIControl, +Redraw, RecentView
GuiControl, , Edit ;
GuiControl, Focus, Edit
}
;;; ----- リンク先の情報取得関数 -----
targetfile()
{
global
SelectedFile := LV_GetNext(0, "F")
;LV_GetText(OutputVar, RowNumber [, ColumnNumber])
LV_GetText(file, SelectedFile, 1)
LV_GetText(ext, SelectedFile, 2)
If ext =
{
file = %file%
FileGetShortcut, %UserProfile%\Recent\%file%.lnk, OutTarget
SplitPath, OutTarget, , OutDir
}
else
{
file = %file%.%ext%
IfInString, ext, lnk
{
FileGetShortcut, %UserProfile%\Recent\%file%, OutTarget
SplitPath, OutTarget, , OutDir
}
else
{
FileGetShortcut, %UserProfile%\Recent\%file%.lnk, OutTarget
;, OutDir
SplitPath, OutTarget, , OutDir
}
}
Return
}
ButtonCancel:
GuiClose:
GuiEscape:
MigemoClose()
ExitApp

