English | 日本語
ペインには、ディレクトリの代わりに パスのリスト を表示できます。ディスクのあちこちや複数のマシンにあるファイルを 1 つの一覧に並べ、ほかの場所と同じようにあらゆるファイル操作を行えます。
リストは XeFM の外から持ち込みます。検索はそれが一番得意なツール(Everything、find、fd、rg -l、git ls-files、ビルドログ、スプレッドシートの列など)で行い、そのパスをコピーするか、XeFM からコマンドを実行して取り込みます。
Go → Open List では 3 つの取り込み元からリストを開けます。それぞれキーに割り当てられるアクションになっています。
Go → Open List → From Clipboard(open_list_from_clipboard)は、クリップボードを 1 行に 1 つのパスとして読み、それらのパスをアクティブなペインに表示します。
find . -name '*.py' -mtime -1 | pbcopy # macOS
rg -l TODO | clip # Windows
これは Copy Full Path(s) の逆の操作です。あちこちのファイルを選択してパスをコピーし、それを取り込むと同じ行が戻ってきます。
Go → Open List → From Command…(open_list_from_command)は、コマンドを尋ねてペインのディレクトリで実行し、出力されたパスを表示します。クリップボードへパイプしてから取り込む手間が 1 回で済みます。
ダイアログはコマンドの入力欄で、その下にこれまで実行したコマンドが新しい順に並びます。
| キー | 動作 |
|---|---|
| 文字の入力 | コマンドを編集し、履歴を絞り込みます(Migemo も使えます) |
| ↓ / ↑ | 履歴の中を移動し、それぞれのコマンドを入力欄にコピーします |
| Enter | 履歴では、そのコマンドを選んで入力欄に戻ります。入力欄では、入力されているコマンドを実行します |
| Esc | 履歴では、入力していた内容に戻ります。それ以外では閉じます |
| Shift-Delete | 履歴では、そのコマンドを履歴から消します |
入力欄での Enter は常に入力欄の内容を実行します。履歴に rg -l TODO があっても、rg -l と入力すれば rg -l が実行されます。以前のコマンドを実行するには、↓ でそこまで移動して Enter を 2 回押します(1 回目で選び、2 回目で実行)。その間に内容を変えてもかまいません。履歴付きの入力欄を参照してください。
rg -l TODO
git ls-files --modified
fd -e py -E tests
es.exe -path . ext:py # Everything, under this folder
dir /s /b *.log # Windows, cmd
Everything のコマンドラインインターフェイス es.exe は voidtools から別にダウンロードするもので、PATH に置いてください。クエリは Everything 独自の検索構文です(ext:、dm:thisweek、size:>100mb、|、!)。どこで実行してもインデックス全体を検索するので、ペインが表示しているフォルダーに限定するのが -path . です。
/bin/sh、Windows では cmd.exe)を通して実行されるので、パイプや引用符はプロンプトと同じように使えます。X の選択画面から実行するプログラムと同じ XEFM_* の環境変数が渡されます。grep や rg は何も一致しなかったときに、find は読めないフォルダーがあったときに 1 で終了します。パスを 1 つも出力しなかった場合は、ログペインに終了コードと、stderr に書かれた最後の数行が表示されます。ssh:// や s3:// の場所を表示しているペインでは、このマシン上で実行せずに拒否します。出力は UTF-8 として読みます。Windows では実行前にコマンドのコンソールが UTF-8 に切り替えられるので、dir、es.exe などのコンソールツールは、システムの言語にかかわらず日本語やその他の英語以外の名前をそのまま出力します。コンソールの設定を無視するプログラムの出力は、代わりにシステムのコードページで読みます。macOS と Linux では、UTF-8 として正しくない名前はバイト列のまま保持されるので、その名前のファイルも開けます。
Go → Open List → From File(open_list_from_file)、またはファイルの右クリックメニューの Open as List は、カーソル位置のテキストファイルを 1 行に 1 つのパスのリストとして開きます。複数のリストファイルを先に選択しておくと、1 つのリストとして開きます。
リストファイルは、ファイルを指すものなら何でもかまいません。Everything からのエクスポート(File → Export → TXT)、ビルドログの出力ファイル一覧、プロジェクトの横に置いた .lst や .txt、コマンドの出力を保存したものなどです。
dir -Recurse -Name *.log > logs.txt # Windows PowerShell
ssh:// や s3:// の場所にあるリストファイルはその場所で読まれ、相対パスの行はその場所のファイルを指します。M3U プレイリスト(.m3u、.m3u8)もリストファイルです。1 行に 1 つのパスで、プレイリストのフォルダーからの相対パスです。# で始まる行(#EXTM3U、#EXTINF など)は読み飛ばします。ほかのリストファイルでは、# で始まる行もほかと同じパスとして扱います。
Enter は、最初からプレイリストをリストとして開きます。open_with_os は引き続きプレイヤーに渡します。自分のリストファイルも Enter で同じように開くには、FILE_ASSOCIATIONS でその拡張子に 'list' ハンドラーを割り当てます。
{
'pattern': ['*.m3u', '*.m3u8', '*.lst'],
'enter': 'list',
},
このルールが入る前に書かれた設定には含まれていません。プレイリストで Enter を使うには上のエントリを追加してください。ファイルの関連付けを参照してください。
3 つのアクションにはキーが割り当てられていません。割り当てるには設定に追加します。
KEY_BINDINGS['open_list_from_clipboard'] = ['Ctrl-Shift-L']
KEY_BINDINGS['open_list_from_command'] = ['Ctrl-Shift-K']
KEY_BINDINGS['open_list_from_file'] = ['Ctrl-Shift-J']
以下はどの取り込み元にも当てはまります。
"C:\My Files\a.txt" のようなもの)は取り除きます。ssh://… / s3://… の場所はそのまま使い、1 つのリストに混在させられます。それ以外は何も解釈しません。ワイルドカード、CSV の列、XeFM が開ける場所以外の URL は扱いません。
Clipboard、コマンド、またはリストファイル)と、行の名前の基準になるフォルダーが表示されます:[Clipboard] ~/src/xefm、[rg -l TODO] ~/src/xefm。ヘッダーが狭いときは、フォルダーより先に名前が短縮されます。行数は、ほかのディレクトリと同じくフッターに表示されます。src/main.py のように表示されます。2 つのドライブや 2 つのサーバーにまたがるリストは何も共有しないので、各行はパス全体を表示し、ヘッダーにはフォルダーが表示されません。go_parent)で、ペインが前に表示していたディレクトリに戻ります。リストからフォルダーを開いた場合もリストを抜けます。リストはスナップショットです。後からディスクに現れたファイルは追加されず、リストを表示している間はペインの変化を監視しません。リストからフォルダーを開くか Back を押すと、通常のライブなディレクトリに戻ります。
取り込みで変わるのはペインの表示だけです。何もコピー、移動、書き込みされません。
設定のアクションからも、pane.open_list() を使って同じようにリストを開けます。Python で書いた検索に使えます。Open List → From Command と違い、アクションは UI スレッドで実行されるので、時間のかかる処理は入れないでください。
es.exe を使うための設定手順(Windows)。