(今日の独り言)(だいなファイラ)(AutoHotkey)

 これまでは テキストエディタ も ファイラも シェアウェアを使っていたんですが
フリーソフトで何処まで出来るのだろうかと思い立ち いろいろと研究をしている所です
ファイラ は DOSの時代は FD、 Windowsの時代になってからは 卓駆を使ってきました
当然ながら 選択基準も エクスプローラタイプよりも FDタイプになると言うことですね 笑)
ということで 「まめFile5」 や 「PaperPlane」 や 「X-Finder」 や 「あふ」 などなど 試した中から ピックアップしたのは
「だいなファイラ」です、 選んだ理由は 試した中では とりあえず 自分の感覚に一番合っていたって感じですかね
まぁ これは FD〜卓駆時代に染み付いた 私のカスタマイズ上での 私のクセによる物なので
どれが正解なんてものはないですし、 そもそも だいなファイラでも 卓駆の感覚とはかなり違うんですけどね 笑)

 だいなファイラは 基本が2画面ファイラということで
それだけでも 考え方の転換が必要になるんですよね
FDタイプの感覚で言えば ファイルコピーする場合は、 まず Cを押して コピーモードに入って コピー先を指定する
というのが 基本的な思考パターンなんですが
だいなファイラでは 2画面のうちの 片方の画面に送り先を表示しておいて
もう片方の画面で Cを押して 送り込むというのが どうも基本のようなんですね
FDでも 卓駆でも コピーする場合の 送り先は ツリービューでフォルダを指定するのが基本なんで
まずは その時点で 大きな感覚のズレがあり どうした物かと途方にくれた・・・ 笑)

 だいなファイラ自体に コピー や ムーブ の ホットキーを押した後の 送り先確認画面で
ツリービューなりを出して フォルダ指定する方法があるのなら 誰か 教えてくださいまし 笑)

 私の感覚だと デフォルトの コピーや ムーブでは ちょっと 使いづらいということで
どうしたものか・・・・と考えた結果 「外部ツールと 組み合わせてみてはどうか」と考えてみました
ファイルのコピーやムーブに特化した フリーソフトといえば やはり FireFileCopyでしょう
コマンドライン引数も色々と用意されているようですし
このような 外部コマンドを用意して ホットキーから FireFileCopyを呼び出して連携させてみる事にしました

ファイルコピーの場合
FFC C Same
<FireFileCopyのパス>\FFC.exe
$MF /copy /ng /to:"$D"
FFC C Other
<FireFileCopyのパス>\FFC.exe
$MF /copy /ng /to:"$OD"
FFC C Same」の方は 送り元と 送り先の フォルダが同じにセットされて起動し ファイルコピーの実行待ちになります
FFC C Other」の方は 送り先が もう一つの画面にセットされて起動し ファイルコピーの実行待ちになります


ファイルムーブの場合
FFC M Same
<FireFileCopyのパス>\FFC.exe
$MF /move /ng /to:"$D"
FFC M Other
<FireFileCopyのパス>\FFC.exe
$MF /move /ng /to:"$OD"
ムーブの場合も 基本的には コピーと同じ考え方ですね
卓駆の時と比べると 若干の煩雑感は ありますが FireFileCopyとの連携を前提に考えた場合は
決して悪いやり方ではなさそうです

 まぁ キーバインドに関しては それぞれ個人個人の 美学があるでしょうから 語っても仕方が無いですし・・・
次は・・・、 だいなファイラ の デフォルトの機能では物足りないなと思ったのに
指定中のファイルの ファイル名をクリップボードにコピーする というのがありまして
やっぱり 「ロングファイル名」「ショートファイル名」「ロングのフルパス名」「ショートのフルパス名」の
バラエティは欲しいなという感じなんですよね
ということで 自分で 外部コマンド用ツールを作ってみる事に 笑)
手っ取り早く作れるのは やっぱり AutoHotkey!!ということで 作ってみた 笑)
10分間位で作ったので 不具合はあるかもしれないけどまあいいか 笑)
#NoTrayIcon
	SetEnv, InputFileName, %1%
	FullLongFileName := FN2FL(InputFileName)
	FullShortFileName := FN2FS(InputFileName)
	LongFileName := E2FE(FullLongFileName)
	ShortFileName := E2FE(FullShortFileName)
	If !FN2IsE(FullShortFileName)
	{
		MsgBox,% "ファイルの存在が確認できません"
		ExitApp
	}
	Gosub, ShowMenu
	Sleep, 3000
	ToolTip,
	ExitApp
;-----------------------------------------------------------------------------------------------------
ShowMenu:
{
	Menu, menuToClip, Add, ■■このメニューを閉じる■■, CloseThisMenu
	Menu, menuToClip, Add, ファイル名のみ(ロング), ToClipL
	Menu, menuToClip, Add, ファイル名のみ(ショート), ToClipS
	Menu, menuToClip, Add, フルパス(ロング), ToClipFL
	Menu, menuToClip, Add, フルパス(ショート), ToClipFS
	Menu, menuToClip, Show
	Return
}
CloseThisMenu:
{
	ToolTip,% "ファイル名のコピーはキャンセルされました"
	Sleep, 3000
	ToolTip,
	ExitApp
}
ToClipFL:
{
	ToolTip,% ">>>" . FullLongFileName . "<<<"
	Clipboard := FullLongFileName
	Return
}
ToClipFS:
{
	ToolTip,% ">>>" . FullShortFileName . "<<<"
	Clipboard := FullShortFileName
	Return
}
ToClipL:
{
	ToolTip,% ">>>" . LongFileName . "<<<"
	Clipboard := LongFileName
	Return
}
ToClipS:
{
	ToolTip,% ">>>" . ShortFileName . "<<<"
	Clipboard := ShortFileName
	Return
}
;-----------------------------------------------------------------------------------------------------
FN2IsE(FileName)
{
	Return DllCall("shlwapi.dll\PathFileExistsA", "Str", FileName)
}
FN2FL(FileName, BufferSize = 1000)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	DllCall("kernel32.dll\GetLongPathNameA", "Str", FileName, "Str", Buf, "UInt", BufferSize)
	DllCall("kernel32.dll\GetFullPathNameA", "Str", Buf, "UInt", BufferSize, "Str", Buf, "UInt", 0)
	Return Buf
}
FN2FS(FileName, BufferSize = 200)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	DllCall("kernel32.dll\GetShortPathNameA", "Str", FileName, "Str", Buf, "UInt", BufferSize)
	DllCall("kernel32.dll\GetFullPathNameA", "Str", Buf, "UInt", BufferSize, "Str", Buf, "UInt", 0)
	Return Buf
}
E2FE(Expression, BufferSize = 1000)
{
	VarSetCapacity(Buf, BufferSize, 0x00)
	DllCall("kernel32.dll\lstrcpyA", "Str", Buf, "Int", DllCall("shlwapi.dll\PathFindFileNameA", "Str", Expression) )
	Return Buf
}

(exe化したファイルはこのブログの左上にある 「ツール置き場」 に置いてあります )
これを、 exe化して FN2Clip.exe などとリネーム
それから だいなファイラーの外部コマンドで
ファイル名をクリップボードへコピー
<FN2Clipのパス>\FN2Clip.exe
"$F"
と仕込む事で 卓駆の「ファイル名のコピー」のような機能を 付加することが出来ました

 今回の AutoHotkeyのサンプルは 1ファイルのみに対する処理ですが
当然のことながら 「$MF」に対応できるように手を加えれば 複数のファイルを同時に処理できますよね
なるほどなぁ・・・ もしかすると だいなファイラー というのは
ツールと連携する事で 真価を発揮するのかもしれない・・・ と思ったりして 笑)
まぁ 卓駆にしたって そういう機能はあるんですけどね 笑)
今までこのような使い方をしなかったので 外部ツールとの連携もなかなかいいものですね 笑)

 あぁ あと 知っている人にお願いがあります 笑)
外部コマンドから WinRARの 右クリックメニューの 「解凍」に相当する コマンドを教えてください
圧縮ファイルのところで 「U」 を押したら
そのファイルに対する「解凍先のパスとオプション」というダイアログを出す方法ですね
いろいろ 探したけど わ〜か〜ら〜な〜い〜〜〜〜 笑)
まぁ今の所は
WinRARで解凍
C:\Program Files\WinRAR\WinRAR.exe
x -ad "$F"
でやってますけどね 笑)
これだと ファイル名と同じフォルダを作ってそこに解凍するようになりますね

 ということで だいなファイラに関しては これからもしばらくは 研究を続けてみようかと思います
次は 「サクラエディタ編」です!・・・・ えっ!?