rufio 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README_ja.md CHANGED
@@ -32,8 +32,10 @@ rufio は、ファイルを探すところからスクリプトの実行、結
32
32
  ### ファイルマネージャーとして
33
33
 
34
34
  - **Vimライクなキーバインド**: 直感的なナビゲーション
35
- - **リアルタイムプレビュー**: ファイル内容を即座に表示(`bat` によるシンタックスハイライト対応)
36
- - **高速検索**: fzf/rgaとの連携
35
+ - **リアルタイムプレビュー**: ファイル内容を即座に表示(`bat` によるシンタックスハイライト対応、`.zip` はエントリ一覧)
36
+ - **高速検索**: fzf/rgaとの連携に加え、PDF・Excel・PowerPointも読める全ブックマーク横断検索を内蔵
37
+ - **ZIPの展開・圧縮**: 選択したアイテムをバックグラウンドで展開・圧縮
38
+ - **パスへ移動**: コピーしたパスを `:cd` に貼り付けて移動
37
39
  - **ブックマーク**: よく使うディレクトリに素早くアクセス
38
40
  - **zoxide連携**: スマートなディレクトリ履歴
39
41
 
@@ -78,346 +80,38 @@ rufio /path/to # 指定したディレクトリで起動
78
80
 
79
81
  ## キーバインド
80
82
 
81
- ### 基本操作
83
+ よく使うキーです。すべてのキーとモードは **[操作ガイド](./docs/guide_ja.md)** を参照するか、rufio の中で `?` を押してください。
82
84
 
83
- | キー | 機能 |
85
+ | キー | 操作 |
84
86
  |------|------|
85
- | `j/k` | 上下移動 |
86
- | `h/l` | 親/子ディレクトリ |
87
- | `g/}` | 先頭/末尾 |
88
- | `Enter` | ディレクトリに入る/ファイルを開く |
89
- | `q` | 終了 |
90
- | `T` | 終了して現在のディレクトリへ移動([シェル連携](#シェル連携)) |
91
-
92
- ### ファイル操作
93
-
94
- | キー | 機能 |
95
- |------|------|
96
- | `Space` | 選択/選択解除 |
97
- | `o` | 外部エディタで開く |
98
- | `a/A` | ファイル/ディレクトリ作成 |
99
- | `r` | リネーム |
100
- | `d` | 削除 |
101
- | `m/c/x` | 移動/コピー/削除(選択済み) |
102
- | `z` | 選択した `.zip` を展開 / 選択したアイテムを `.zip` に圧縮(選択済み) |
103
-
104
- ### 検索・フィルター
105
-
106
- | キー | 機能 |
107
- |------|------|
108
- | `f` | フィルターモード |
109
- | `s` | fzfでファイル検索 |
110
- | `F` | rgaでファイル内容検索 |
111
-
112
- ### ナビゲーション
113
-
114
- | キー | 機能 |
115
- |------|------|
116
- | `b` | ブックマーク追加 |
117
- | `B` | ブックマークメニュー |
118
- | `0` | 起動ディレクトリに戻る |
119
- | `1-9` | ブックマークにジャンプ |
120
- | `Tab` | 次のブックマークへ循環移動(Filesモード限定) |
121
- | `z` | zoxide履歴(未選択時) |
122
-
123
- ### ツールランタイム
124
-
125
- | キー | 機能 |
126
- |------|------|
127
- | `:` | コマンドモード |
128
- | `J` | ジョブモード |
129
- | `L` | 実行ログ表示 |
87
+ | `j/k`、`h/l` | 上下移動 / 親ディレクトリ / ディレクトリに入る |
88
+ | `g/}` | 先頭 / 末尾 |
89
+ | `P` | 全画面プレビュー |
90
+ | `Space` | 選択 |
91
+ | `m/c/x` | 選択したアイテムの移動 / コピー / 削除 |
92
+ | `z` | 選択したアイテムの展開・圧縮(`.zip`)。未選択時は zoxide 履歴 |
93
+ | `a/A`、`r`、`d` | ファイル / ディレクトリ作成、リネーム、削除 |
94
+ | `f`、`s`、`F` | フィルター、fzf でファイル名検索、rga で内容検索 |
95
+ | `G` | 全ブックマーク配下のファイル名・内容(PDF・Excel・PowerPoint も)を横断検索 |
96
+ | `b`、`B`、`1-9`、`Tab` | ブックマーク追加、メニュー、ジャンプ、次のブックマーク |
97
+ | `:` | コマンドモード(`@スクリプト`、`rake:タスク`、`!シェル`、`cd <パス>`) |
98
+ | `J`、`L`、`C` | ジョブ、ログ、設定ディレクトリ |
130
99
  | `?` | ヘルプ |
131
- | `G` | 全ブックマーク配下のファイル名・ファイル内容を横断検索 |
132
- | `C` | ~/.config/rufio/を開く(Configモード、操作はFilesと共通) |
133
- | `Shift+Tab` | モード切り替え(逆順) |
134
-
135
- ### Gモード(横断検索)
136
-
137
- `G` を押すと、ブックマークした全ディレクトリの配下を再帰的に検索します。
138
- Tabで **File names(ファイル名)** と **Content(ファイル内容)** を切り替えます。
139
- 大文字・小文字を区別しない文字列の部分一致で検索し、内容検索ではファイル名・行番号・一致した行を表示します。
140
- 通常のテキストはUTF-8として読み込み、文書抽出に対応していないファイルは先頭8 KBにNULバイトがあればバイナリとしてスキップします。
141
- 上下矢印または `Ctrl+N/P` で選択、
142
- Enterで選んだファイルの場所へ移動します。`Ctrl+U` で検索語をクリアし、
143
- Escで元の表示に戻ります。検索はバックグラウンドで進みます。
144
- 検索対象は `b` で登録したブックマークです。外部検索ツールは不要です。
145
- アクセスできないディレクトリはスキップし、ディレクトリのシンボリックリンクは辿りません。
146
- 検索中は黄色の `Searching...` と動くスピナーを表示します。
147
- 結果がまだ見つかっていない間も表示が動き、完了すると緑の `Search complete` に切り替わります。
148
-
149
- ファイル名検索・内容検索から特定の拡張子を除外するには、
150
- `~/.config/rufio/config.rb` に以下を追加してRufioを再起動します。
151
-
152
- ```ruby
153
- GLOBAL_SEARCH_EXCLUDED_EXTENSIONS = %w[.png .jpg .zip .tar.gz .log].freeze
154
- ```
155
-
156
- 大文字・小文字は区別せず、先頭のドットは省略できます。デフォルトは `[]`(拡張子の除外なし)です。
157
- ディレクトリ名には適用しません。
158
-
159
- #### PDF・Excel・PowerPointの内容検索(v1.2.0)
160
-
161
- Contentモードで文書内の文字列も検索できます。Rubyのgemで抽出するため、
162
- Python・Microsoft Office・外部変換コマンドは不要です。
163
-
164
- | ファイル | 検索する内容 | 結果の位置表示 |
165
- |------------|--------------|----------------|
166
- | `.pdf` | 抽出可能な文字列 | ページ番号 |
167
- | `.xlsx` | セルの文字列・値 | シート名・セル番地 |
168
- | `.pptx` | スライドの図形・表内の文字列 | スライド番号 |
169
-
170
- 大文字・小文字を区別しない部分一致検索です。PowerPointの段落内で分割された文字列は連結し、
171
- スライド番号はプレゼンテーションの表示順に対応します。
172
- Excelの数式はファイルに保存済みの計算結果を検索し、再計算は行いません。
173
- Enterでは元の文書の場所へ移動します。Officeでセルやスライドを直接開く機能ではありません。
174
-
175
- 抽出した文字列は起動中のメモリにキャッシュし、検索語を変更しても再利用します。
176
- 最大64文書、文字列とメタデータの概算で16 MiBまで保持し、超える文書もキャッシュせずに検索します。
177
- ファイルを更新・置換した場合は再抽出します。キャッシュをディスクには保存しません。
178
-
179
- 拡張子除外設定は文書にも適用します。破損・非対応・暗号化された文書でエラーが発生しても、他のファイルの検索は続行します。
180
- 画像だけのPDFにはOCRが必要ですが、今回の実装には含みません。旧形式の`.xls`・`.ppt`、
181
- スライドノート、画像やグラフだけに含まれる文字列も対象外です。
182
- PDFの文字抽出精度は、文書のフォントや文字コードの対応情報に依存します。
183
-
184
- ### Configモード(C)
185
-
186
- `C` で `~/.config/rufio/` を開きます。ディレクトリがなければ作成します。
187
- 移動・プレビュー・ファイル操作はFilesモードと共通で、設定やスクリプトを直接編集できます。
188
- 設定ディレクトリの外へ移動すると、モード表示がFilesに戻ります。
189
-
190
- ### シェル連携
191
-
192
- `rufio --shell-init` は OS に合わせた `rf` というシェル関数を出力します。Windows では
193
- PowerShell 用、それ以外ではログインシェル(`bash`・`zsh`・`fish`)用です。シェル名を
194
- 指定して切り替えることもできます。`rf` で rufio を起動し `T` を押すと、終了してシェルが
195
- 表示中のディレクトリへ移動します。`q` で終了した場合は移動しません。
196
-
197
- ```bash
198
- # bash / zsh(~/.bashrc または ~/.zshrc)
199
- eval "$(rufio --shell-init)"
100
+ | `q`、`T` | 終了、終了してシェルを現在のディレクトリへ移動 |
200
101
 
201
- # fish(~/.config/fish/config.fish)
202
- rufio --shell-init fish | source
203
- ```
204
-
205
- ```powershell
206
- # PowerShell($PROFILE)
207
- Invoke-Expression (& rufio --shell-init powershell | Out-String)
208
- ```
209
-
210
- シェル起動のたびに Ruby を起動したくない場合は、`rufio --shell-init >> ~/.bashrc` の
211
- ように一度だけ出力を追記してください。
212
-
213
- ## コマンドモード
214
-
215
- `:` でコマンドモードを起動し、様々なコマンドを実行できます。
216
-
217
- ### スクリプト実行
218
-
219
- ```
220
- :@build # @で始まるとスクリプト補完
221
- :@deploy.rb # 登録済みスクリプトを実行
222
- ```
223
-
224
- ### シェルコマンド
225
-
226
- ```
227
- :!git status # !で始まるとシェルコマンド
228
- :!ls -la # バックグラウンドで実行
229
- ```
102
+ Gモードでは `Ctrl+J` / `Ctrl+K` で次/前の検索結果を選択し、`Enter` で開きます。
230
103
 
231
- ### 組み込みコマンド
104
+ ## ドキュメント
232
105
 
233
- ```
234
- :hello # 挨拶メッセージ
235
- :stop # rufioを終了
236
- ```
237
-
238
- ## スクリプトパス
239
-
240
- ### スクリプトパスとは
241
-
242
- スクリプトファイルを配置するディレクトリを登録する機能です。登録したディレクトリ内のスクリプトは、コマンドモードで `@` プレフィックスを使って実行できます。
243
-
244
- ### 管理方法
245
-
246
- `B` → `3` でスクリプトパス管理メニューを開きます:
247
-
248
- - 登録済みパスの一覧表示
249
- - `d`: パスを削除
250
- - `Enter`: ディレクトリにジャンプ
251
- - `ESC`: メニューを閉じる
252
-
253
- ### 対応スクリプト
254
-
255
- | 拡張子 | 言語 |
256
- |--------|------|
257
- | `.rb` | Ruby |
258
- | `.py` | Python |
259
- | `.ps1` | PowerShell |
260
- | `.sh` | Shell (bash/zsh) |
261
-
262
- ## DSLコマンド
263
-
264
- `~/.config/rufio/commands.rb` でカスタムコマンドを定義できます:
265
-
266
- ```ruby
267
- command "hello" do
268
- ruby { "Hello from rufio!" }
269
- description "挨拶コマンド"
270
- end
271
-
272
- command "status" do
273
- shell "git status"
274
- description "Gitステータス"
275
- end
276
-
277
- command "build" do
278
- script "~/.config/rufio/scripts/build.rb"
279
- description "ビルド実行"
280
- end
281
- ```
282
-
283
- ## 設定
284
-
285
- ### 設定ファイル構成
286
-
287
- ```
288
- ~/.config/rufio/
289
- ├── config.rb # メイン設定(スクリプトパス、カラー等)
290
- ├── commands.rb # DSLコマンド定義
291
- ├── bookmarks.json # ブックマーク
292
- ├── scripts/ # スクリプトファイル
293
- └── logs/ # 実行ログ
294
- ```
295
-
296
- ### 設定例
297
-
298
- ```ruby
299
- # ~/.config/rufio/config.rb
300
-
301
- # スクリプトパス - スクリプトを配置するディレクトリ
302
- SCRIPT_PATHS = [
303
- '~/.config/rufio/scripts',
304
- '~/my-scripts',
305
- './scripts'
306
- ].freeze
307
-
308
- # カラー設定(HSL形式推奨)
309
- COLORS = {
310
- directory: { hsl: [220, 80, 60] },
311
- file: { hsl: [0, 0, 90] },
312
- executable: { hsl: [120, 70, 50] },
313
- selected: { hsl: [50, 90, 70] },
314
- preview: { hsl: [180, 60, 65] }
315
- }.freeze
316
- ```
317
-
318
- ### ローカル設定
319
-
320
- プロジェクトルートに `rufio.rb` を配置すると、そのプロジェクト専用のスクリプトパスを設定できます:
321
-
322
- ```ruby
323
- # ./rufio.rb(プロジェクトルート)
324
- SCRIPT_PATHS = [
325
- './scripts',
326
- './bin'
327
- ].freeze
328
- ```
329
-
330
- ## 外部ツール連携
331
-
332
- rufioは以下の外部ツールと連携して機能を拡張します。
333
- すべて**オプション**です。インストールなしでも rufio は正常動作します。
334
-
335
- | ツール | 用途 | キー | 必須 |
336
- |--------|------|------|------|
337
- | fzf | ファイル名検索 | `s` | オプション |
338
- | rga | ファイル内容検索 | `F` | オプション |
339
- | zoxide | ディレクトリ履歴 | `z` | オプション |
340
- | bat | プレビューのシンタックスハイライト | — | オプション |
341
-
342
- ### bat — シンタックスハイライト
343
-
344
- `bat` をインストールすると、プレビューペインでコードファイルを開いた際に
345
- シンタックスハイライトが表示されます(Ruby、Python、Go、Rust、TypeScript など15言語以上対応)。
346
-
347
- ハイライトはバックグラウンドで非同期に読み込まれるため、大きなソースツリーでも
348
- カーソル移動が重くなりません。
349
-
350
- ```bash
351
- # macOS
352
- brew install bat
353
-
354
- # Ubuntu/Debian
355
- apt install bat
356
- ```
357
-
358
- `rufio -c` を実行すると bat が正しく認識されているか確認できます。
359
-
360
- ### インストール(全ツール)
361
-
362
- ```bash
363
- # macOS
364
- brew install fzf bat rga zoxide
365
-
366
- # Ubuntu/Debian
367
- apt install fzf bat zoxide
368
- # rgaは別途インストール: https://github.com/phiresky/ripgrep-all
369
- ```
370
-
371
- ## 高度な機能
372
-
373
- ### ネイティブコンテンツ検索
374
-
375
- G mode のコンテンツ検索は、macOS(arm64/x86_64)、Linux(x86_64/aarch64、glibc 2.17 以降または musl)、Windows(x64/arm64)では同梱の Zig エンジンで動作します。ブックマークを並列に検索し、検索の間でファイル内容をキャッシュするため、検索語を打ち直したときの再検索は `rg` の約 10 倍速くなります。その他のプラットフォームや、大文字小文字のある非 ASCII 文字を含む検索語では自動的に Ruby の検索を使います。`RUFIO_NATIVE_SEARCH=0` で無効化できます。
376
-
377
- ### ZIP の圧縮・展開
378
-
379
- Files モードで `Space` で選択して `z` を押すと、選択がすべて `.zip` ならそれぞれを現在のディレクトリの `<名前>/` に展開し、それ以外は 1 つの `.zip` に圧縮します。処理はジョブとして実行されます(Jobs モードで進捗表示・キャンセル)。`.zip` はプレビューでエントリ一覧も表示します。
380
-
381
- 展開時は書き込み前にアーカイブ全体を検証します。パストラバーサル・絶対パス・データ範囲が重なるエントリ、合計 16GiB・10 万エントリ・圧縮率 1000:1(1MiB 超のエントリ)を超えるアーカイブを拒否し、シンボリックリンクと暗号化エントリはスキップし、CRC-32 を検証し、既存ファイルは上書きしません。対応する圧縮方式は Stored と Deflate です。
382
-
383
- コンテンツ検索と同じプラットフォームでは、同梱の Zig エンジンがエントリの伸長と 1MiB 以上のファイルの圧縮を並列に行います(4 CPU で 64MB のテキスト 8 ファイルを計測したところ、Ruby 実装より圧縮が約 4.6 倍、展開が約 3.2 倍速くなりました)。検証はどちらの場合も Ruby 側で行います。`RUFIO_NATIVE_ZIP=0` で Ruby 実装のみを使います。
384
-
385
- 同梱バイナリの再ビルド(Zig 0.17 が必要):
386
-
387
- ```bash
388
- make -C lib_zig/rufio_native dist # 全プラットフォーム
389
- bundle exec rake native:check # 同梱バイナリの検証
390
- ```
391
-
392
- ### ネイティブスキャナー(実験的)
393
-
394
- 高速なディレクトリスキャンのためのネイティブ実装をサポート:
395
-
396
- ```bash
397
- rufio --native # 自動検出
398
- rufio --native=zig # Zig実装
399
- ```
400
-
401
- ### JITコンパイラ
402
-
403
- ```bash
404
- rufio --yjit # Ruby 3.1+ YJIT
405
- rufio --zjit # Ruby 3.4+ ZJIT
406
- ```
407
-
408
- ### ヘルスチェック
409
-
410
- ```bash
411
- rufio -c # システム依存関係をチェック
412
- rufio --check-health # 同上
413
- ```
106
+ - **[操作ガイド](./docs/guide_ja.md)**: キー・モード・コマンドモード・スクリプト・DSL コマンド・設定・シェル連携・ネイティブエンジン
107
+ - **[CHANGELOG](./CHANGELOG.md)**: リリースノート
108
+ - **[SECURITY.md](./SECURITY.md)**: セキュリティ設計
414
109
 
415
110
  ## 開発
416
111
 
417
112
  ### 必要な環境
418
113
 
419
114
  - Ruby 2.7.0以上
420
- - io-console, pastel, tty-cursor, tty-screen gems
421
115
 
422
116
  ### 開発版の実行
423
117