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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/README.md +96 -194
- data/bin/rufio +0 -3
- data/docs/CHANGELOG_v0.50.0.md +128 -0
- data/examples/config.yml +8 -0
- data/lib/rufio/builtin_commands.rb +34 -0
- data/lib/rufio/command_completion.rb +20 -5
- data/lib/rufio/command_mode.rb +157 -46
- data/lib/rufio/config_loader.rb +37 -0
- data/lib/rufio/dsl_command.rb +120 -0
- data/lib/rufio/dsl_command_loader.rb +177 -0
- data/lib/rufio/interpreter_resolver.rb +79 -0
- data/lib/rufio/job_manager.rb +128 -0
- data/lib/rufio/job_mode.rb +146 -0
- data/lib/rufio/keybind_handler.rb +243 -232
- data/lib/rufio/notification_manager.rb +77 -0
- data/lib/rufio/script_config_loader.rb +101 -0
- data/lib/rufio/script_executor.rb +253 -0
- data/lib/rufio/script_path_manager.rb +386 -0
- data/lib/rufio/script_runner.rb +216 -0
- data/lib/rufio/task_status.rb +118 -0
- data/lib/rufio/terminal_ui.rb +181 -495
- data/lib/rufio/version.rb +1 -1
- data/lib/rufio.rb +15 -11
- data/scripts/test_jobs/build_simulation.sh +29 -0
- data/scripts/test_jobs/deploy_simulation.sh +37 -0
- data/scripts/test_jobs/quick.sh +11 -0
- data/scripts/test_jobs/random_result.sh +23 -0
- data/scripts/test_jobs/slow_fail.sh +10 -0
- data/scripts/test_jobs/slow_success.sh +10 -0
- data/scripts/test_jobs/very_slow.sh +19 -0
- metadata +23 -13
- data/docs/file-preview-optimization-analysis.md +0 -759
- data/docs/file-preview-performance-issue-FIXED.md +0 -547
- data/lib/rufio/plugin.rb +0 -89
- data/lib/rufio/plugin_config.rb +0 -59
- data/lib/rufio/plugin_manager.rb +0 -84
- data/lib/rufio/plugins/file_operations.rb +0 -44
- data/lib/rufio/plugins/hello.rb +0 -30
- data/lib/rufio/plugins/stop.rb +0 -32
- data/lib/rufio/project_command.rb +0 -147
- data/lib/rufio/project_log.rb +0 -68
- data/lib/rufio/project_mode.rb +0 -58
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a880862d559dd867d819889c3458abac662ae2a262a93d09c552aec45f850f06
|
|
4
|
+
data.tar.gz: 1ede13dbac6ef6b6d0af6f0c0d10254a0a6cfa79869b6eafa8636bbd31f2e773
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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.
|
|
11
|
+
### 🚀 v0.60.0の重要な更新
|
|
12
12
|
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
-
|
|
13
|
+
- **⌨️ スクリプト補完機能**: コマンドモードでスクリプトのTab補完が可能に
|
|
14
|
+
- **🗑️ プロジェクトモード廃止**: `P`キーのプロジェクトモードを削除(ジョブモード`J`に機能統合予定)
|
|
15
|
+
- **🧹 コードクリーンアップ**: 未使用コードの削除でコードベースをスリム化
|
|
16
16
|
|
|
17
|
-
詳細は [CHANGELOG
|
|
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
|
-
-
|
|
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
|
-
| `
|
|
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
|
-
**
|
|
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
|
-
|
|
374
|
-
- **`
|
|
375
|
-
|
|
376
|
-
- **`
|
|
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
|
-
####
|
|
401
|
+
#### スクリプトパスとは
|
|
401
402
|
|
|
402
|
-
|
|
403
|
+
スクリプトパスは、スクリプトファイルを配置するディレクトリを登録する機能です。登録したディレクトリ内のスクリプトは、コマンドモードで`@`プレフィックスを使って実行できます。
|
|
403
404
|
|
|
404
|
-
####
|
|
405
|
+
#### スクリプトパスの管理 (`B` → `3`)
|
|
405
406
|
|
|
406
|
-
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
-
|
|
411
|
-
- `.rb`ファイルを一覧表示
|
|
412
|
-
- 選択したスクリプトを実行
|
|
413
|
-
- プロジェクトコンテキストで実行
|
|
407
|
+
- **一覧表示**: 登録済みのスクリプトパスを一覧表示
|
|
408
|
+
- **j/k**: カーソル移動
|
|
409
|
+
- **d**: 選択したパスを削除
|
|
410
|
+
- **Enter**: 選択したディレクトリにジャンプ
|
|
411
|
+
- **ESC**: メニューを閉じる
|
|
414
412
|
|
|
415
|
-
####
|
|
413
|
+
#### スクリプト補完機能
|
|
416
414
|
|
|
417
|
-
|
|
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
|
-
|
|
599
|
-
```
|
|
600
|
-
lib/rufio/plugins/*.rb
|
|
601
|
-
```
|
|
602
|
-
rufioに標準で含まれるプラグイン。外部gem依存なしの基本機能を提供。
|
|
595
|
+
ユーザー定義コマンドは以下のファイルに記述します:
|
|
603
596
|
|
|
604
|
-
#### 2. ユーザープラグイン
|
|
605
597
|
```
|
|
606
|
-
~/.rufio/
|
|
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/
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
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
|
-
|
|
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
|
-
|
|
620
|
+
```ruby
|
|
621
|
+
command "status" do
|
|
622
|
+
shell "git status"
|
|
623
|
+
description "Gitステータスを表示"
|
|
624
|
+
end
|
|
710
625
|
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
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
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
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
|
-
|
|
641
|
+
### コマンドの使い方
|
|
744
642
|
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
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
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
653
|
+
| コマンド | 説明 |
|
|
654
|
+
| -------- | ---- |
|
|
655
|
+
| `hello` | 挨拶メッセージを表示 |
|
|
656
|
+
| `stop` | rufioを終了 |
|
|
657
|
+
| `touch` | ファイルを作成 |
|
|
658
|
+
| `mkdir` | ディレクトリを作成 |
|
|
763
659
|
|
|
764
|
-
|
|
660
|
+
### DSLコマンドの種類
|
|
765
661
|
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
662
|
+
1. **ruby**: Rubyコードをインラインで実行
|
|
663
|
+
2. **shell**: シェルコマンドを実行
|
|
664
|
+
3. **script**: 外部スクリプトファイルを実行
|
|
769
665
|
|
|
770
|
-
|
|
666
|
+
### 設定ファイル構成
|
|
771
667
|
|
|
772
|
-
|
|
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
|
@@ -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
|
data/examples/config.yml
ADDED
|
@@ -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
|
-
|
|
9
|
-
|
|
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>] 補完候補のリスト
|