knobik/explorer-prompt
最新稳定版本:0.4.1
Composer 安装命令:
composer require knobik/explorer-prompt
包简介
README 文档
README
Laravel explorer style prompt based on laravel/prompts package. Build CLI table based explorers easily.
Installation
composer require knobik/explorer-prompt
Simple Example usage:
use function Knobik\Prompts\explorer; $result = explorer( items: [ [1, 'John Doe', 'john.doe@example.com'], [2, 'Jane Doe', 'jane.doe@example.com'], [3, 'Jan Kowalski', 'kowalski@example.com'], ], title: 'Hello from a explorer window', header: [ 'ID', 'Name', 'Email', ], ) ->prompt();
Filtering
You can filter on your data by pressing forward slash /.
Filtering prompt can be disabled by using disableFiltering method.
You can also create your custom filtering solution by providing an invokable class or function to the setFilterHandler method. Example class:
use Knobik\Prompts\ExplorerPrompt; class FilterHandler { public function __invoke(ExplorerPrompt $prompt, string $filter): array { if ($filter === '') { return $prompt->items; } return collect($prompt->items) ->filter(function ($item) use ($prompt, $filter) { $item = is_array($item) ? $item : [$item]; foreach (array_values($item) as $index => $column) { if ($prompt->getColumnFilterable($index) && str_contains($column, $filter)) { return true; } } return false; }) ->toArray(); } }
Advanced file explorer example:
use Knobik\Prompts\Key; use function Knobik\Prompts\explorer; function getDirectoryFiles(string $path): array { $files = collect(glob("{$path}/*")) ->mapWithKeys(function (string $filename) { return [ $filename => [ 'filename' => basename($filename), 'size' => filesize($filename), 'permissions' => sprintf('%o', fileperms($filename)), ] ]; }); if ($path !== '/') { $files->prepend([ 'filename' => '..', 'size' => null, 'permissions' => sprintf('%o', fileperms(dirname($path))) ], dirname($path)); } return $files->toArray(); } $path = '/var/www/html'; while (true) { $newPath = explorer( items: $this->getDirectoryFiles($path), title: $path, //fn(ExplorerPrompt $prompt) => $prompt->highlighted, header: [ 'File name', 'Size in bytes', 'Permissions' ], ) ->setCustomKeyHandler(Key::KEY_ESCAPE, function(ExplorerPrompt $prompt, string $key) { // custom key handler $prompt->cancel(); }) ->setColumnOptions( column: 2, width: 20, // number of characters, null to keep it in auto mode align: ColumnAlign::RIGHT, filterable: false ) ->prompt(); if ($newPath === null) { continue; // no item selected } $path = $newPath; if (is_file($path)) { $this->line(file_get_contents($path)); return self::SUCCESS; } }
统计信息
- 总下载量: 4.55k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-03-08