あふで peco を使う
Windows ファイラーの あふw で、peco を使ってフォルダ履歴をいい具合に使いたい。業務上、あっちこっちの Windows Server を UNC パスによりあふで見まくってて、よく使うフォルダ登録だけではきつくなってきたので、履歴からさくっとアクセスできるといいなぁと。
ということで、いろいろやってたら、bat 書いて、perl 書いて、jscript 書いての実装となってしまったが、非常に実用的になった。migemogrep も併せると日本語フォルダにも対応できて最高。
以下のとおり実装した。それぞれのスクリプトは C:\local\bin\afxw\script に置く。
afxw-peco.bat
このバッチはあふから実行するもの(Shift-h に割り当て)で、あふのフォルダ履歴を peco に食わせて、絞り込んだ結果を js を介してあふに渡す。js に渡す前に iconv で cp932 に変換する。Windows バッチの書き方がいまいちよくわからん…。
@echo off cd /d C:\local\bin\afxw\script for /f "delims=" %%i in ('perl afxw-hist.pl ^| peco ^| iconv -f UTF-8 -t CP932') do ( cscript afxw-cd.js "%%i" break )
afxw-hist.pl
あふのオートメーションサーバ機能でフォルダ履歴を取ってきて、出力する。さくっと Perl で。
#!/usr/bin/env perl use 5.010; use strict; use warnings; use utf8; use Encode; use Win32::OLE; my $afxw = Win32::OLE->new('afxw.obj'); my (@dirs, %h); for my $window (0, 1) { my $count = $afxw->HisDirCount($window); for (my $i = 0; $i < $count; $i++) { my $dir = decode('cp932', $afxw->HisDir($window, $i)); push @dirs, $dir unless $h{$dir}; $h{$dir} = 1; } } say encode('utf8', $_) for @dirs;
afxw-cd.js
指定したフォルダをあふのオートメーションサーバ機能で開く。
var args = WScript.Arguments; var dir = args(0); var afxw = WScript.CreateObject("afxw.obj"); var cd = '&EXCD -P"' + dir + '"'; afxw.Exec(cd);
afxw.ini
フォルダ履歴はデフォルト 36 個なので、増やす。あまり多すぎると重くなるのかしら。
HISMAX=4096
afxw.key
あふで Shift-h すると、peco (コマンドプロンプト) が起動するように。
K0026="1072C:\local\bin\afxw\script\afxw-peco.bat"