rufio 0.41.0 → 0.60.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.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +26 -0
  3. data/README.md +96 -194
  4. data/bin/rufio +0 -3
  5. data/docs/CHANGELOG_v0.50.0.md +128 -0
  6. data/examples/config.yml +8 -0
  7. data/lib/rufio/builtin_commands.rb +34 -0
  8. data/lib/rufio/command_completion.rb +20 -5
  9. data/lib/rufio/command_mode.rb +157 -46
  10. data/lib/rufio/config_loader.rb +37 -0
  11. data/lib/rufio/dsl_command.rb +120 -0
  12. data/lib/rufio/dsl_command_loader.rb +177 -0
  13. data/lib/rufio/interpreter_resolver.rb +79 -0
  14. data/lib/rufio/job_manager.rb +128 -0
  15. data/lib/rufio/job_mode.rb +146 -0
  16. data/lib/rufio/keybind_handler.rb +243 -232
  17. data/lib/rufio/notification_manager.rb +77 -0
  18. data/lib/rufio/script_config_loader.rb +101 -0
  19. data/lib/rufio/script_executor.rb +253 -0
  20. data/lib/rufio/script_path_manager.rb +386 -0
  21. data/lib/rufio/script_runner.rb +216 -0
  22. data/lib/rufio/task_status.rb +118 -0
  23. data/lib/rufio/terminal_ui.rb +181 -495
  24. data/lib/rufio/version.rb +1 -1
  25. data/lib/rufio.rb +15 -11
  26. data/scripts/test_jobs/build_simulation.sh +29 -0
  27. data/scripts/test_jobs/deploy_simulation.sh +37 -0
  28. data/scripts/test_jobs/quick.sh +11 -0
  29. data/scripts/test_jobs/random_result.sh +23 -0
  30. data/scripts/test_jobs/slow_fail.sh +10 -0
  31. data/scripts/test_jobs/slow_success.sh +10 -0
  32. data/scripts/test_jobs/very_slow.sh +19 -0
  33. metadata +23 -13
  34. data/docs/file-preview-optimization-analysis.md +0 -759
  35. data/docs/file-preview-performance-issue-FIXED.md +0 -547
  36. data/lib/rufio/plugin.rb +0 -89
  37. data/lib/rufio/plugin_config.rb +0 -59
  38. data/lib/rufio/plugin_manager.rb +0 -84
  39. data/lib/rufio/plugins/file_operations.rb +0 -44
  40. data/lib/rufio/plugins/hello.rb +0 -30
  41. data/lib/rufio/plugins/stop.rb +0 -32
  42. data/lib/rufio/project_command.rb +0 -147
  43. data/lib/rufio/project_log.rb +0 -68
  44. data/lib/rufio/project_mode.rb +0 -58
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0a8696f2d93276e424c2cad84cb869547858bd7f9e97ab40405838d92640c3d6
4
- data.tar.gz: 517baff63dd16d5943a4d7aea0c5141d56041077a0f83a8525daa269f8b442f3
3
+ metadata.gz: a880862d559dd867d819889c3458abac662ae2a262a93d09c552aec45f850f06
4
+ data.tar.gz: 1ede13dbac6ef6b6d0af6f0c0d10254a0a6cfa79869b6eafa8636bbd31f2e773
5
5
  SHA512:
6
- metadata.gz: ccf7de9709e26faa8452140ef00c4daa9a4e5f8e3725b30e1970f202ec51301975a2feb5dbe197fb04aea50fa6006f4e002996b27209847afdff2d1b046bb253
7
- data.tar.gz: d74bc18839a9c460bf13c4e937399d3de9027d2eb9c712a6131e5c31c3881a4cce8488ab0209876d5ebb16917abbc37fac9c2aed743c6b0646b616b30cbc5d4d
6
+ metadata.gz: 198ef8a599e51a0bf51e9935e06329a81e4d68fa1fd065665e6f26d44013a3dc9e4419b385296f29dbfb92a44ab1e744d6a72d1352c9c2fd270f8c9f08640f95
7
+ data.tar.gz: 062a514877116a7ee3c30211628a68740911ee98844693e9caea4571da783622c59fc4a8a7fe26ee512fad62f3b296833be74d815aab4d5ff9635cccac5261f3
data/CHANGELOG.md CHANGED
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.60.0] - 2026-01-24
11
+
12
+ ### Added
13
+ - **⌨️ スクリプト補完機能**: コマンドモードでスクリプトのTab補完が可能に
14
+ - `@`プレフィックスでスクリプト専用補完(例: `@bu` + Tab → `@build.sh`)
15
+ - 通常補完時も登録済みスクリプトが候補に表示
16
+ - `CommandCompletion`が`CommandMode`と連携してスクリプト候補を取得
17
+
18
+ ### Removed
19
+ - **🗑️ プロジェクトモード廃止**: `P`キーで起動するプロジェクトモードを削除
20
+ - `lib/rufio/project_mode.rb` - ProjectModeクラス
21
+ - `lib/rufio/project_command.rb` - ProjectCommandクラス
22
+ - `lib/rufio/project_log.rb` - ProjectLogクラス
23
+ - 関連するUI描画メソッド(`draw_project_mode_screen`等)
24
+ - 関連するキーハンドリング(`handle_project_mode_key`等)
25
+ - 関連するテストファイル
26
+
27
+ ### Changed
28
+ - **📋 ヘルプ表示更新**: ヘルプダイアログに`J`キー(Job mode)を追加
29
+ - **🧹 コードクリーンアップ**: プロジェクトモード関連の未使用コードを削除
30
+
31
+ ### Technical Details
32
+ - **テストカバレッジ**: 684 tests, 2474 assertions (all passing)
33
+ - **削除ファイル**: 7ファイル(ライブラリ3、テスト4)
34
+ - **影響範囲**: `keybind_handler.rb`, `terminal_ui.rb`, `rufio.rb`
35
+
10
36
  ## [0.41.0] - 2026-01-13
11
37
 
12
38
  ### Changed
data/README.md CHANGED
@@ -6,26 +6,26 @@ Ruby製のターミナルベースファイルマネージャー
6
6
 
7
7
  ## 概要
8
8
 
9
- rufioは、Yaziにインスパイアされたターミナル上で動作するファイルマネージャーです。Rubyで実装されており、プラグインサポートを備えています。軽量で高速な操作性を提供し、ファイルの閲覧・管理・検索機能を備えています。
9
+ rufioは、Yaziにインスパイアされたターミナル上で動作するファイルマネージャーです。Rubyで実装されており、DSLコマンドによる拡張機能を備えています。軽量で高速な操作性を提供し、ファイルの閲覧・管理・検索機能を備えています。
10
10
 
11
- ### 🚀 v0.33.0の重要な更新
11
+ ### 🚀 v0.60.0の重要な更新
12
12
 
13
- - **🚨 重大なパフォーマンス改善**: ファイルプレビューが40-86倍高速化(80ms → 1-2ms)
14
- - **⚡ Zig実装追加**: 最小バイナリサイズ(52.6 KB)のネイティブスキャナー
15
- - **📊 YJIT対応**: Ruby 3.4+ のJITコンパイラで全体的な性能向上
13
+ - **⌨️ スクリプト補完機能**: コマンドモードでスクリプトのTab補完が可能に
14
+ - **🗑️ プロジェクトモード廃止**: `P`キーのプロジェクトモードを削除(ジョブモード`J`に機能統合予定)
15
+ - **🧹 コードクリーンアップ**: 未使用コードの削除でコードベースをスリム化
16
16
 
17
- 詳細は [CHANGELOG v0.33.0](./docs/CHANGELOG_v0.33.0.md) を参照してください。
17
+ 詳細は [CHANGELOG](./CHANGELOG.md) を参照してください。
18
18
 
19
19
  ## 特徴
20
20
 
21
21
  - **軽量でシンプル**: Rubyで書かれた軽量なファイルマネージャー
22
22
  - **直感的な操作**: Vimライクなキーバインド
23
- - **プラグインシステム**: 拡張可能なプラグインアーキテクチャ
23
+ - **DSLコマンドシステム** (v0.50.0): 拡張可能なDSLベースのコマンド定義
24
24
  - **強力なコマンドモード** (v0.32.0):
25
25
  - シェルコマンド実行 (`!ls`, `!git status` など)
26
26
  - コマンド履歴(上下矢印キーでナビゲーション)
27
27
  - インテリジェントなTab補完(候補リスト表示)
28
- - Rubyプラグインによる拡張可能なコマンド
28
+ - DSLコマンドによる拡張可能なコマンド
29
29
  - **バックグラウンドコマンド実行** (v0.33.0):
30
30
  - `:!command` でシェルコマンドを非同期実行
31
31
  - 実行中もrufioの操作が可能
@@ -215,10 +215,16 @@ rufio --help # ヘルプメッセージを表示
215
215
  | キー | 機能 |
216
216
  | --------- | ------------------------------------ |
217
217
  | `b` | 現在のディレクトリをブックマークに追加 |
218
- | `P` | プロジェクトモードに入る (v0.33.0で変更) |
218
+ | `B` | ブックマークメニュー(スクリプトパス管理含む) |
219
219
  | `0` | 起動したディレクトリに移動 |
220
220
  | `1`-`9` | 対応する番号のブックマークに移動 |
221
221
 
222
+ #### ジョブモード
223
+
224
+ | キー | 機能 |
225
+ | --------- | ------------------------------------ |
226
+ | `J` | ジョブモードに入る |
227
+
222
228
  #### zoxide連携機能
223
229
 
224
230
  | キー | 機能 |
@@ -249,9 +255,10 @@ rufio --help # ヘルプメッセージを表示
249
255
  - 完了時に通知メッセージを3秒間表示
250
256
  - 実行結果は自動的に `~/.config/rufio/log/` に保存
251
257
 
252
- **Rubyコマンド** (v0.32.0):
258
+ **DSLコマンド** (v0.50.0):
253
259
  ```
254
- :hello # Hello プラグインを実行
260
+ :hello # Hello DSLコマンドを実行
261
+ :stop # rufioを終了
255
262
  ```
256
263
 
257
264
  #### ログビューワ (v0.33.0)
@@ -370,17 +377,11 @@ rufio --help # ヘルプメッセージを表示
370
377
  - 重複パスは自動検出
371
378
  - 緑色のダイアログで表示(作成操作)
372
379
 
373
- **プロジェクトモード (`p`キー):**
374
- - **`SPACE`キー**: ブックマークをプロジェクトとして選択
375
- - 選択されたブックマークは✓マークと緑背景で表示
376
- - **`r`キー**: カーソル位置のブックマークをリネーム
377
- - 黄色のダイアログで入力
378
- - 前後のスペースは自動削除
379
- - **`d`キー**: カーソル位置のブックマークを削除
380
- - 赤色の確認ダイアログ表示
381
- - **`l`キー**: ログモードに入る
382
- - **`:`キー**: コマンドモード起動
383
- - **`ESC`キー**: プロジェクトモードを終了
380
+ **ブックマークメニュー (`B`キー):**
381
+ - **`1`**: 現在のディレクトリをブックマークに追加
382
+ - **`2`**: 現在のディレクトリをスクリプトパスに追加
383
+ - **`3`**: スクリプトパスを管理(一覧表示、削除、ジャンプ)
384
+ - **`4`**: ブックマーク一覧を表示
384
385
 
385
386
  #### 高速ナビゲーション (`1`-`9`)
386
387
 
@@ -395,32 +396,27 @@ rufio --help # ヘルプメッセージを表示
395
396
  - 名前の前後のスペースは自動削除されて保存される
396
397
  - JSONファイルを直接編集することも可能
397
398
 
398
- ### プロジェクトモード機能の詳細
399
+ ### スクリプトパス機能の詳細
399
400
 
400
- #### プロジェクトモード (`p`)
401
+ #### スクリプトパスとは
401
402
 
402
- プロジェクトモードでは、ブックマークしたディレクトリをプロジェクトとして管理できます。
403
+ スクリプトパスは、スクリプトファイルを配置するディレクトリを登録する機能です。登録したディレクトリ内のスクリプトは、コマンドモードで`@`プレフィックスを使って実行できます。
403
404
 
404
- #### スクリプト実行機能
405
+ #### スクリプトパスの管理 (`B` → `3`)
405
406
 
406
- - **スクリプトディレクトリ**: `~/.config/rufio/scripts`
407
- - 初回起動時に自動作成
408
- - `config.rb`でカスタマイズ可能
409
- - サンプルスクリプト `hello.rb` が含まれる
410
- - **スクリプト実行**: `:`キーでコマンドモード起動
411
- - `.rb`ファイルを一覧表示
412
- - 選択したスクリプトを実行
413
- - プロジェクトコンテキストで実行
407
+ - **一覧表示**: 登録済みのスクリプトパスを一覧表示
408
+ - **j/k**: カーソル移動
409
+ - **d**: 選択したパスを削除
410
+ - **Enter**: 選択したディレクトリにジャンプ
411
+ - **ESC**: メニューを閉じる
414
412
 
415
- #### UI表示
413
+ #### スクリプト補完機能
416
414
 
417
- プロジェクトモードのUIは通常モードと統一されています:
415
+ コマンドモード(`:`)でスクリプトをTab補完できます:
418
416
 
419
- - **選択マーク**: ✓(チェックマーク)で選択を表示
420
- - **選択済みブックマーク**: 緑背景、黒文字で表示
421
- - **カーソル位置**: 設定ファイルの選択色でハイライト
422
- - **セパレータ**: 左右画面の間に`│`を表示
423
- - **フッター**: 反転表示でキーバインドを表示
417
+ - **`@`プレフィックス**: スクリプト専用補完
418
+ - 例: `@bu` + Tab → `@build.sh`
419
+ - **通常補完**: 内部コマンドとスクリプト両方を候補に表示
424
420
 
425
421
  #### 操作色の統一
426
422
 
@@ -428,6 +424,7 @@ rufio --help # ヘルプメッセージを表示
428
424
  - **青色ダイアログ**: ディレクトリ作成
429
425
  - **黄色ダイアログ**: リネーム操作
430
426
  - **赤色ダイアログ**: 削除操作
427
+ - **マゼンタダイアログ**: スクリプトパス管理
431
428
 
432
429
  ### zoxide連携機能の詳細
433
430
 
@@ -507,7 +504,7 @@ apt install zoxide
507
504
 
508
505
  #### 利用可能なコマンド
509
506
 
510
- コマンドはプラグインによって提供されます。プラグインシステムの詳細については後述の「プラグインシステム」セクションを参照してください。
507
+ コマンドはDSLで定義されます。DSLコマンドシステムの詳細については後述の「DSLコマンドシステム」セクションを参照してください。
511
508
 
512
509
  ### 必要な外部ツール
513
510
 
@@ -589,188 +586,93 @@ COLORS = {
589
586
  - `selected`: 選択中の項目の色
590
587
  - `preview`: プレビューパネルの色
591
588
 
592
- ## プラグインシステム
589
+ ## DSLコマンドシステム
593
590
 
594
- rufioは拡張可能なプラグインシステムを備えており、独自の機能を簡単に追加できます。
591
+ rufioはDSLベースのコマンドシステムを備えており、独自のコマンドを簡単に追加できます。
595
592
 
596
- ### プラグインの配置場所
593
+ ### コマンド定義ファイル
597
594
 
598
- #### 1. 本体同梱プラグイン
599
- ```
600
- lib/rufio/plugins/*.rb
601
- ```
602
- rufioに標準で含まれるプラグイン。外部gem依存なしの基本機能を提供。
595
+ ユーザー定義コマンドは以下のファイルに記述します:
603
596
 
604
- #### 2. ユーザープラグイン
605
597
  ```
606
- ~/.rufio/plugins/*.rb
598
+ ~/.config/rufio/commands.rb
607
599
  ```
608
- ユーザーが自由に追加できるプラグイン。GitHub GistやrawURLから取得可能。
609
600
 
610
- ### プラグインの作成方法
601
+ ### コマンドの作成方法
611
602
 
612
- #### シンプルなプラグイン例
603
+ #### Rubyコードを実行するコマンド
613
604
 
614
605
  ```ruby
615
- # ~/.rufio/plugins/hello.rb
616
- module Rufio
617
- module Plugins
618
- class Hello < Plugin
619
- def name
620
- 'Hello'
621
- end
622
-
623
- def description
624
- 'シンプルな挨拶プラグイン'
625
- end
626
-
627
- def commands
628
- {
629
- hello: method(:say_hello)
630
- }
631
- end
632
-
633
- private
634
-
635
- def say_hello
636
- "Hello from rufio!"
637
- end
638
- end
639
- end
606
+ # ~/.config/rufio/commands.rb
607
+ command "hello" do
608
+ ruby { "Hello from rufio!" }
609
+ description "挨拶コマンド"
640
610
  end
641
- ```
642
611
 
643
- **プラグインの使い方:**
644
-
645
- 1. rufioを起動
646
- 2. `:`キーでコマンドモードを起動
647
- 3. `hello`と入力(または`he`と入力してTabキーで補完)
648
- 4. Enterキーで実行
649
- 5. フローティングウィンドウに"Hello from rufio!"が表示される
650
-
651
- #### 外部gemに依存するプラグイン例
652
-
653
- ```ruby
654
- # ~/.rufio/plugins/ai_helper.rb
655
- module Rufio
656
- module Plugins
657
- class AiHelper < Plugin
658
- requires 'anthropic' # 依存gem宣言
659
-
660
- def name
661
- 'AiHelper'
662
- end
663
-
664
- def description
665
- 'Claude APIを使ったAIアシスタント'
666
- end
667
-
668
- def commands
669
- {
670
- ai: method(:ask_ai)
671
- }
672
- end
673
-
674
- def initialize
675
- super # 依存チェック実行
676
- @client = Anthropic::Client.new(
677
- api_key: ENV['ANTHROPIC_API_KEY']
678
- )
679
- end
680
-
681
- private
682
-
683
- def ask_ai
684
- response = @client.messages.create(
685
- model: "claude-3-5-sonnet-20241022",
686
- max_tokens: 1024,
687
- messages: [{role: "user", content: "Hello, Claude!"}]
688
- )
689
- response.content.first.text
690
- end
691
- end
692
- end
612
+ command "time" do
613
+ ruby { Time.now.strftime("%Y-%m-%d %H:%M:%S") }
614
+ description "現在時刻を表示"
693
615
  end
694
616
  ```
695
617
 
696
- **プラグインの使い方:**
697
-
698
- 1. 依存gemをインストール: `gem install anthropic`
699
- 2. 環境変数を設定: `export ANTHROPIC_API_KEY=your_api_key`
700
- 3. rufioを起動
701
- 4. `:`キーでコマンドモードを起動
702
- 5. `ai`と入力してEnterキーで実行
703
- 6. フローティングウィンドウにClaude APIからの応答が表示される
704
-
705
- ### プラグインの管理
706
-
707
- #### プラグインの有効/無効設定
618
+ #### シェルコマンドを実行するコマンド
708
619
 
709
- `~/.rufio/config.yml`でプラグインの有効/無効を制御できます:
620
+ ```ruby
621
+ command "status" do
622
+ shell "git status"
623
+ description "Gitステータスを表示"
624
+ end
710
625
 
711
- ```yaml
712
- plugins:
713
- fileoperations:
714
- enabled: true
715
- ai_helper:
716
- enabled: true
717
- my_custom:
718
- enabled: false
626
+ command "disk" do
627
+ shell "df -h"
628
+ description "ディスク使用量を表示"
629
+ end
719
630
  ```
720
631
 
721
- #### デフォルト動作
722
-
723
- - `config.yml`が存在しない → 全プラグイン有効
724
- - プラグインの設定がない → 有効とみなす
725
- - `enabled: false`が明示的に設定されている → 無効
726
-
727
- ### プラグインの配布方法
632
+ #### 外部スクリプトを実行するコマンド
728
633
 
729
- #### GitHub Gistで共有
730
-
731
- ```bash
732
- # プラグイン作者
733
- 1. GitHub Gistに.rbファイルをアップロード
734
- 2. Raw URLをユーザーに共有
735
-
736
- # ユーザー
737
- $ mkdir -p ~/.rufio/plugins
738
- $ curl -o ~/.rufio/plugins/my_plugin.rb [RAW_URL]
739
- $ rufio
740
- ✓ my_plugin 読み込み完了
634
+ ```ruby
635
+ command "build" do
636
+ script "~/.config/rufio/scripts/build.rb"
637
+ description "プロジェクトをビルド"
638
+ end
741
639
  ```
742
640
 
743
- #### GitHubリポジトリで共有
641
+ ### コマンドの使い方
744
642
 
745
- ```bash
746
- # プラグイン作者
747
- rufio-plugins/
748
- ├── plugin1.rb
749
- └── plugin2.rb
750
-
751
- # ユーザー
752
- $ curl -o ~/.rufio/plugins/plugin1.rb https://raw.githubusercontent.com/user/rufio-plugins/main/plugin1.rb
753
- ```
643
+ 1. rufioを起動
644
+ 2. `:`キーでコマンドモードを起動
645
+ 3. コマンド名を入力(または一部を入力してTabキーで補完)
646
+ 4. Enterキーで実行
647
+ 5. フローティングウィンドウに結果が表示される
754
648
 
755
- ### プラグインの主要機能
649
+ ### 組み込みコマンド
756
650
 
757
- #### 必須メソッド
651
+ rufioには以下のコマンドがデフォルトで組み込まれています:
758
652
 
759
- - `name`: プラグイン名(必須)
760
- - `description`: プラグインの説明(オプション、デフォルト: "")
761
- - `version`: プラグインのバージョン(オプション、デフォルト: "1.0.0")
762
- - `commands`: コマンド定義(オプション、デフォルト: {})
653
+ | コマンド | 説明 |
654
+ | -------- | ---- |
655
+ | `hello` | 挨拶メッセージを表示 |
656
+ | `stop` | rufioを終了 |
657
+ | `touch` | ファイルを作成 |
658
+ | `mkdir` | ディレクトリを作成 |
763
659
 
764
- #### 依存gem管理
660
+ ### DSLコマンドの種類
765
661
 
766
- - `requires 'gem_name'`: 依存gemを宣言
767
- - 依存gemが不足している場合、警告を表示してプラグインを無効化
768
- - rufio本体は正常に起動継続
662
+ 1. **ruby**: Rubyコードをインラインで実行
663
+ 2. **shell**: シェルコマンドを実行
664
+ 3. **script**: 外部スクリプトファイルを実行
769
665
 
770
- #### 自動登録機能
666
+ ### 設定ファイル構成
771
667
 
772
- - `Plugin`クラスを継承すると自動的に`PluginManager`に登録
773
- - 複雑な登録処理は不要
668
+ ```
669
+ ~/.config/rufio/
670
+ ├── config.rb # カラー設定
671
+ ├── commands.rb # DSLコマンド定義
672
+ ├── bookmarks.json # ブックマーク
673
+ ├── scripts/ # スクリプトファイル
674
+ └── log/ # 実行ログ
675
+ ```
774
676
 
775
677
  ## 開発
776
678
 
data/bin/rufio CHANGED
@@ -3,9 +3,6 @@
3
3
 
4
4
  require_relative '../lib/rufio'
5
5
 
6
- # プラグインを読み込む
7
- Rufio::PluginManager.load_all
8
-
9
6
  # YJITを早期に有効化(引数をチェック)
10
7
  if ARGV.include?('--yjit') && defined?(RubyVM::YJIT)
11
8
  RubyVM::YJIT.enable
@@ -0,0 +1,128 @@
1
+ # CHANGELOG v0.50.0
2
+
3
+ ## 概要
4
+
5
+ DSLコマンドシステムへの完全移行を完了し、旧Pluginシステムを廃止しました。
6
+
7
+ ## 重要な変更
8
+
9
+ ### DSLコマンドシステムへの統一
10
+
11
+ - **Pluginシステムの廃止**: 旧来のPluginベースのコマンドシステムを完全に削除
12
+ - **DSLコマンドへの一本化**: すべてのコマンドがDSLベースで定義可能に
13
+ - **組み込みコマンドのDSL化**: `hello`, `stop`, `touch`, `mkdir` などがDSLコマンドとして実装
14
+
15
+ ### 削除されたファイル
16
+
17
+ #### ライブラリ
18
+ - `lib/rufio/plugin.rb`
19
+ - `lib/rufio/plugin_manager.rb`
20
+ - `lib/rufio/plugin_config.rb`
21
+ - `lib/rufio/plugins/` ディレクトリ
22
+
23
+ #### テスト
24
+ - `test/test_plugin.rb`
25
+ - `test/test_plugin_config.rb`
26
+ - `test/test_plugin_manager.rb`
27
+ - `test/test_plugins_hello.rb`
28
+ - `test/test_plugins_file_operations.rb`
29
+
30
+ ### 新しいDSLコマンドシステム
31
+
32
+ #### コマンド定義ファイル
33
+
34
+ ```ruby
35
+ # ~/.config/rufio/commands.rb
36
+ command "hello" do
37
+ ruby { "Hello from rufio!" }
38
+ description "挨拶コマンド"
39
+ end
40
+
41
+ command "greet" do
42
+ shell "echo 'Hello, World!'"
43
+ description "シェルコマンドで挨拶"
44
+ end
45
+
46
+ command "build" do
47
+ script "~/.config/rufio/scripts/build.rb"
48
+ description "プロジェクトをビルド"
49
+ end
50
+ ```
51
+
52
+ #### DSLコマンドの種類
53
+
54
+ 1. **ruby**: Rubyコードをインラインで実行
55
+ 2. **shell**: シェルコマンドを実行
56
+ 3. **script**: 外部スクリプトファイルを実行
57
+
58
+ #### 組み込みコマンド
59
+
60
+ 以下のコマンドがデフォルトで利用可能:
61
+
62
+ - `hello` - 挨拶メッセージを表示
63
+ - `stop` - rufioを終了
64
+ - `touch` - ファイルを作成
65
+ - `mkdir` - ディレクトリを作成
66
+
67
+ ### 移行ガイド
68
+
69
+ #### 旧Pluginからの移行
70
+
71
+ **旧Plugin形式:**
72
+ ```ruby
73
+ module Rufio
74
+ module Plugins
75
+ class Hello < Plugin
76
+ def commands
77
+ { hello: method(:say_hello) }
78
+ end
79
+
80
+ def say_hello
81
+ "Hello from rufio!"
82
+ end
83
+ end
84
+ end
85
+ end
86
+ ```
87
+
88
+ **新DSL形式:**
89
+ ```ruby
90
+ # ~/.config/rufio/commands.rb
91
+ command "hello" do
92
+ ruby { "Hello from rufio!" }
93
+ description "挨拶コマンド"
94
+ end
95
+ ```
96
+
97
+ ### 破壊的変更
98
+
99
+ - `Rufio::Plugin` クラスは削除されました
100
+ - `Rufio::PluginManager` クラスは削除されました
101
+ - `Rufio::PluginConfig` クラスは削除されました
102
+ - `~/.rufio/plugins/` ディレクトリのプラグインは読み込まれなくなりました
103
+ - `~/.rufio/config.yml` のplugins設定は無視されます
104
+
105
+ ### 設定ファイルの変更
106
+
107
+ #### 新しい設定ファイル構成
108
+
109
+ ```
110
+ ~/.config/rufio/
111
+ ├── config.rb # カラー設定
112
+ ├── commands.rb # DSLコマンド定義(新規)
113
+ ├── bookmarks.json # ブックマーク
114
+ ├── scripts/ # スクリプトファイル
115
+ └── log/ # 実行ログ
116
+ ```
117
+
118
+ ## テスト
119
+
120
+ 全105テストがパス:
121
+ - `test_dsl_command.rb` - 14 tests
122
+ - `test_dsl_command_loader.rb` - 13 tests
123
+ - `test_dsl_command_inline.rb` - 18 tests
124
+ - `test_builtin_commands.rb` - 10 tests
125
+ - `test_command_mode.rb` - 19 tests
126
+ - `test_command_mode_unified.rb` - 11 tests
127
+ - `test_script_executor.rb` - 12 tests
128
+ - `test_dsl_integration.rb` - 8 tests
@@ -0,0 +1,8 @@
1
+ # rufio 設定ファイル (YAML)
2
+ # このファイルを ~/.config/rufio/config.yml に配置してください
3
+
4
+ # スクリプトパス - @コマンドで実行可能なスクリプトを検索するディレクトリ
5
+ script_paths:
6
+ - ~/.config/rufio/scripts/
7
+ - ~/scripts/
8
+ - ~/devs/scripts/
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rufio
4
+ # 組み込みコマンドを定義するモジュール
5
+ # DSL形式で定義されたコマンドをDslCommandインスタンスとして提供する
6
+ module BuiltinCommands
7
+ class << self
8
+ # 組み込みコマンドをロードする
9
+ # @return [Hash{Symbol => DslCommand}] コマンド名をキーとしたハッシュ
10
+ def load
11
+ commands = {}
12
+
13
+ # hello コマンド
14
+ commands[:hello] = DslCommand.new(
15
+ name: "hello",
16
+ ruby_block: -> { "Hello, World!\n\nこのコマンドはDSLで定義されています。" },
17
+ description: "挨拶メッセージを返す"
18
+ )
19
+
20
+ # stop コマンド
21
+ commands[:stop] = DslCommand.new(
22
+ name: "stop",
23
+ ruby_block: lambda {
24
+ sleep 5
25
+ "done"
26
+ },
27
+ description: "5秒待機してdoneを返す"
28
+ )
29
+
30
+ commands
31
+ end
32
+ end
33
+ end
34
+ end
@@ -5,8 +5,9 @@ module Rufio
5
5
  class CommandCompletion
6
6
  # 初期化
7
7
  # @param history [CommandHistory, nil] コマンド履歴(オプション)
8
- def initialize(history = nil)
9
- @command_mode = CommandMode.new
8
+ # @param command_mode [CommandMode, nil] コマンドモード(スクリプト補完に使用)
9
+ def initialize(history = nil, command_mode = nil)
10
+ @command_mode = command_mode || CommandMode.new
10
11
  @shell_completion = ShellCommandCompletion.new
11
12
  @history = history
12
13
  end
@@ -15,9 +16,9 @@ module Rufio
15
16
  # @param input [String] 入力されたテキスト
16
17
  # @return [Array<String>] 補完候補のリスト
17
18
  def complete(input)
18
- # 入力が空の場合は内部コマンドを返す
19
+ # 入力が空の場合は内部コマンドとスクリプトを返す
19
20
  if input.nil? || input.strip.empty?
20
- return @command_mode.available_commands.map(&:to_s)
21
+ return @command_mode.available_commands.map(&:to_s) + script_candidates('')
21
22
  end
22
23
 
23
24
  # シェルコマンド補完(!で始まる場合)
@@ -25,7 +26,12 @@ module Rufio
25
26
  return complete_shell_command(input.strip)
26
27
  end
27
28
 
28
- # 通常のコマンド補完(内部コマンド)
29
+ # スクリプト補完(@で始まる場合)
30
+ if input.strip.start_with?('@')
31
+ return @command_mode.complete_script(input.strip)
32
+ end
33
+
34
+ # 通常のコマンド補完(内部コマンド + スクリプト)
29
35
  available_commands = @command_mode.available_commands.map(&:to_s)
30
36
  input_lower = input.downcase
31
37
  candidates = available_commands.select do |command|
@@ -61,6 +67,15 @@ module Rufio
61
67
 
62
68
  private
63
69
 
70
+ # スクリプト候補を取得
71
+ # @param prefix [String] 入力中の文字列
72
+ # @return [Array<String>] スクリプト候補(@付き)
73
+ def script_candidates(prefix)
74
+ return [] unless @command_mode&.script_runner
75
+
76
+ @command_mode.complete_script("@#{prefix}")
77
+ end
78
+
64
79
  # シェルコマンドの補完
65
80
  # @param input [String] ! で始まる入力
66
81
  # @return [Array<String>] 補完候補のリスト